[LLVMdev] CodeGen fails for CallInst with label
Edward Lee
eslee3 at uiuc.edu
Sat Apr 19 13:30:42 PDT 2008
On Sat, Apr 19, 2008 at 2:16 PM, Chris Lattner <sabre at nondot.org> wrote:
> No. The reason we don't allow this is because it violates the CFG.
So if I *don't* violate the CFG, would I still need to do something
close to "big and nasty"?
; save the address of %otherPath to use later
call @llvm.checkpoint(label %otherPath)
; trick the rest of the compiler to think data flows to both paths *from here*
br i1 @opaqueButAlwaysTrue, label %normalPath, label %otherPath
normalPath:
; do some work..
call void @work()
; rollback and erase any data changes since the checkpoint and
; continue at the label given to @checkpoint
call @llvm.rollback()
unreachable
otherPath:
; we arrive here because @rollback reverted data to @checkpoint
; and it said to go to label %otherPath
Right now I'm looking into making a new Inst that inherits BranchInst
because I can give it BasicBlock*/labels and potentially change the
CodeGen to emit a series of x86 instructions that does the
functionality while not being optimized away by the rest of the
compiler.
Ed
More information about the llvm-dev
mailing list