]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[AArch64] PR target/84748: Mark *compare_cstore<mode>_insn as clobbering CC reg
authorKyrylo Tkachov <kyrylo.tkachov@arm.com>
Tue, 10 Apr 2018 13:05:24 +0000 (13:05 +0000)
committerKyrylo Tkachov <ktkachov@gcc.gnu.org>
Tue, 10 Apr 2018 13:05:24 +0000 (13:05 +0000)
Backport from mainline
2018-03-08  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>

PR target/84748
* config/aarch64/aarch64.md (*compare_cstore<mode>_insn): Mark pattern
as clobbering CC_REGNUM.

* gcc.c-torture/execute/pr84748.c: New test.

From-SVN: r259271

gcc/ChangeLog
gcc/config/aarch64/aarch64.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/execute/pr84748.c [new file with mode: 0644]

index 2186cef8198e0807f3051a01b50d1e93aa290cf0..4b5ee7cd8f4b2ae0ee1c9bcd339d9fc7cc741ed2 100644 (file)
@@ -1,3 +1,12 @@
+2018-04-10  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+
+       Backport from mainline
+       2018-03-08  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+
+       PR target/84748
+       * config/aarch64/aarch64.md (*compare_cstore<mode>_insn): Mark pattern
+       as clobbering CC_REGNUM.
+
 2018-04-06  Eric Botcazou  <ebotcazou@adacore.com>
 
        PR target/85196
index 2c9f48cb79e577b6792e42f9db2fb0a3a9ab2d8b..d0517f9cd02af0a34010c358a94bbf6eb190c195 100644 (file)
 (define_insn_and_split "*compare_cstore<mode>_insn"
   [(set (match_operand:GPI 0 "register_operand" "=r")
         (EQL:GPI (match_operand:GPI 1 "register_operand" "r")
-                 (match_operand:GPI 2 "aarch64_imm24" "n")))]
+                 (match_operand:GPI 2 "aarch64_imm24" "n")))
+   (clobber (reg:CC CC_REGNUM))]
   "!aarch64_move_imm (INTVAL (operands[2]), <MODE>mode)
    && !aarch64_plus_operand (operands[2], <MODE>mode)
    && !reload_completed"
index 4101bf9e3b0738e3d1ed9b12cd7ec467e4b97099..955b32d233baa5291c3935155b64c26ac0e831b4 100644 (file)
@@ -1,3 +1,11 @@
+2018-04-10  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+
+       Backport from mainline
+       2018-03-08  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+
+       PR target/84748
+       * gcc.c-torture/execute/pr84748.c: New test.
+
 2018-04-06  Eric Botcazou  <ebotcazou@adacore.com>
 
        * g++.dg/opt/pr85196.C: New test.
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr84748.c b/gcc/testsuite/gcc.c-torture/execute/pr84748.c
new file mode 100644 (file)
index 0000000..9572ab2
--- /dev/null
@@ -0,0 +1,34 @@
+/* { dg-require-effective-target int128 } */
+
+typedef unsigned __int128 u128;
+
+int a, c, d;
+u128 b;
+
+unsigned long long g0, g1;
+
+void
+store (unsigned long long a0, unsigned long long a1)
+{
+  g0 = a0;
+  g1 = a1;
+}
+
+void
+foo (void)
+{
+  b += a;
+  c = d != 84347;
+  b /= c;
+  u128 x = b;
+  store (x >> 0, x >> 64);
+}
+
+int
+main (void)
+{
+  foo ();
+  if (g0 != 0 || g1 != 0)
+    __builtin_abort ();
+  return 0;
+}