ira: Skip some pseudos in move_unallocated_pseudos
This patch is to make move_unallocated_pseudos consistent to what we have in function find_moveable_pseudos, where we record the original pseudo into pseudo_replaced_reg only if validate_change succeeds with newreg. To ensure every unallocated pseudo in move_unallocated_pseudos has expected information, it's better to add a check and skip it if it's unexpected. This avoids possible ICEs in future. gcc/ChangeLog: * ira.c (move_unallocated_pseudos): Check other_reg and skip if it isn't set.
This commit is contained in:
parent
366f86bd42
commit
bcb3065b2b
@ -5111,6 +5111,15 @@ move_unallocated_pseudos (void)
|
||||
{
|
||||
int idx = i - first_moveable_pseudo;
|
||||
rtx other_reg = pseudo_replaced_reg[idx];
|
||||
/* The iterating range [first_moveable_pseudo, last_moveable_pseudo)
|
||||
covers every new pseudo created in find_moveable_pseudos,
|
||||
regardless of the validation with it is successful or not.
|
||||
So we need to skip the pseudos which were used in those failed
|
||||
validations to avoid unexpected DF info and consequent ICE.
|
||||
We only set pseudo_replaced_reg[] when the validation is successful
|
||||
in find_moveable_pseudos, it's enough to check it here. */
|
||||
if (!other_reg)
|
||||
continue;
|
||||
rtx_insn *def_insn = DF_REF_INSN (DF_REG_DEF_CHAIN (i));
|
||||
/* The use must follow all definitions of OTHER_REG, so we can
|
||||
insert the new definition immediately after any of them. */
|
||||
|
Loading…
Reference in New Issue
Block a user