combine: Fix various shortcomings in make_more_copies (PR87701, PR87780)
This rewrites most of make_more_copies, in the process fixing a few PRs and some other bugs, and working around a few target problems. Certain notes turn out to actually change the meaning of the RTL, so we cannot drop them; and i386 takes subregs of hard regs. PR rtl-optimization/87701 PR rtl-optimization/87780 * combine.c (make_more_copies): Rewrite. From-SVN: r265582
This commit is contained in:
parent
6679694ac9
commit
aef7647f4a
2 changed files with 11 additions and 10 deletions
|
@ -1,3 +1,9 @@
|
|||
2018-10-29 Segher Boessenkool <segher@kernel.crashing.org>
|
||||
|
||||
PR rtl-optimization/87701
|
||||
PR rtl-optimization/87780
|
||||
* combine.c (make_more_copies): Rewrite.
|
||||
|
||||
2018-10-28 Kugan Vivekanandarajah <kuganv@linaro.org>
|
||||
|
||||
* doc/generic.texi (ABSU_EXPR): Document.
|
||||
|
|
|
@ -14956,25 +14956,20 @@ make_more_copies (void)
|
|||
rtx set = single_set (insn);
|
||||
if (!set)
|
||||
continue;
|
||||
rtx src = SET_SRC (set);
|
||||
rtx dest = SET_DEST (set);
|
||||
if (dest == pc_rtx)
|
||||
continue;
|
||||
if (GET_CODE (src) == SUBREG)
|
||||
src = SUBREG_REG (src);
|
||||
rtx src = SET_SRC (set);
|
||||
if (!(REG_P (src) && HARD_REGISTER_P (src)))
|
||||
continue;
|
||||
if (TEST_HARD_REG_BIT (fixed_reg_set, REGNO (src)))
|
||||
continue;
|
||||
|
||||
rtx new_reg = gen_reg_rtx (GET_MODE (dest));
|
||||
rtx_insn *insn1 = gen_move_insn (new_reg, src);
|
||||
rtx_insn *insn2 = gen_move_insn (dest, new_reg);
|
||||
emit_insn_after (insn1, insn);
|
||||
emit_insn_after (insn2, insn1);
|
||||
delete_insn (insn);
|
||||
|
||||
insn = insn2;
|
||||
rtx_insn *new_insn = gen_move_insn (new_reg, src);
|
||||
SET_SRC (set) = new_reg;
|
||||
emit_insn_before (new_insn, insn);
|
||||
df_insn_rescan (insn);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue