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>
|
2012-09-14 Eric Botcazou <ebotcazou@adacore.com>
|
||||||
|
|
||||||
PR rtl-optimization/44194
|
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.
|
However, we only ignore IN in its role as this reload.
|
||||||
If the insn uses IN elsewhere and it contains OUT,
|
If the insn uses IN elsewhere and it contains OUT,
|
||||||
that counts. We can't be sure it's the "same" operand
|
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;
|
saved_rtx = *inloc;
|
||||||
*inloc = const0_rtx;
|
*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++)
|
for (i = 0; i < nwords; i++)
|
||||||
if (! TEST_HARD_REG_BIT (reg_class_contents[(int) rclass],
|
if (! TEST_HARD_REG_BIT (reg_class_contents[(int) rclass],
|
||||||
regno + i))
|
regno + i)
|
||||||
|
|| fixed_regs[regno + i])
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (i == nwords)
|
if (i == nwords)
|
||||||
|
|
Loading…
Reference in New Issue