re PR middle-end/29726 (invalid folding of ((X >> C1) & C2) != 0 or "M-x is undefined...
authorSerge Belyshev <belyshev@depni.sinp.msu.ru>
Thu, 9 Nov 2006 19:24:32 +0000 (19:24 +0000)
committerRoger Sayle <sayle@gcc.gnu.org>
Thu, 9 Nov 2006 19:24:32 +0000 (19:24 +0000)
2006-11-09  Serge Belyshev  <belyshev@depni.sinp.msu.ru>

PR middle-end/29726
* fold-const.c (fold_binary) <EQ_EXPR>: Fix typo in variable name.

* gcc.dg/fold-eqandshift-1.c (test5): Uncomment function.
(test6): Ditto.
(dg-final): Add scan-tree-dump-times patterns for test5 and test6.
* gcc.dg/fold-eqandshift-3.c: New test case.

From-SVN: r118625

gcc/ChangeLog
gcc/fold-const.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/fold-eqandshift-1.c
gcc/testsuite/gcc.dg/fold-eqandshift-3.c [new file with mode: 0644]

index ea975cdbbf6930d904da1f218a42dffc35b97b3a..7f4e39ca2150d2f8cbf66d4071d66d6413c4cfb1 100644 (file)
@@ -1,3 +1,8 @@
+2006-11-09  Serge Belyshev  <belyshev@depni.sinp.msu.ru>
+
+       PR middle-end/29726
+       * fold-const.c (fold_binary) <EQ_EXPR>: Fix typo in variable name.
+
 2006-11-09  Andreas Krebbel  <krebbel1@de.ibm.com>
 
        * simplify-rtx.c (avoid_constant_pool_reference): Avoid calling 
index c74ffa37bdece36f524477e601cdb8bfbbf686bd..6016a702d69c240a45a9be296d24e20178f93542 100644 (file)
@@ -10587,7 +10587,7 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1)
              unsigned HOST_WIDE_INT log2 = tree_log2 (arg01);
              /* If (C2 << C1) doesn't overflow, then ((X >> C1) & C2) != 0
                 can be rewritten as (X & (C2 << C1)) != 0.  */
-             if ((log2 + TREE_INT_CST_LOW (arg01)) < prec)
+             if ((log2 + TREE_INT_CST_LOW (arg001)) < prec)
                {
                  tem = fold_build2 (LSHIFT_EXPR, itype, arg01, arg001);
                  tem = fold_build2 (BIT_AND_EXPR, itype, arg000, tem);
index d2dd8722a5ce64bc00d42e0e5068037bab7ca13b..cf60056a638412b7cf0e04faf1a897d87cb7f3e3 100644 (file)
@@ -1,3 +1,11 @@
+2006-11-09  Serge Belyshev  <belyshev@depni.sinp.msu.ru>
+
+       PR middle-end/29726
+       * gcc.dg/fold-eqandshift-1.c (test5): Uncomment function.
+       (test6): Ditto.
+       (dg-final): Add scan-tree-dump-times patterns for test5 and test6.
+       * gcc.dg/fold-eqandshift-3.c: New test case.
+
 2006-11-09 Paul Thomas <pault@gcc.gnu.org>
 
        PR fortran/29699
index 6de71165e9d6f377b9371a8df6811d6b1b9aaf2a..34906bad0205a23c14b4bc926de1aac67d769635 100644 (file)
@@ -25,7 +25,6 @@ int test4(int d)
   return (d >> 3) & 4;
 }
 
-#if 0
 void test5(int e)
 {
   if ((e >> 31) & 64)
@@ -37,10 +36,11 @@ void test6(unsigned int f)
   if ((f >> 31) & 64)
     foo();
 }
-#endif
 
 /* { dg-final { scan-tree-dump-times "\\(a \& 8\\) != 0" 1 "original" } } */
 /* { dg-final { scan-tree-dump-times "\\(b \& 32\\) != 0" 1 "original" } } */
 /* { dg-final { scan-tree-dump-times "c >> 3 \& 1" 1 "original" } } */
 /* { dg-final { scan-tree-dump-times "d >> 3 \& 4" 1 "original" } } */
+/* { dg-final { scan-tree-dump-times "e < 0" 1 "original" } } */
+/* { dg-final { scan-tree-dump-times "if \\(0\\)" 1 "original" } } */
 /* { dg-final { cleanup-tree-dump "original" } } */
diff --git a/gcc/testsuite/gcc.dg/fold-eqandshift-3.c b/gcc/testsuite/gcc.dg/fold-eqandshift-3.c
new file mode 100644 (file)
index 0000000..d3b4adc
--- /dev/null
@@ -0,0 +1,21 @@
+/* PR middle-end/29726 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-original" } */
+
+void foo (void);
+
+int test1 (int a)
+{
+  if ((a >> 3) & 134217728)
+    foo ();
+}
+
+int test2 (unsigned int b)
+{
+  if ((b >> 3) & 134217728)
+    foo ();
+}
+
+/* { dg-final { scan-tree-dump-times "\\(a \& 1073741824\\) != 0" 1 "original" } } */
+/* { dg-final { scan-tree-dump-times "\\(b \& 1073741824\\) != 0" 1 "original" } } */
+/* { dg-final { cleanup-tree-dump "original" } } */