re PR target/65249 (unable to find a register to spill in class 'R0_REGS' when compiling protobuf on sh4)
PR target/65249 * config/sh/sh.md (movdi): Split simple reg move to two movsi when the destination is R0 so as to lower R0-register pressure. From-SVN: r225856
This commit is contained in:
parent
58b1eb4330
commit
fdc2ce3fb0
@ -1,3 +1,9 @@
|
||||
2015-07-16 Kaz Kojima <kkojima@gcc.gnu.org>
|
||||
|
||||
PR target/65249
|
||||
* config/sh/sh.md (movdi): Split simple reg move to two movsi
|
||||
when the destination is R0.
|
||||
|
||||
2015-07-16 Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
PR target/66866
|
||||
|
@ -7892,6 +7892,24 @@ label:
|
||||
""
|
||||
{
|
||||
prepare_move_operands (operands, DImode);
|
||||
if (TARGET_SH1)
|
||||
{
|
||||
/* When the dest operand is (R0, R1) register pair, split it to
|
||||
two movsi of which dest is R1 and R0 so as to lower R0-register
|
||||
pressure on the first movsi. Apply only for simple source not
|
||||
to make complex rtl here. */
|
||||
if (REG_P (operands[0])
|
||||
&& REGNO (operands[0]) == R0_REG
|
||||
&& REG_P (operands[1])
|
||||
&& REGNO (operands[1]) >= FIRST_PSEUDO_REGISTER)
|
||||
{
|
||||
emit_insn (gen_movsi (gen_rtx_REG (SImode, R1_REG),
|
||||
gen_rtx_SUBREG (SImode, operands[1], 4)));
|
||||
emit_insn (gen_movsi (gen_rtx_REG (SImode, R0_REG),
|
||||
gen_rtx_SUBREG (SImode, operands[1], 0)));
|
||||
DONE;
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
(define_insn "movdf_media"
|
||||
|
Loading…
Reference in New Issue
Block a user