> 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

Reply via email to