2017-01-31 73 views
0
for (BasicBlock::iterator i = bb->begin(), e = bb->end(); i != e; ++i) { 
    i.print(errs()); ??? 

我正在寫一個LLVM PASS我想獲得基本塊內的指令列表,但是如何在控制檯上打印它們以便我可以看到它們?上面的代碼顯示了我嘗試過的代碼,它遍歷了基本塊中的每條指令,但是我得到了打印函數的下面的錯誤。如何在LLVM中打印出指令?

error: ‘llvm::BasicBlock::iterator’ has no member named ‘print’ i.print(errs());

是否有更好的方法來打印出指令?

+0

在發佈有關構建錯誤的問題時,請包括您獲得的實際錯誤。 –

+0

好的感謝您的反饋,我添加了錯誤消息我得到 – JavaLearner

+0

您似乎忘記迭代器模擬指針,因此您需要使用其中一個解除引用運算符來訪問迭代器中的「值」。像例如'I->打印(...)'。 –

回答

1

問題是您正在嘗試打印迭代器而不是指令。您可以嘗試以下方法之一。您可以通過印刷的基本塊或打印每個打印指令在基本塊中的指令:

BasicBlock* bb = ...; // 
errs() << *bb; 
for (BasicBlock::iterator i = bb->begin(), e = bb->end(); i != e; ++i) { 
    Instruction* ii = &*i; 
    errs() << *ii << "\n"; 

兩個打印會輸出相同的結果。