2014-11-01 145 views
0

在一個函數的迭代循環時,我把下面的代碼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

任何人都可以請解釋這裏發生了什麼。

+0

你並沒有刪除任何東西;請提供一個最小完整的IR代碼示例,只要輸入文件導致問題 – 2014-11-03 13:27:53

+0

@Eli Bendersky我編輯了我的問題,所以請告訴我我錯過了什麼。謝謝 – techcomp 2014-11-04 05:43:10

回答

1

通常,當某些東西沒有完全附加到模塊時,我會得到這些東西。創建的指令不在塊中,或者塊不在功能中,或者功能不在模塊中。基本上,刪除時無法訪問。

+0

其實我想插入一條指令到我的LLVM IR .ll文件,所以我正在尋找一種方法來插入。二進制運算符使用值2和3,但在完成插入後,值2和3被刪除,但它們的使用仍保留在二進制運算中。除了Load和Store之外,還有什麼方法可以插入這些值(糾正我,如果我誤解了某些東西) – techcomp 2014-11-02 06:11:50