]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR target/43897 (IA-64 asm clobbers are ignored)
authorJakub Jelinek <jakub@redhat.com>
Mon, 6 Dec 2010 19:31:57 +0000 (20:31 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Mon, 6 Dec 2010 19:31:57 +0000 (20:31 +0100)
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: r167516

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

index 48c60c039c32def00512513f3ca14a77fbc4a4e0..cc1d2c6f05ebf8a4efc92bda54250b608db0135c 100644 (file)
@@ -1,5 +1,9 @@
 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 tree-optimization/46528
        PR debug/46338
        * profile.c (branch_prob): Make sure last is never set to a debug
index 0c2d20eaf6e0e8574efaaead8b18d22b2ef06f46..f789d00ebc666b1ab811a9841f94813811a821d0 100644 (file)
@@ -6320,6 +6320,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 f64afd425725c607d4d1fb9581952daaf597ea88..b0ed62160eac47b921774d037f04819d96f14b78 100644 (file)
@@ -1,5 +1,8 @@
 2010-12-06  Jakub Jelinek  <jakub@redhat.com>
 
+       PR target/43897
+       * gcc.target/ia64/pr43897.c: New test.
+
        PR debug/46771
        * gcc.dg/pr46771.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;
+}