[LLVMdev] clobbering other physical registers in storeRegtoStackSlot.
evan.cheng at apple.com
Thu Oct 30 08:46:09 PDT 2008
On Oct 28, 2008, at 3:57 AM, sanjiv gupta wrote:
> 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
>> 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
Without having access to your backend nor an example, I can't really
provide an intelligent solution. It does sound like you have to extend
these target hooks and their clients.
>> A better solution would be to teach these routines to make use of the
>> register scavenger (or rather the callers should use the scavenger
>> pass the handle to these routines) to find a scratch register. It
>> require some changes to the target independent portion of codegen
>>> LLVM Developers mailing list
>>> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
>> LLVM Developers mailing list
>> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
More information about the llvm-dev