LLVM如何检测何时生成特定的ASM指令序列

时间:2015-04-09 20:59:37

标签: compiler-construction llvm code-generation

我正在使用llvm编译我的C程序。我想知道是否生成了特定的汇编序列,如果生成了它,它与哪个源代码行相关联。例如,我想在每次生成push %eax指令时记录。有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:0)

如果其他人偶然发现类似的问题。

我看过的地方是LLVMs后端代码。特别是我关心的是X86组件生成。

修改和添加测试有两个主要方面。

  1. ASMPrinterlib/CodeGen/ASMPrinter/ASMPrinter.cpp,它具有不同的发射函数来处理函数,基本块等。通过它们。这些函数遍历每个机器指令MI,其中包含getOperand()getOpCode()等函数,可根据需要检查特定指令。
  2. 每个特定操作码和实际指令都在目标特定文件中指定,例如lib/Target/X86/X86GenInstrInfo.inc

    1. 上述函数依次调用目标特定的子类函数。在我的例子中,他们是X86AsmPrinter和类似的类。
    2. 要添加日志声明,例如

      errs()<<"Opcode is "<<MI.getOpcode()<<"\n";
      MI.dump();
      

      ,您可以在运行llc file.bc

      时看到这些错误消息

      希望有所帮助