combine.c (simplify_if_then_else): (IF_THEN_ELSE (NE REG 0) (0) (8)) is REG for nonze...
authorJan Hubicka <jh@suse.cz>
Thu, 5 Jun 2003 13:00:14 +0000 (15:00 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Thu, 5 Jun 2003 13:00:14 +0000 (13:00 +0000)
* combine.c (simplify_if_then_else): (IF_THEN_ELSE (NE REG 0) (0) (8))
is REG for nonzero_bits (REG) == 8.

From-SVN: r67488

gcc/ChangeLog
gcc/combine.c

index c9af64a056b4adda8aead44863f59d201568a862..1a295ba5b6c8e5a96cd13b7d4ad342283e30f327 100644 (file)
@@ -1,3 +1,8 @@
+Thu Jun  5 14:59:44 CEST 2003  Jan Hubicka  <jh@suse.cz>
+
+       * combine.c (simplify_if_then_else): (IF_THEN_ELSE (NE REG 0) (0) (8))
+       is REG for nonzero_bits (REG) == 8.  
+
 Thu Jun  5 13:23:51 CEST 2003  Jan Hubicka  <jh@suse.cz>
 
        * i386.md (align): Fix warning; clarify what to do when no p2align
index c47065568fd8da276fbd8f45268a7310c5ebd4fc..d476bf0ac82377e3ac7a0e292c8be2d1bee57a3b 100644 (file)
@@ -5049,6 +5049,14 @@ simplify_if_then_else (x)
       simplify_shift_const (NULL_RTX, ASHIFT, mode,
                            gen_lowpart_for_combine (mode, XEXP (cond, 0)), i);
 
+  /* (IF_THEN_ELSE (NE REG 0) (0) (8)) is REG for nonzero_bits (REG) == 8.  */
+  if (true_code == NE && XEXP (cond, 1) == const0_rtx
+      && false_rtx == const0_rtx && GET_CODE (true_rtx) == CONST_INT
+      && (INTVAL (true_rtx) & GET_MODE_MASK (mode))
+         == nonzero_bits (XEXP (cond, 0), mode)
+      && (i = exact_log2 (INTVAL (true_rtx) & GET_MODE_MASK (mode))) >= 0)
+    return XEXP (cond, 0);
+
   return x;
 }
 \f