【问题标题】:LLVM How to detect when a specific ASM instruction sequence is generatedLLVM 如何检测何时生成特定的 ASM 指令序列
【发布时间】:2015-06-15 10:22:12
【问题描述】:

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

【问题讨论】:

    标签: compiler-construction llvm code-generation


    【解决方案1】:

    以防其他人偶然发现类似问题。

    我看的地方是 LLVM 的后端代码。我特别关注 X86 程序集的生成。

    有两个主要区域可以修改和添加您的测试。

    1. ASMPrinter lib/CodeGen/ASMPrinter/ASMPrinter.cpp 的类,它有不同的发射函数来处理函数、基本块等。通过它们。这些函数遍历每个机器指令MI,它具有getOperand()getOpCode() 等功能,以根据要求检查特定指令。

    每个特定的操作码和实际指令都在目标特定文件中指定,例如lib/Target/X86/X86GenInstrInfo.inc

    1. 上述函数依次调用目标特定的子类函数。就我而言,它们是 X86AsmPrinter 和类似的类。

    添加日志语句,如

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

    运行llc file.bc时可以看到这些错误信息

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2019-06-21
      • 1970-01-01
      • 2017-07-28
      • 1970-01-01
      • 2012-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多