aboutsummaryrefslogtreecommitdiff
path: root/gcc/config
diff options
context:
space:
mode:
authorKyrylo Tkachov <kyrylo.tkachov@arm.com>2017-03-23 14:55:48 +0000
committerKyrylo Tkachov <ktkachov@gcc.gnu.org>2017-03-23 14:55:48 +0000
commitde2b3f5ca93a5627988f274e5e325d023e01f2a1 (patch)
treedb67b3141ce9a6dd484355088107db04d452f91a /gcc/config
parent2e6315ef8c8a0f607fe86c7b7cf7d89549caa1e9 (diff)
downloadgcc-de2b3f5ca93a5627988f274e5e325d023e01f2a1.zip
gcc-de2b3f5ca93a5627988f274e5e325d023e01f2a1.tar.gz
gcc-de2b3f5ca93a5627988f274e5e325d023e01f2a1.tar.bz2
[ARM] PR target/71436: Restrict *load_multiple pattern till after LRA
PR target/71436 * config/arm/arm.md (*load_multiple): Add reload_completed to matching condition. * gcc.c-torture/compile/pr71436.c: New test. From-SVN: r246419
Diffstat (limited to 'gcc/config')
-rw-r--r--gcc/config/arm/arm.md5
1 files changed, 4 insertions, 1 deletions
diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md
index 8720a71..71cc109 100644
--- a/gcc/config/arm/arm.md
+++ b/gcc/config/arm/arm.md
@@ -11832,12 +11832,15 @@
;; Patterns in ldmstm.md don't cover more than 4 registers. This pattern covers
;; large lists without explicit writeback generated for APCS_FRAME epilogue.
+;; The operands are validated through the load_multiple_operation
+;; match_parallel predicate rather than through constraints so enable it only
+;; after reload.
(define_insn "*load_multiple"
[(match_parallel 0 "load_multiple_operation"
[(set (match_operand:SI 2 "s_register_operand" "=rk")
(mem:SI (match_operand:SI 1 "s_register_operand" "rk")))
])]
- "TARGET_32BIT"
+ "TARGET_32BIT && reload_completed"
"*
{
arm_output_multireg_pop (operands, /*return_pc=*/false,