diff options
author | Kyrylo Tkachov <kyrylo.tkachov@arm.com> | 2014-10-29 21:44:05 +0000 |
---|---|---|
committer | Kyrylo Tkachov <ktkachov@gcc.gnu.org> | 2014-10-29 21:44:05 +0000 |
commit | 3fea1a75f5a7f9bba73e2b7dbf40aeee41a51983 (patch) | |
tree | e420a20917a7cfba03b9d4d171afd166c12e32e3 | |
parent | a56561ac2d88ea0bc0bb6551483c118358762842 (diff) | |
download | gcc-3fea1a75f5a7f9bba73e2b7dbf40aeee41a51983.zip gcc-3fea1a75f5a7f9bba73e2b7dbf40aeee41a51983.tar.gz gcc-3fea1a75f5a7f9bba73e2b7dbf40aeee41a51983.tar.bz2 |
[AArch64] Restore recog state after finding pre-madd instruction
* config/aarch64/aarch64.c (aarch64_madd_needs_nop): Restore
recog state after aarch64_prev_real_insn call.
* gcc.target/aarch64/madd_after_asm_1.c: New test.
From-SVN: r216852
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/aarch64/aarch64.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/aarch64/madd_after_asm_1.c | 14 |
4 files changed, 27 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9c85fa9..8093575 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ 2014-10-29 Kyrylo Tkachov <kyrylo.tkachov@arm.com> + * config/aarch64/aarch64.c (aarch64_madd_needs_nop): Restore + recog state after aarch64_prev_real_insn call. + +2014-10-29 Kyrylo Tkachov <kyrylo.tkachov@arm.com> + * config/aarch64/aarch64.h (MACHMODE): Add 'enum' to machine_mode. 2014-10-29 Kyrylo Tkachov <kyrylo.tkachov@arm.com> diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c index e222ee3..0400fd5 100644 --- a/gcc/config/aarch64/aarch64.c +++ b/gcc/config/aarch64/aarch64.c @@ -7770,6 +7770,10 @@ aarch64_madd_needs_nop (rtx_insn* insn) return false; prev = aarch64_prev_real_insn (insn); + /* aarch64_prev_real_insn can call recog_memoized on insns other than INSN. + Restore recog state to INSN to avoid state corruption. */ + extract_constrain_insn_cached (insn); + if (!prev || !has_memory_op (prev)) return false; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2955cfd..a362f13 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2014-10-29 Kyrylo Tkachov <kyrylo.tkachov@arm.com> + + * gcc.target/aarch64/madd_after_asm_1.c: New test. + 2014-10-29 DJ Delorie <dj@redhat.com> * gcc.dg/20141029-1.c: New. diff --git a/gcc/testsuite/gcc.target/aarch64/madd_after_asm_1.c b/gcc/testsuite/gcc.target/aarch64/madd_after_asm_1.c new file mode 100644 index 0000000..523941d --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/madd_after_asm_1.c @@ -0,0 +1,14 @@ +/* { dg-do assemble } */ +/* { dg-options "-O2 -mfix-cortex-a53-835769" } */ + +int +test (int a, double b, int c, int d, int e) +{ + double result; + __asm__ __volatile ("// %0, %1" + : "=w" (result) + : "0" (b) + : /* No clobbers */ + ); + return c * d + e; +} |