re PR debug/64511 (ICE at -O3 with -g enabled on x86_64-linux-gnu)
authorJakub Jelinek <jakub@redhat.com>
Wed, 21 Jan 2015 21:59:34 +0000 (22:59 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 21 Jan 2015 21:59:34 +0000 (22:59 +0100)
PR debug/64511
* simplify-rtx.c (simplify_relational_operation_1): Don't try to
optimize (eq/ne (and (side_effects) (const_int 0)) (const_int 0))
into (eq/ne (and (not (side_effects)) (const_int 0)) (const_int 0)).

* gcc.dg/pr64511.c: New test.

From-SVN: r219974

gcc/ChangeLog
gcc/simplify-rtx.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr64511.c [new file with mode: 0644]

index e96a9e156d03923bfca190a1324336d3628db5b0..190fdfdc8aa8523207c8371278159ca89aba9d72 100644 (file)
@@ -1,5 +1,10 @@
 2015-01-21  Jakub Jelinek  <jakub@redhat.com>
 
+       PR debug/64511
+       * simplify-rtx.c (simplify_relational_operation_1): Don't try to
+       optimize (eq/ne (and (side_effects) (const_int 0)) (const_int 0))
+       into (eq/ne (and (not (side_effects)) (const_int 0)) (const_int 0)).
+
        PR sanitizer/64706
        * doc/invoke.texi (-fsanitize=vptr): Document.
 
index d26267d1717280056082a0fb156e49d929ef82a4..5c9e3bf166720739581fa5a10f8bba365bc8e2ea 100644 (file)
@@ -4589,7 +4589,8 @@ simplify_relational_operation_1 (enum rtx_code code, machine_mode mode,
   if ((code == EQ || code == NE)
       && op0code == AND
       && rtx_equal_p (XEXP (op0, 0), op1)
-      && !side_effects_p (op1))
+      && !side_effects_p (op1)
+      && op1 != CONST0_RTX (cmp_mode))
     {
       rtx not_y = simplify_gen_unary (NOT, cmp_mode, XEXP (op0, 1), cmp_mode);
       rtx lhs = simplify_gen_binary (AND, cmp_mode, not_y, XEXP (op0, 0));
@@ -4602,7 +4603,8 @@ simplify_relational_operation_1 (enum rtx_code code, machine_mode mode,
   if ((code == EQ || code == NE)
       && op0code == AND
       && rtx_equal_p (XEXP (op0, 1), op1)
-      && !side_effects_p (op1))
+      && !side_effects_p (op1)
+      && op1 != CONST0_RTX (cmp_mode))
     {
       rtx not_x = simplify_gen_unary (NOT, cmp_mode, XEXP (op0, 0), cmp_mode);
       rtx lhs = simplify_gen_binary (AND, cmp_mode, not_x, XEXP (op0, 1));
index 057f0ca297d294b924e18e67ce740ab850116d5e..f093c78841c1ad1688792856a360d23f453b3a05 100644 (file)
@@ -1,5 +1,8 @@
 2015-01-21  Jakub Jelinek  <jakub@redhat.com>
 
+       PR debug/64511
+       * gcc.dg/pr64511.c: New test.
+
        PR rtl-optimization/62078
        * g++.dg/opt/pr62078.C: New test.
 
diff --git a/gcc/testsuite/gcc.dg/pr64511.c b/gcc/testsuite/gcc.dg/pr64511.c
new file mode 100644 (file)
index 0000000..83cb5af
--- /dev/null
@@ -0,0 +1,23 @@
+/* PR debug/64511 */
+/* { dg-do compile } */
+/* { dg-options "-O3 -g" } */
+
+int a, c;
+int *volatile b;
+
+void
+foo (int p)
+{
+  int d;
+  int *e = &a;
+  d = ((p == 0) & *e) != 0;
+  b = e;
+  for (; c;)
+    ;
+}
+
+void
+bar (void)
+{
+  foo (1);
+}