Commit de2b3f5c by Kyrylo Tkachov Committed by Kyrylo Tkachov

[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
parent 2e6315ef
2017-03-23 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
PR target/71436
* config/arm/arm.md (*load_multiple): Add reload_completed to
matching condition.
2017-03-23 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
Richard Biener <rguenth@suse.com>
......
......@@ -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,
......
2017-03-23 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
PR target/71436
* gcc.c-torture/compile/pr71436.c: New test.
2017-03-23 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
Richard Biener <rguenther@suse.de>
......
/* PR target/71436. */
#pragma pack(1)
struct S0
{
volatile int f0;
short f2;
};
void foo (struct S0 *);
int a, d;
static struct S0 b[5];
static struct S0 c;
void fn1 ();
void
main ()
{
{
struct S0 e;
for (; d; fn1 ())
{
{
a = 3;
for (; a >= 0; a -= 1)
{
{
e = c;
}
b[a] = e;
}
}
}
}
foo (b);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment