[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