【问题标题】:LLVM IR instruction insertionLLVM IR 指令插入
【发布时间】:2014-12-28 15:03:57
【问题描述】:

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

 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

谁能解释一下这里发生了什么。

【问题讨论】:

  • 这里没有删除任何内容;请提供一个最小的完整 IR 代码示例,只要提供导致问题的输入文件
  • @Eli Bendersky 我已经编辑了我的问题,所以请告诉我我缺少什么。谢谢

标签: llvm llvm-ir


【解决方案1】:

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

【讨论】:

  • 实际上我想在我的 LLVM IR .ll 文件中插入一条指令,所以我正在寻找一种插入方式。二元运算符正在使用值二和三,但在完成插入后,值二和三被删除,但它们的使用仍留在二元运算中。除了加载和存储之外,还有什么方法可以插入这些值。(如果我误解了什么,请纠正我)
猜你喜欢
  • 1970-01-01
  • 2018-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-31
  • 2021-08-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多