[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