On Thu, Aug 8, 2024 at 2:07 PM Andrew Pinski <pins...@gmail.com> wrote: > > On Fri, Aug 2, 2024 at 7:30 AM Jeff Law <jeffreya...@gmail.com> wrote: > > > > > > > > On 8/1/24 4:12 AM, Surya Kumari Jangala wrote: > > > lra: emit caller-save register spills before call insn [PR116028] > > > > > > LRA emits insns to save caller-save registers in the > > > inheritance/splitting pass. In this pass, LRA builds EBBs (Extended > > > Basic Block) and traverses the insns in the EBBs in reverse order from > > > the last insn to the first insn. When LRA sees a write to a pseudo (that > > > has been assigned a caller-save register), and there is a read following > > > the write, with an intervening call insn between the write and read, > > > then LRA generates a spill immediately after the write and a restore > > > immediately before the read. The spill is needed because the call insn > > > will clobber the caller-save register. > > > > > > If there is a write insn and a call insn in two separate BBs but > > > belonging to the same EBB, the spill insn gets generated in the BB > > > containing the write insn. If the write insn is in the entry BB, then > > > the spill insn that is generated in the entry BB prevents shrink wrap > > > from happening. This is because the spill insn references the stack > > > pointer and hence the prolog gets generated in the entry BB itself. > > > > > > This patch ensures that the spill insn is generated before the call insn > > > instead of after the write. This is also more efficient as the spill now > > > occurs only in the path containing the call. > > > > > > 2024-08-01 Surya Kumari Jangala <jskum...@linux.ibm.com> > > > > > > gcc/ > > > PR rtl-optimization/PR116028 > > > * lra-constraints.cc (split_reg): Spill register before call > > > insn. > > > (latest_call_insn): New variable. > > > (inherit_in_ebb): Track the latest call insn. > > > > > > gcc/testsuite/ > > > PR rtl-optimization/PR116028 > > > * gcc.dg/ira-shrinkwrap-prep-1.c: Remove xfail for powerpc. > > > * gcc.dg/pr10474.c: Remove xfail for powerpc. > > Implementation looks fine. I would suggest a comment indicating why > > we're inserting before last_call_insn. Otherwise someone in the future > > would have to find the patch submission to know why we're handling that > > case specially. > > > > OK with that additional comment. > > This causes bootstrap failure on aarch64-linux-gnu; self-tests fail at > stage 2. Looks to be wrong code is produced compiling stage 2 > compiler. > I have not looked further than that right now.
I decided to re-apply the patch to the trunk locally and see if I could debug what was going wrong. The good news is the bootstrap failure is gone. The bad news is I don't know why though. I am going to see if I can bisect where the failure mode I was getting disappears. That should help decide if the bug has got latent or really fixed. Thanks, Andrew Pinski > > Thanks, > Andrew > > > > > Thanks, > > jeff