[LLVMdev] Instruction does not dominate all uses! <badref> ??
Nick Lewycky
nicholas at mxc.ca
Fri Nov 2 04:16:29 PDT 2012
edA-qa mort-ora-y wrote:
> I'm having trouble figuring out what the error "Instruction does not
> dominate all uses!" means. I'm trying to construct a call to a function
> with two parameters. The printed IR, with error, looks like this:
>
> define i32 @add(i32, i32) {
> EntryBlock:
> %2 = add i32 %0, %1
> ret i32 %2
> }
>
> define i32 @eval_expr() {
> EntryBlock:
> ret i32<badref>
> }
>
> Instruction does not dominate all uses!
> <badref> = call i32 @add(i32 2, i32 3)
> ret i32<badref>
It's correct but not entirely helpful. You've got an instruction in
function @eval_expr whose operand is an instruction in an entirely
different function (or in no function at all).
> And the approximate/simplified code I'm using to generate the call,
> which would appear at<badref> is:
>
> llvm::Value * func = module->getFunction( "add" );
>
> std::vector<llvm::Value*> args;
> args.push_back( llvm::ConstantInt::get( llvm::Type::getInt32Ty(
> *context ), 2 ) );
> args.push_back( llvm::ConstantInt::get( llvm::Type::getInt32Ty(
> *context ), 3 ) );
>
> llvm::ArrayRef<llvm::Value*> ar_args( args );
> return llvm::CallInst::Create( func, ar_args );
This creates a CallInst but doesn't insert it into any basic block.
Nick
More information about the llvm-dev
mailing list