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



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

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

我看到的地方是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时,您可以看到这些错误消息

希望对你有帮助

相关内容

  • 没有找到相关文章

最新更新