如何打印出 LLVM 中的指令?

How do I print out an Instruction in LLVM?

for (BasicBlock::iterator i = bb->begin(), e = bb->end(); i != e; ++i) {
    i.print(errs()); ???

我正在编写一个 LLVM PASS 并且我想获取基本块中的指令列表,但是如何在控制台上打印它们以便我可以看到它们?上面的代码显示了我尝试过的代码,它遍历了基本块中的每条指令,但是我得到了以下打印函数的错误。

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

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

问题是您正在尝试打印迭代器而不是指令。您可以尝试以下方法之一。您可以通过打印基本块或打印每个指令来打印基本块中的指令:

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

两次打印将输出相同的结果。