I am looking into this failure. Thanks, Surya
On 09/08/24 2:37 am, Andrew Pinski 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. > > Thanks, > Andrew > >> >> Thanks, >> jeff