Assertion failed after my storeRegToStackSlot/loadFromStackSlot

Hi All.

I'm writing storeRegToStackSlot and loadFromStackSlot function for my Target. This Target can store/load one byte (not all word) from FrameIndex. If I need to store 16 bit register I will must to split it to two instruction like this:

BuildMI(MBB, MI, dl, get(Z80::LD8xmr))
   .addFrameIndex(FrameIndex).addImm(0)
   .addReg(SrcReg, 0, Z80::subreg_lo);
BuildMI(MBB, MI, dl, get(Z80::LD8xmr))
   .addFrameIndex(FrameIndex).addImm(1)
   .addReg(SrcReg, getKillRegState(isKill), Z80::subreg_hi);

After this store I catch assertion failed: "Instruction not found in maps", because only last of this instruction added in Instruction maps.
How can I avoid assertion failed in this case?

Best regards, Dmitriy.

Hi Dmitriy,

As you’ve seen our current spill code assumes that spill/reloads are single instructions. I think the best way to work around this is to introduce load/store pseudo-instructions and expand these after register allocation.

Cheers,
Lang.

Hi Lang.

Thank you. I added pseudo-instructions for spill/reloads and expanded it in expandPostRAPseudo.

Regards,
Dmitriy.

04.03.2013 8:24, Lang Hames wrote:

Hi Dmitriy

How you have added the pseudo patterns.
please show me the construct

thanks
Sudh K