PR rtl-optimization/53519
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 30 May 2012 06:53:46 +0000 (06:53 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 30 May 2012 06:53:46 +0000 (06:53 +0000)
* combine.c (simplify_shift_const_1) <case NOT>: Use constm1_rtx
instead of GEN_INT (GET_MODE_MASK (mode)) as second operand of XOR.

* gcc.c-torture/compile/pr53519.c: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@188001 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/combine.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/pr53519.c [new file with mode: 0644]

index 7999a50..b915e68 100644 (file)
@@ -1,3 +1,9 @@
+2012-05-30  Jakub Jelinek  <jakub@redhat.com>
+
+       PR rtl-optimization/53519
+       * combine.c (simplify_shift_const_1) <case NOT>: Use constm1_rtx
+       instead of GEN_INT (GET_MODE_MASK (mode)) as second operand of XOR.
+
 2012-05-30  Ramana Radhakrishnan  <ramana.radhakrishnan@linaro.org>
 
        * config/arm/arm.c (arm_evpc_neon_vrev): Adjust off by one error.
index d23ecfc..d6897a1 100644 (file)
@@ -10284,8 +10284,7 @@ simplify_shift_const_1 (enum rtx_code code, enum machine_mode result_mode,
            break;
 
          /* Make this fit the case below.  */
-         varop = gen_rtx_XOR (mode, XEXP (varop, 0),
-                              GEN_INT (GET_MODE_MASK (mode)));
+         varop = gen_rtx_XOR (mode, XEXP (varop, 0), constm1_rtx);
          continue;
 
        case IOR:
index 7e52cb9..2f42a8e 100644 (file)
@@ -1,3 +1,8 @@
+2012-05-30  Jakub Jelinek  <jakub@redhat.com>
+
+       PR rtl-optimization/53519
+       * gcc.c-torture/compile/pr53519.c: New test.
+
 2012-05-30  Ramana Radhakrishnan  <ramana.radhakrishnan@linaro.org>
 
        * gcc.target/arm/neon-vrev.c: New.
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr53519.c b/gcc/testsuite/gcc.c-torture/compile/pr53519.c
new file mode 100644 (file)
index 0000000..3adadcb
--- /dev/null
@@ -0,0 +1,26 @@
+/* PR rtl-optimization/53519 */
+
+int a, b, c, d, e;
+
+short int
+foo (short int x)
+{
+  return a == 0 ? x : 0;
+}
+
+short int
+bar (int x, int y)
+{
+  return x + y;
+}
+
+void
+baz (void)
+{
+  if (!e)
+    {
+      int f = foo (65535 ^ b);
+      if (bar (!6L <= ~f, ~e) == c)
+       d = 0;
+    }
+}