在一个函数的迭代循环时,我把下面的代码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.ll的那input.bc文件
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}
与命令选择-load ../Release+Asserts/lib/Testing.so -insert (插入是我通名) 我得到: - 同时删除123-132 使用仍然坚持Def后被摧毁:%addresult = add i32 2,3
任何人都可以请解释这里发生了什么。
你并没有删除任何东西;请提供一个最小完整的IR代码示例,只要输入文件导致问题 – 2014-11-03 13:27:53
@Eli Bendersky我编辑了我的问题,所以请告诉我我错过了什么。谢谢 – techcomp 2014-11-04 05:43:10