aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSerge Belyshev <belyshev@depni.sinp.msu.ru>2006-11-09 19:24:32 +0000
committerRoger Sayle <sayle@gcc.gnu.org>2006-11-09 19:24:32 +0000
commit0ad12cd3b586778ac750bfd9172a68fe0d6a4140 (patch)
tree4512a404386f0c2ec5a9161e38f98f6db671385f /gcc
parent7114edca021e3251ec74acf93e9ebe18b128c87a (diff)
downloadgcc-0ad12cd3b586778ac750bfd9172a68fe0d6a4140.zip
gcc-0ad12cd3b586778ac750bfd9172a68fe0d6a4140.tar.gz
gcc-0ad12cd3b586778ac750bfd9172a68fe0d6a4140.tar.bz2
re PR middle-end/29726 (invalid folding of ((X >> C1) & C2) != 0 or "M-x is undefined" in emacs)
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/fold-const.c2
-rw-r--r--gcc/testsuite/ChangeLog8
-rw-r--r--gcc/testsuite/gcc.dg/fold-eqandshift-1.c4
-rw-r--r--gcc/testsuite/gcc.dg/fold-eqandshift-3.c21
5 files changed, 37 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ea975cd..7f4e39c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index c74ffa3..6016a70 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -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);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index d2dd872..cf60056 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
diff --git a/gcc/testsuite/gcc.dg/fold-eqandshift-1.c b/gcc/testsuite/gcc.dg/fold-eqandshift-1.c
index 6de7116..34906ba 100644
--- a/gcc/testsuite/gcc.dg/fold-eqandshift-1.c
+++ b/gcc/testsuite/gcc.dg/fold-eqandshift-1.c
@@ -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
index 0000000..d3b4adc
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/fold-eqandshift-3.c
@@ -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" } } */