aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2014-04-11 12:11:01 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2014-04-11 12:11:01 +0200
commitd8d6ea53a713ae30e8e4ccbe14ebec2002ce1f2c (patch)
treee221fee448df9eb7c97c417756159adfc787acd4 /gcc
parentf8e6f6bad71813e122ecf566c01fab78c0930855 (diff)
downloadgcc-d8d6ea53a713ae30e8e4ccbe14ebec2002ce1f2c.zip
gcc-d8d6ea53a713ae30e8e4ccbe14ebec2002ce1f2c.tar.gz
gcc-d8d6ea53a713ae30e8e4ccbe14ebec2002ce1f2c.tar.bz2
re PR rtl-optimization/60663 (Errors out on valid inline asm)
PR rtl-optimization/60663 * cse.c (cse_insn): Set src_volatile on ASM_OPERANDS in PARALLEL. * gcc.target/arm/pr60663.c: New test. From-SVN: r209293
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/cse.c7
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/arm/pr60663.c11
4 files changed, 29 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0aa9562..d702fae 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2014-04-11 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/60663
+ * cse.c (cse_insn): Set src_volatile on ASM_OPERANDS in
+ PARALLEL.
+
2014-04-10 Jan Hubicka <hubicka@ucw.cz>
Jakub Jelinek <jakub@redhat.com>
diff --git a/gcc/cse.c b/gcc/cse.c
index 852d13e..b8223f7 100644
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -4642,6 +4642,13 @@ cse_insn (rtx insn)
&& REGNO (dest) >= FIRST_PSEUDO_REGISTER)
sets[i].src_volatile = 1;
+ /* Also do not record result of a non-volatile inline asm with
+ more than one result or with clobbers, we do not want CSE to
+ break the inline asm apart. */
+ else if (GET_CODE (src) == ASM_OPERANDS
+ && GET_CODE (x) == PARALLEL)
+ sets[i].src_volatile = 1;
+
#if 0
/* It is no longer clear why we used to do this, but it doesn't
appear to still be needed. So let's try without it since this
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index a8bf48f..c9dbd8a 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2014-04-11 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/60663
+ * gcc.target/arm/pr60663.c: New test.
+
2014-04-10 Jason Merrill <jason@redhat.com>
* g++.dg/dso/dlclose1.C: Disable for 4.9.
diff --git a/gcc/testsuite/gcc.target/arm/pr60663.c b/gcc/testsuite/gcc.target/arm/pr60663.c
new file mode 100644
index 0000000..b79b830
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/pr60663.c
@@ -0,0 +1,11 @@
+/* PR rtl-optimization/60663 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -march=armv7-a" } */
+
+int
+foo (void)
+{
+ unsigned i, j;
+ asm ("%0 %1" : "=r" (i), "=r" (j));
+ return i;
+}