[LLVMdev] BranchInst problem
Vladimir Prus
ghost at cs.msu.su
Wed Jun 9 00:46:01 PDT 2004
Chris Lattner wrote:
> On Tue, 8 Jun 2004, Vladimir Prus wrote:
> > While adding support for branch instructions in my backend, I run into a
> > trouble. The code to handle branches looks like:
> > The machine code after instruction selection is:
> >
> > entry (0x8681458):
> > %reg1024 = load <fi#-1>
> > %reg1025 = load <fi#-2>
> > setcc %reg1024, %reg1025
> > goto %disp(label then)
> > goto %disp(label else)
>
> I assume that the two unconditional gotos are just test code, right? If
> not, the second one is dead.
Yes, in the final form there will be "iflt" instruction before the first goto,
making it conditional.
> > The code after "goto" is disturbing. It looks like spill code, but it's
> > not going to be ever executed. Any ideas why it's generated? Is there any
> > additional information I should provide?
>
> Yup, just add the "isTerminator" bit on your gotos in your tablegen
> description for the instruction. This informs the code generator that any
> spill code has to go above the instructions.
Thanks, this works! I don't yet understand why spill code is needed there at
all, but I'll return to that when I have branches working correctly.
- Volodya
More information about the llvm-dev
mailing list