> ix86_compute_frame_layout sets use_fast_prologue_epilogue if
> the function isn't more expensive than a certain threshold,
> where the threshold depends on the number of saved registers.
> However, the RA is allowed to insert and delete instructions
> as it goes along, which can change whether this threshold is
> crossed or not.
>
> I hit this with an RA change I'm working on. Rematerialisation
> was able to remove an instruction and avoid a spill, which happened
> to bring the size of the function below the threshold. But since
> nothing legitimately frame-related had changed, there was no need for
> the RA to lay out the frame again. We then failed the final sanity
> check in lra_eliminate.
>
> Tested on x86_64-linux-gnu. OK to install?
>
> Richard
>
>
> 2019-09-30 Richard Sandiford <richard.sandif...@arm.com>
>
> gcc/
> * config/i386/i386.h (ix86_frame::expensive_p): New field.
> (ix86_frame::expensive_count): Likewise.
> * config/i386/i386.c (ix86_compute_frame_layout): Make the choice
> of use_fast_prologue_epilogue robust against incidental changes
> in function size.
OK,
Honza