[LLVMdev] How to disable register allocate optimization?

Yang Yang geraint0923 at gmail.com
Mon Jul 23 22:05:46 PDT 2012


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.

Thanks,
Yang

On Jul 24, 2012, at 3:36 AM, Akira Hatanaka wrote:

> 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)
> 
> 
> 
> On Sat, Jul 21, 2012 at 11:41 AM, Yang Yang <geraint0923 at gmail.com> wrote:
> Hi everyone,
> 
> I am trying to expand one instruction into multiple instructions on MIPS.
> For example, I try to expand:
>         sh      src, imm(dst)
> into:
> (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.
> 
> Yang
> 
> 
> 
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20120724/8743e080/attachment.html>


More information about the llvm-dev mailing list