re PR rtl-optimization/78438 (incorrect comparison optimization)
authorJakub Jelinek <jakub@redhat.com>
Fri, 25 Nov 2016 19:24:22 +0000 (20:24 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Fri, 25 Nov 2016 19:24:22 +0000 (20:24 +0100)
PR rtl-optimization/78438
PR rtl-optimization/78477
* gcc.c-torture/execute/pr78438.c: New test.
* gcc.c-torture/execute/pr78477.c: New test.

From-SVN: r242883

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/execute/pr78438.c [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/execute/pr78477.c [new file with mode: 0644]

index 1dd7380d883393a214d686d369fb7da226d836cb..7df637122518b1177975a15bc0de51310a22a820 100644 (file)
@@ -1,5 +1,10 @@
 2016-11-25  Jakub Jelinek  <jakub@redhat.com>
 
+       PR rtl-optimization/78438
+       PR rtl-optimization/78477
+       * gcc.c-torture/execute/pr78438.c: New test.
+       * gcc.c-torture/execute/pr78477.c: New test.
+
        PR rtl-optimization/78526
        * gcc.dg/pr78526.c: New test.
 
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr78438.c b/gcc/testsuite/gcc.c-torture/execute/pr78438.c
new file mode 100644 (file)
index 0000000..3383c32
--- /dev/null
@@ -0,0 +1,22 @@
+/* PR target/78438 */
+
+char a = 0;
+int b = 197412621;
+
+__attribute__ ((noinline, noclone))
+void foo ()
+{
+  a = 0 > (short) (b >> 11);
+}
+
+int
+main ()
+{
+  asm volatile ("" : : : "memory");
+  if (__CHAR_BIT__ != 8 || sizeof (short) != 2 || sizeof (int) < 4)
+    return 0;
+  foo ();
+  if (a != 0)
+    __builtin_abort ();
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr78477.c b/gcc/testsuite/gcc.c-torture/execute/pr78477.c
new file mode 100644 (file)
index 0000000..62e894e
--- /dev/null
@@ -0,0 +1,27 @@
+/* PR rtl-optimization/78477 */
+
+unsigned a;
+unsigned short b;
+
+unsigned
+foo (unsigned x)
+{
+  b = x;
+  a >>= (b & 1);
+  b = 1 | (b << 5);
+  b >>= 15;
+  x = (unsigned char) b > ((2 - (unsigned char) b) & 1);
+  b = 0;
+  return x;
+}
+
+int
+main ()
+{
+  if (__CHAR_BIT__ != 8 || sizeof (short) != 2 || sizeof (int) < 4)
+    return 0;
+  unsigned x = foo (12345);
+  if (x != 0)
+    __builtin_abort ();
+  return 0;
+}