lra: A multiple_sets is not a simple_move_p (PR73650)
In the PR we have a PARALLEL of a move and a compare (a "mr." instruction). The compare is dead, so single_set on it returns just the move. Then, simple_move_p returns true; but the instruction does need reloads in this case. This patch solves this by making simple_move_p return false for every multiple_sets instruction. PR rtl-optimization/73650 * lra-constraints.c (simple_move_p): If the insn is multiple_sets it is not a simple move. From-SVN: r239483
This commit is contained in:
parent
5c578ae434
commit
2008be405c
@ -1,3 +1,9 @@
|
||||
2016-08-15 Segher Boessenkool <segher@kernel.crashing.org>
|
||||
|
||||
PR rtl-optimization/73650
|
||||
* lra-constraints.c (simple_move_p): If the insn is multiple_sets
|
||||
it is not a simple move.
|
||||
|
||||
2016-08-15 Martin Liska <mliska@suse.cz>
|
||||
|
||||
PR driver/72765
|
||||
|
@ -3493,6 +3493,13 @@ simple_move_p (void)
|
||||
lra_assert (curr_insn_set != NULL_RTX);
|
||||
dest = SET_DEST (curr_insn_set);
|
||||
src = SET_SRC (curr_insn_set);
|
||||
|
||||
/* If the instruction has multiple sets we need to process it even if it
|
||||
is single_set. This can happen if one or more of the SETs are dead.
|
||||
See PR73650. */
|
||||
if (multiple_sets (curr_insn))
|
||||
return false;
|
||||
|
||||
return ((dclass = get_op_class (dest)) != NO_REGS
|
||||
&& (sclass = get_op_class (src)) != NO_REGS
|
||||
/* The backend guarantees that register moves of cost 2
|
||||
|
Loading…
Reference in New Issue
Block a user