On 10/1/19 4:39 PM, Richard Sandiford wrote:
> One effect of https://gcc.gnu.org/ml/gcc-patches/2019-09/msg00802.html
> was to strengthen the sanity check in lra_assigns so that it checks
> whether reg_renumber is consistent with the whole conflict set.
> This duly tripped on csky for a pseudo that had been allocated
> to the eliminated frame pointer. (csky doesn't have a separate
> hard frame pointer.)
>
> lra-lives uses:
>
> /* Set of hard regs (except eliminable ones) currently live. */
> static HARD_REG_SET hard_regs_live;
>
> to track the set of live directly-referenced hard registers, and it
> correctly implements the exclusion when setting up the initial set:
>
> hard_regs_live &= ~eliminable_regset;
>
> But later calls to make_hard_regno_live and make_hard_regno_dead
> would process eliminable registers like other registers, recording
> conflicts for them and potentially making them live. (Note that
> after r266086, make_hard_regno_dead adds conflicts for registers
> that are already marked dead.) I think this would have had the
> effect of pessimising targets without a separate hard frame pointer.
>
> Tested on aarch64-linux-gnu (where it probably doesn't do much)
> and against the testcase on csky-linux-gnu. OK to install?
>
> Richard
>
>
> 2019-10-01 Richard Sandiford <richard.sandif...@arm.com>
>
> gcc/
> PR middle-end/91957
> * lra-lives.c (make_hard_regno_dead): Don't record conflicts for
> eliminable registers.
> (make_hard_regno_live): Likewise, and don't make them live.
OK
jeff