【发布时间】:2015-06-15 10:22:12
【问题描述】:
我正在使用 llvm 编译我的 C 程序。我想知道是否生成了特定的汇编序列,如果生成,它与哪个源代码行相关联。例如,我想在每次生成 push %eax 指令时记录。有没有办法解决这个问题?
【问题讨论】:
标签: compiler-construction llvm code-generation
我正在使用 llvm 编译我的 C 程序。我想知道是否生成了特定的汇编序列,如果生成,它与哪个源代码行相关联。例如,我想在每次生成 push %eax 指令时记录。有没有办法解决这个问题?
【问题讨论】:
标签: compiler-construction llvm code-generation
以防其他人偶然发现类似问题。
我看的地方是 LLVM 的后端代码。我特别关注 X86 程序集的生成。
有两个主要区域可以修改和添加您的测试。
ASMPrinter lib/CodeGen/ASMPrinter/ASMPrinter.cpp 的类,它有不同的发射函数来处理函数、基本块等。通过它们。这些函数遍历每个机器指令MI,它具有getOperand() 和getOpCode() 等功能,以根据要求检查特定指令。 每个特定的操作码和实际指令都在目标特定文件中指定,例如lib/Target/X86/X86GenInstrInfo.inc
添加日志语句,如
errs()<<"Opcode is "<<MI.getOpcode()<<"\n";
MI.dump();
运行llc file.bc时可以看到这些错误信息
希望对你有帮助
【讨论】: