clobbering other physical registers in storeRegtoStackSlot.

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?

TIA,
Sanjiv

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. 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

> 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.

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.

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.

Evan