diff options
author | Jakub Jelinek <jakub@redhat.com> | 2018-03-22 13:31:46 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2018-03-22 13:31:46 +0100 |
commit | 3c896da0fd831fac95a6e9a846bd8c19fa79f338 (patch) | |
tree | 83bdd9dd10f9471efd301496ee16442b4bd9ce58 /gcc | |
parent | f262038551353b15dcc0720c5858249f01c8fba7 (diff) | |
download | gcc-3c896da0fd831fac95a6e9a846bd8c19fa79f338.zip gcc-3c896da0fd831fac95a6e9a846bd8c19fa79f338.tar.gz gcc-3c896da0fd831fac95a6e9a846bd8c19fa79f338.tar.bz2 |
re PR inline-asm/84941 (internal compiler error: in reg_overlap_mentioned_p, at rtlanal.c:1870 (reg_overlap_mentioned_p()/match_asm_constraints_1()))
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: r258764
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/function.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr84941.c | 10 |
4 files changed, 24 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 06320e4..5a748b6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +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-22 Tom de Vries <tom@codesourcery.com> PR tree-optimization/84956 diff --git a/gcc/function.c b/gcc/function.c index 1a09ff0..485ddfb 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -6662,7 +6662,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, diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index abc1b9f..4039a01 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-03-22 Jakub Jelinek <jakub@redhat.com> + + PR inline-asm/84941 + * gcc.dg/pr84941.c: New test. + 2018-03-22 Tom de Vries <tom@codesourcery.com> PR tree-optimization/84956 diff --git a/gcc/testsuite/gcc.dg/pr84941.c b/gcc/testsuite/gcc.dg/pr84941.c new file mode 100644 index 0000000..6f4674e --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr84941.c @@ -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)); +} |