]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR inline-asm/84941 (internal compiler error: in reg_overlap_mentioned_p...
authorJakub Jelinek <jakub@redhat.com>
Mon, 25 Jun 2018 17:37:02 +0000 (19:37 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Mon, 25 Jun 2018 17:37:02 +0000 (19:37 +0200)
Backported from mainline
2018-03-22  Jakub Jelinek  <jakub@redhat.com>

PR inline-asm/84941
* function.c (match_asm_constraints_1): Don't do the optimization
if input isn't a REG, SUBREG, MEM or constant.

* gcc.dg/pr84941.c: New test.

From-SVN: r262082

gcc/ChangeLog
gcc/function.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr84941.c [new file with mode: 0644]

index b3ffed6b477e964e7b9471602ae5943a94302b32..922d742f05a6c66136848947cb834627a1c5ba58 100644 (file)
@@ -1,6 +1,12 @@
 2018-06-25  Jakub Jelinek  <jakub@redhat.com>
 
        Backported from mainline
+       2018-03-22  Jakub Jelinek  <jakub@redhat.com>
+
+       PR inline-asm/84941
+       * function.c (match_asm_constraints_1): Don't do the optimization
+       if input isn't a REG, SUBREG, MEM or constant.
+
        2018-03-20  Jakub Jelinek  <jakub@redhat.com>
 
        PR debug/84875
index 6942a504127f6f83c56763f51f2425e75fea0ca3..214477e83652d046ca916c203b01da6ca8b8f73a 100644 (file)
@@ -6736,7 +6736,9 @@ match_asm_constraints_1 (rtx_insn *insn, rtx *p_sets, int noutputs)
       if (! REG_P (output)
          || rtx_equal_p (output, input)
          || (GET_MODE (input) != VOIDmode
-             && GET_MODE (input) != GET_MODE (output)))
+             && GET_MODE (input) != GET_MODE (output))
+         || !(REG_P (input) || SUBREG_P (input)
+              || MEM_P (input) || CONSTANT_P (input)))
        continue;
 
       /* We can't do anything if the output is also used as input,
index f7f3f492e67fe8c532704f51526a73e4f42491fc..6249ab542433e8d9434ed2611385289d1d4a6da6 100644 (file)
@@ -1,6 +1,11 @@
 2018-06-25  Jakub Jelinek  <jakub@redhat.com>
 
        Backported from mainline
+       2018-03-22  Jakub Jelinek  <jakub@redhat.com>
+
+       PR inline-asm/84941
+       * gcc.dg/pr84941.c: New test.
+
        2018-03-20  Jakub Jelinek  <jakub@redhat.com>
 
        PR debug/84875
diff --git a/gcc/testsuite/gcc.dg/pr84941.c b/gcc/testsuite/gcc.dg/pr84941.c
new file mode 100644 (file)
index 0000000..6f4674e
--- /dev/null
@@ -0,0 +1,10 @@
+/* PR inline-asm/84941 */
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+void
+foo (void)
+{
+  short *b[1] = { 0 };
+  asm volatile ("" : "=m,m" (b), "=r,r" (b) : "1,p" (b));
+}