re PR target/54516 (ICE in reload_cse_simplify_operands, at postreload.c:403 with -O1 -march=armv7-a -mthumb)
PR target/54516 PR rtl-optimization/54540 * reload.c (find_dummy_reload): Don't use OUT as a reload reg for IN if it overlaps a fixed register. From-SVN: r191307
This commit is contained in:
parent
cde43acdba
commit
0290430b75
@ -1,3 +1,10 @@
|
||||
2012-09-14 Richard Earnshaw <rearnsha@arm.com>
|
||||
|
||||
PR target/54516
|
||||
PR rtl-optimization/54540
|
||||
* reload.c (find_dummy_reload): Don't use OUT as a reload reg
|
||||
for IN if it overlaps a fixed register.
|
||||
|
||||
2012-09-14 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
PR rtl-optimization/44194
|
||||
|
10
gcc/reload.c
10
gcc/reload.c
@ -2036,7 +2036,12 @@ find_dummy_reload (rtx real_in, rtx real_out, rtx *inloc, rtx *outloc,
|
||||
However, we only ignore IN in its role as this reload.
|
||||
If the insn uses IN elsewhere and it contains OUT,
|
||||
that counts. We can't be sure it's the "same" operand
|
||||
so it might not go through this reload. */
|
||||
so it might not go through this reload.
|
||||
|
||||
We also need to avoid using OUT if it, or part of it, is a
|
||||
fixed register. Modifying such registers, even transiently,
|
||||
may have undefined effects on the machine, such as modifying
|
||||
the stack pointer. */
|
||||
saved_rtx = *inloc;
|
||||
*inloc = const0_rtx;
|
||||
|
||||
@ -2049,7 +2054,8 @@ find_dummy_reload (rtx real_in, rtx real_out, rtx *inloc, rtx *outloc,
|
||||
|
||||
for (i = 0; i < nwords; i++)
|
||||
if (! TEST_HARD_REG_BIT (reg_class_contents[(int) rclass],
|
||||
regno + i))
|
||||
regno + i)
|
||||
|| fixed_regs[regno + i])
|
||||
break;
|
||||
|
||||
if (i == nwords)
|
||||
|
Loading…
Reference in New Issue
Block a user