31 lines
915 B
Diff
31 lines
915 B
Diff
|
|
diff -uprN a/gcc/lra.c b/gcc/lra.c
|
||
|
|
--- a/gcc/lra.c 2020-12-14 15:26:36.331633230 +0800
|
||
|
|
+++ b/gcc/lra.c 2020-12-15 18:56:33.699633230 +0800
|
||
|
|
@@ -507,6 +507,26 @@ lra_emit_move (rtx x, rtx y)
|
||
|
|
data. */
|
||
|
|
if (old != max_reg_num ())
|
||
|
|
expand_reg_data (old);
|
||
|
|
+ while (insn != NULL)
|
||
|
|
+ {
|
||
|
|
+ if (GET_CODE (PATTERN (insn)) == SET
|
||
|
|
+ && GET_CODE (SET_SRC (PATTERN (insn))) == LO_SUM
|
||
|
|
+ && GET_CODE (SET_DEST (PATTERN (insn))) == REG
|
||
|
|
+ && strcmp (insn_data[recog_memoized (insn)].name,
|
||
|
|
+ "add_losym_di") == 0)
|
||
|
|
+ {
|
||
|
|
+ rtx add_losym_dest = SET_DEST (PATTERN (insn));
|
||
|
|
+ for (int i = (int) max_reg_num () - 1; i >= old; i--)
|
||
|
|
+ {
|
||
|
|
+ if (regno_reg_rtx[i] == add_losym_dest)
|
||
|
|
+ {
|
||
|
|
+ setup_reg_classes (i, GENERAL_REGS,
|
||
|
|
+ NO_REGS, GENERAL_REGS);
|
||
|
|
+ }
|
||
|
|
+ }
|
||
|
|
+ }
|
||
|
|
+ insn = PREV_INSN (insn);
|
||
|
|
+ }
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
lra_emit_add (x, XEXP (y, 0), XEXP (y, 1));
|