[LLVMdev] ICmpInst example?
ret val
retval386 at gmail.com
Tue Sep 27 19:28:59 PDT 2011
I'm trying to come up with a simple example of using ICmpInst in a
Pass. On each of the branches(true, false) I'd like to call a separate
function and then resume(to the code that was already there).
In this example i is a inst_iterator to Instruction the Pass is
currently on. Now it segfaults opt before I can even get a dump() on
it. Does anyone see what I am doing wrong?
BasicBlock *bb = i->getParent();
Instruction *j = bb->end();
BasicBlock *bb_after = i->getParent()->splitBasicBlock(&*i);
bb->getTerminator()->eraseFromParent();
ICmpInst *test = new ICmpInst(j, CmpInst::ICMP_EQ, shadow, val,
"Shadow check");
BasicBlock *trueBlock = BasicBlock::Create(M.getContext(), "Shadow
Check Block: TRUE", &F);
CallInst::Create(qv_true, "", trueBlock);
BranchInst::Create(bb_after, trueBlock);
BasicBlock *falseBlock = BasicBlock::Create(M.getContext(), "Shadow
Check Block: FALSE", &F);
CallInst::Create(qv_false, "", falseBlock);
BranchInst::Create(bb_after, falseBlock);
BranchInst::Create(trueBlock, falseBlock, test, j);
More information about the llvm-dev
mailing list