[LLVMdev] clobbering other physical registers in storeRegtoStackSlot.
sanjiv gupta
sanjiv.gupta at microchip.com
Tue Oct 28 03:57:08 PDT 2008
On Thu, 2008-10-23 at 11:17 -0700, Evan Cheng wrote:
>
> On Oct 22, 2008, at 11:09 AM, Sanjiv.Gupta at microchip.com wrote:
>
> > In our case, storeRegToStackSlot, loadRegFromStackSlot clobbers some
> > other physical register which may be holding a live value used
> > somewhere else. How do I make regalloc aware so that it saves the
> > value before storeRegToStackSlot and make it available again at the
> > point of earlier use?
> >
> >
>
>
> Typical solution is to either reserve a register for these purposes so
> the backend does not have to worry about its value being clobbered.
We have only one register (BSR) which we need to set correctly before
every load/store. Setting up this register is done via an operation
called 'banksel'.
The problem is that spill/reload gets in between a banksel and
load/store operation; and these spill/reload also modify BSR. Regalloc
fails to recognize this and does not ReMat 'banksel' again before the
load/store.
> A better solution would be to teach these routines to make use of the
> register scavenger (or rather the callers should use the scavenger and
> pass the handle to these routines) to find a scratch register. It will
> require some changes to the target independent portion of codegen
> though.
>
>
> Evan
> >
> >
> > TIA,
> > Sanjiv
> >
> >
> >
> > _______________________________________________
> > LLVM Developers mailing list
> > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
More information about the llvm-dev
mailing list