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

Reply via email to