]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR target/43897 (IA-64 asm clobbers are ignored)
authorJakub Jelinek <jakub@redhat.com>
Tue, 7 Dec 2010 15:32:58 +0000 (16:32 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 7 Dec 2010 15:32:58 +0000 (16:32 +0100)
Backport from mainline
2010-12-06  Jakub Jelinek  <jakub@redhat.com>

PR target/43897
* config/ia64/ia64.c (rtx_needs_barrier): Handle asm CLOBBER
as a store into that register.

* gcc.target/ia64/pr43897.c: New test.

From-SVN: r167551

gcc/ChangeLog
gcc/config/ia64/ia64.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/ia64/pr43897.c [new file with mode: 0644]

index d9637215765e45da3d92b96dcc0d5248d97fc7f6..abecb83026dfb9e257332cd584891e657d6d1cc4 100644 (file)
@@ -2,6 +2,10 @@
 
        Backport from mainline
        2010-12-06  Jakub Jelinek  <jakub@redhat.com>
+       PR target/43897
+       * config/ia64/ia64.c (rtx_needs_barrier): Handle asm CLOBBER
+       as a store into that register.
 
        PR rtl-optimization/46777
        * cfglayout.c (duplicate_insn_chain): Avoid duplicating
index e632fdc760915aa9d66aa45c71eb1833b5d90800..6a5625a6ee68e0af4e13ec8d42f0c9999879902d 100644 (file)
@@ -6050,6 +6050,17 @@ rtx_needs_barrier (rtx x, struct reg_flags flags, int pred)
              break;
 
            case CLOBBER:
+             if (REG_P (XEXP (pat, 0))
+                 && extract_asm_operands (x) != NULL_RTX
+                 && REGNO (XEXP (pat, 0)) != AR_UNAT_REGNUM)
+               {
+                 new_flags.is_write = 1;
+                 need_barrier |= rtx_needs_barrier (XEXP (pat, 0),
+                                                    new_flags, pred);
+                 new_flags = flags;
+               }
+             break;
+
            case RETURN:
              break;
 
index 20be75c0dd227aaba75ffedc9037a48586b2581a..5a0e2d0803d3d11f46a81df68a8f636f8fdef5b8 100644 (file)
@@ -2,6 +2,9 @@
 
        Backport from mainline
        2010-12-06  Jakub Jelinek  <jakub@redhat.com>
+       PR target/43897
+       * gcc.target/ia64/pr43897.c: New test.
 
        PR rtl-optimization/46777
        * gcc.dg/pr46777.c: New test.
diff --git a/gcc/testsuite/gcc.target/ia64/pr43897.c b/gcc/testsuite/gcc.target/ia64/pr43897.c
new file mode 100644 (file)
index 0000000..fb73e86
--- /dev/null
@@ -0,0 +1,12 @@
+/* PR target/43897 */
+/* { dg-do assemble } */
+/* { dg-options "-O2" } */
+
+int
+sub (int i)
+{
+  float tmp;
+  if (i)
+    __asm__ __volatile__ ("frcpa.s0 %0,p1=f0,f0":"=f" (tmp)::"p1");
+  return i + 10;
+}