On 12/20/13 01:24, Jakub Jelinek wrote:
Thanks for working on this, the only thing I'd worry about are
HARD_REGNO_NREGS > 1 registers if the two hard regs might overlap.
The reg_set_between_p and reg_used_between_p calls when you dig down
into them eventually use reg_overlap_mentioned_p which should do the
right thing in this regard.
I'll audit ree for problems of this nature.
+ /* If the extension's source/destination registers are not the same
+ then we need to change the original load to reference the destination
+ of the extension. Then we need to emit a copy from that destination
+ to the original destination of the load. */
+ rtx new_reg;
+ bool copy_needed
+ = REGNO (SET_DEST (PATTERN (cand->insn)))
+ != REGNO (XEXP (SET_SRC (PATTERN (cand->insn)), 0));
Perhaps the right formatting here would be
bool copy_needed
= (REGNO (SET_DEST (PATTERN (cand->insn)))
!= REGNO (XEXP (SET_SRC (PATTERN (cand->insn)), 0)));
? ()s for emacs, and aligning != under REGNO.
Agreed. I was factoring out that test and didn't fix the formatting.
+ if (copy_needed)
+ new_reg = gen_rtx_REG (cand->mode, REGNO (SET_DEST (PATTERN
(cand->insn))));
Too long line.
Ugh. 80 exactly. There are times I hate our conventions :(
jeff