How to disable register allocate optimization?

Hi everyone,

I am trying to expand one instruction into multiple instructions on MIPS.
For example, I try to expand:
  sh src, imm(dst)
(1) sb src, imm(dst)
(2) srl reg0, src, 8
(3) sb reg0, (imm+1)(dst)
Here, reg0 are created with createVirtualRegister.

However, instr(2) will not be emitted because reg0 is useless before reg0 is defined in instr(3), it is wrong!
So how to prevent the expansion from being optimized?
Is there any method to disable register allocate optimization?

Thanks in advance.


It looks like you are not using the right overloaded version of function BuildMI defined in MachineInstrBuilder.h.

The register operand added to instruction sb should be a use, not a def operand. So this function should be called,

BuildMI(BB, dl, TII->get(Mips::SB)).addReg(tmpReg1)

instead of

BuildMI(BB, dl, TII->get(Mips::SB), tmpReg1)

Thank you very much for your help!

It really works.

I used to think the two version of the function BuildMI is the same, so I made the mistake.
I think I understand now:
BuildMI with a register is to build an instruction with the register provided as a destination,
and another version without register is to build an instruction without destination.