diff mbox

[match-and-simplify] Pattern for simplify_conversion_from_bitmask

Message ID alpine.LSU.2.11.1409111428510.20733@zhemvz.fhfr.qr
State New
Headers show

Commit Message

Richard Biener Sept. 11, 2014, 12:29 p.m. UTC
Applied.

Richard.

2014-09-11  Richard Biener  <rguenther@suse.de>

	* match-plusminus.pd: Fix typo.
	* match-conversions.pd: Add pattern for
	simplify_conversion_from_bitmask.
diff mbox

Patch

Index: gcc/match-conversions.pd
===================================================================
--- gcc/match-conversions.pd	(revision 215162)
+++ gcc/match-conversions.pd	(working copy)
@@ -202,3 +202,19 @@ 
 	(unsigned) significand_size (TYPE_MODE (inter_type))
 	>= inside_prec - !inside_unsignedp)
     (convert @0))))))
+
+/* From tree-ssa-forwprop.c:simplify_conversion_from_bitmask.  */
+
+/* If we have a narrowing conversion to an integral
+   type that is fed by a BIT_AND_EXPR, we might be
+   able to remove the BIT_AND_EXPR if it merely
+   masks off bits outside the final type (and nothing
+   else.  */
+(simplify
+  (convert (bit_and @0 INTEGER_CST@1))
+  (if (INTEGRAL_TYPE_P (type)
+       && INTEGRAL_TYPE_P (TREE_TYPE (@0))
+       && TYPE_PRECISION (type) <= TYPE_PRECISION (TREE_TYPE (@0))
+       && operand_equal_p (@1, build_low_bits_mask (TREE_TYPE (@1),
+						    TYPE_PRECISION (type)), 0))
+   (convert @0)))
Index: gcc/match-plusminus.pd
===================================================================
--- gcc/match-plusminus.pd	(revision 215169)
+++ gcc/match-plusminus.pd	(working copy)
@@ -137,8 +137,8 @@  along with GCC; see the file COPYING3.
   (pointer_plus @0 (convert?@2 (minus@3 (convert @1) (convert @0))))
   /* Conditionally look through a sign-changing conversion.  */
   (if (TYPE_PRECISION (TREE_TYPE (@2)) == TYPE_PRECISION (TREE_TYPE (@3))
-       && ((GIMPLE && useless_type_conversion_p (type, TREE_TYPE (@1))
-	    || (GENERIC && type == TREE_TYPE (@1)))))
+       && ((GIMPLE && useless_type_conversion_p (type, TREE_TYPE (@1)))
+	    || (GENERIC && type == TREE_TYPE (@1))))
    @1))
 
 /* From tree-ssa-forwprop.c:associate_pointerplus_align.  */