re PR rtl-optimization/62208 (ICE with -fwhole-program on valid code at -O3 on x86_64...
authorRichard Sandiford <rdsandiford@googlemail.com>
Sun, 7 Sep 2014 08:54:49 +0000 (08:54 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Sun, 7 Sep 2014 08:54:49 +0000 (08:54 +0000)
gcc/
PR rtl-optimization/62208
* simplify-rtx.c (simplify_relational_operation_1): Use CONST0_RTX
rather than const0_rtx in eq/ne-xor simplifications.

gcc/testsuite/
* gcc.target/i386/pr62208.c: New test.

From-SVN: r215002

gcc/ChangeLog
gcc/simplify-rtx.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/pr62208.c [new file with mode: 0644]

index 3596380d1c3c53254a5d4ddbe719532f274697d4..e32812cf522ff2e802eb5457e5e29a7efd363e31 100644 (file)
@@ -1,3 +1,9 @@
+2014-09-07  Richard Sandiford  <rdsandiford@googlemail.com>
+
+       PR rtl-optimization/62208
+       * simplify-rtx.c (simplify_relational_operation_1): Use CONST0_RTX
+       rather than const0_rtx in eq/ne-xor simplifications.
+
 2014-09-06  Joern Rennecke  <joern.rennecke@embecosm.com>
 
        * config/arc/arc.c (arc_print_operand): Fix format for HOST_WIDE_INT.
index 9478b3c1f1ee43935be8bed67b9016c93985209d..32df80d331e74a2d1d335cf1582b60f23d22db3e 100644 (file)
@@ -4480,16 +4480,16 @@ simplify_relational_operation_1 (enum rtx_code code, enum machine_mode mode,
       && op0code == XOR
       && rtx_equal_p (XEXP (op0, 0), op1)
       && !side_effects_p (XEXP (op0, 0)))
-    return simplify_gen_relational (code, mode, cmp_mode,
-                                   XEXP (op0, 1), const0_rtx);
+    return simplify_gen_relational (code, mode, cmp_mode, XEXP (op0, 1),
+                                   CONST0_RTX (mode));
 
   /* Likewise (eq/ne (xor x y) y) simplifies to (eq/ne x 0).  */
   if ((code == EQ || code == NE)
       && op0code == XOR
       && rtx_equal_p (XEXP (op0, 1), op1)
       && !side_effects_p (XEXP (op0, 1)))
-    return simplify_gen_relational (code, mode, cmp_mode,
-                                   XEXP (op0, 0), const0_rtx);
+    return simplify_gen_relational (code, mode, cmp_mode, XEXP (op0, 0),
+                                   CONST0_RTX (mode));
 
   /* (eq/ne (xor x C1) C2) simplifies to (eq/ne x (C1^C2)).  */
   if ((code == EQ || code == NE)
index dac150700a914dffdbf143be817283cd36ba8a22..084c0d104556d23fbcfed9d6e80b52df7e327342 100644 (file)
@@ -1,3 +1,7 @@
+2014-09-07  Richard Sandiford  <rdsandiford@googlemail.com>
+
+       * gcc.target/i386/pr62208.c: New test.
+
 2014-09-06  John David Anglin  <danglin@gcc.gnu.org>
 
        PR testsuite/56194
diff --git a/gcc/testsuite/gcc.target/i386/pr62208.c b/gcc/testsuite/gcc.target/i386/pr62208.c
new file mode 100644 (file)
index 0000000..1fc9733
--- /dev/null
@@ -0,0 +1,23 @@
+/* { dg-options "-O3 -fwhole-program -march=x86-64" } */
+
+int *a;
+unsigned int b;
+
+void fn2 ()
+{
+  int t[9];
+  for (; b; b++)
+    *a ^= (~t[b] != t[b]);
+}
+
+int fn1 ()
+{
+  fn2 (); 
+  return 0; 
+}
+
+int main ()
+{
+  fn1 (); 
+  return 0;
+}