This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [x86] Cache result of expensive_function_p between frame layouts

> 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  <>
> 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.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]