[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