LLVM IR指令插入

时间:2014-11-01 12:06:17

标签: llvm llvm-ir

在我输入以下代码时,在函数迭代器循环中

 for(BasicBlock::iterator BI = BB->begin(), BE = BB->end(); BI != BE; ++BI)          
        {
             if(isa<StoreInst>(&(*BI)) )
                {
                   if(i==0)
                   {
                    Value *Two = ConstantInt::get(Type::getInt32Ty(Context), 2);
                     Value *Three = ConstantInt::get(Type::getInt32Ty(Context), 3);
                      Instruction *Add = BinaryOperator::Create(Instruction::Add, Two, Three,"addresult",(Instruction*)BI);
                        i=1;
                    }
                    }
                    }

然后我收到错误(在以下input.bc文件上应用此传递时 它是input.bc文件的input.ll

 define void @_Z3minv() #0 {
entry:
%k = alloca i32, align 4
  %i = alloca i32, align 4
 %j = alloca i32, align 4
 store i32 10, i32* %i, align 4
 store i32 5, i32* %j, align 4
 %0 = load i32* %i, align 4
 %1 = load i32* %j, align 4
 %add = add nsw i32 %0, %1
 store i32 %add, i32* %k, align 4
 ret void}

使用命令opt -load ../Release+Asserts/lib/Testing.so -insert (插入是我的通行证名称) 我正进入(状态:- 删除i32时 在销毁Def后仍然使用:%addresult = add i32 2,3

任何人都可以解释这里发生的事情。

1 个答案:

答案 0 :(得分:1)

通常我会在某些东西没有完全附加到模块时获得这些。创建的指令不在块中,或者块不在函数中,或者函数不在模块中。基本上删除时无法访问。