]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR target/78262 (wrong code with -fschedule-insns)
authorUros Bizjak <uros@gcc.gnu.org>
Wed, 9 Nov 2016 20:41:17 +0000 (21:41 +0100)
committerUros Bizjak <uros@gcc.gnu.org>
Wed, 9 Nov 2016 20:41:17 +0000 (21:41 +0100)
PR target/78262
* config/i386/i386.md (*<shift_insn><mode>3_doubleword): Mark
operand 0 as earlyclobber.

testsuite/ChangeLog:

PR target/78262
* gcc.target/i386/pr78262.c: New test.

From-SVN: r242022

gcc/ChangeLog
gcc/config/i386/i386.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/pr78262.c [new file with mode: 0644]

index 499052139557d1f535af822834dbd17dedd1cc43..1981638eea576feb2161d39bfddfe9ff349cbecd 100644 (file)
@@ -1,3 +1,9 @@
+2016-11-09  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/78262
+       * config/i386/i386.md (*<shift_insn><mode>3_doubleword): Mark
+       operand 0 as earlyclobber.
+
 2016-11-06  Jack Howarth  <howarth.at.gcc@gmail.com>
 
        PR driver/78206
 
 2016-11-03  Martin Liska  <mliska@suse.cz>
 
-       Backport from mainline
-       2016-08-12  Martin Liska  <mliska@suse.cz>
-       Adam Fineman  <afineman@afineman.com>
+       Backport from mainline
+       2016-08-12  Martin Liska  <mliska@suse.cz>
+                   Adam Fineman  <afineman@afineman.com>
 
-       * gcov.c (process_file): Create .gcov file when .gcda
-       file is missing.
+       * gcov.c (process_file): Create .gcov file when .gcda
+       file is missing.
 
 2016-11-03  Eric Botcazou  <ebotcazou@adacore.com>
 
index 393e38953aabbe34d0e5950b2a5ad2b3b9b37897..0807fa8db0d981c1b13c9260ff63e4256e249143 100644 (file)
    (set_attr "mode" "<MODE>")])
 
 (define_insn_and_split "*<shift_insn><mode>3_doubleword"
-  [(set (match_operand:DWI 0 "register_operand" "=r")
+  [(set (match_operand:DWI 0 "register_operand" "=&r")
        (any_shiftrt:DWI (match_operand:DWI 1 "register_operand" "0")
                         (match_operand:QI 2 "nonmemory_operand" "<S>c")))
    (clobber (reg:CC FLAGS_REG))]
index 79afa96bd386ed990ebabf41f94134aab8dae946..bb5e61c419a4e39e50cdb281ac3982aa17f866b2 100644 (file)
@@ -1,3 +1,8 @@
+2016-11-09  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/78262
+       * gcc.target/i386/pr78262.c: New test.
+
 2016-11-06  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
        Backport from trunk
 
 2016-11-03  Martin Liska  <mliska@suse.cz>
 
-       Backport from mainline
-       2016-08-12  Martin Liska  <mliska@suse.cz>
+       Backport from mainline
+       2016-08-12  Martin Liska  <mliska@suse.cz>
 
-       * g++.dg/gcov/gcov-16.C: New test.
-       * lib/gcov.exp: Support new argument for run-gcov function.
+       * g++.dg/gcov/gcov-16.C: New test.
+       * lib/gcov.exp: Support new argument for run-gcov function.
 
 2016-11-02  Will Schmidt  <will_schmidt@vnet.ibm.com>
 
 2016-10-13  Andrew Senkevich  <andrew.senkevich@intel.com>
 
        Backport from trunk
-       * testsuite/gcc.target/i386/pcommit-1.c: Deleted test.
-       * testsuite/gcc.target/i386/sse-12.c: Deleted -pcommit option.
-       * testsuite/gcc.target/i386/sse-13.c: Ditto.
-       * testsuite/gcc.target/i386/sse-14.c: Ditto.
-       * testsuite/gcc.target/i386/sse-22.c: Ditto.
-       * testsuite/gcc.target/i386/sse-23.c: Ditto.
-       * testsuite/g++.dg/other/i386-2.C: Ditto.
-       * testsuite/g++.dg/other/i386-3.C: Ditto.
+       * gcc.target/i386/pcommit-1.c: Deleted test.
+       * gcc.target/i386/sse-12.c: Deleted -pcommit option.
+       * gcc.target/i386/sse-13.c: Ditto.
+       * gcc.target/i386/sse-14.c: Ditto.
+       * gcc.target/i386/sse-22.c: Ditto.
+       * gcc.target/i386/sse-23.c: Ditto.
+       * g++.dg/other/i386-2.C: Ditto.
+       * g++.dg/other/i386-3.C: Ditto.
 
 2016-10-10  Eric Botcazou  <ebotcazou@adacore.com>
 
diff --git a/gcc/testsuite/gcc.target/i386/pr78262.c b/gcc/testsuite/gcc.target/i386/pr78262.c
new file mode 100644 (file)
index 0000000..a0ead41
--- /dev/null
@@ -0,0 +1,32 @@
+/* { dg-do run } */
+/* { dg-require-effective-target int128 } */
+/* { dg-options "-O -fschedule-insns" } */
+
+typedef unsigned char u8;
+typedef unsigned __int128 u128;
+
+static u128 u128_0;
+static u128 *p128;
+
+u128 __attribute__ ((noinline, noclone))
+foo(u8 u8_0)
+{
+  p128 = &u128_0;
+  u128_0 = u8_0;
+  u128_0 = u128_0 << 127 | u128_0 >> 1;
+  u128_0 >>= (u8)u128_0;
+  return 2 + u128_0;
+}
+
+int
+main()
+{
+  u128 x = foo(5);
+  if (p128 != &u128_0)
+    __builtin_abort();
+  if (u128_0 != ((u128)2 << 124))
+    __builtin_abort();
+  if (x != ((u128)2 << 124) + 2)
+    __builtin_abort();
+  return 0;
+}