Compiler construction LLVM如何检测何时生成特定的ASM指令序列
我正在使用llvm编译我的C程序。我想知道是否生成了一个特定的汇编序列,如果生成了,它与哪个源代码行相关联。例如,我想在每次生成Compiler construction LLVM如何检测何时生成特定的ASM指令序列,compiler-construction,llvm,code-generation,Compiler Construction,Llvm,Code Generation,我正在使用llvm编译我的C程序。我想知道是否生成了一个特定的汇编序列,如果生成了,它与哪个源代码行相关联。例如,我想在每次生成push%eax指令时记录。有没有办法解决这个问题?以防其他人遇到类似的问题 我看的地方是LLVMs后端代码。我特别关注X86程序集的生成 有两个主要区域需要修改和添加测试 asmpriner在lib/CodeGen/asmpriner/asmpriner.cpp中的类,该类具有不同的发射函数来处理函数、基本块等。请遍历它们。这些函数遍历每个机器指令MI,这些机器指令具
push%eax
指令时记录。有没有办法解决这个问题?以防其他人遇到类似的问题
我看的地方是LLVMs后端代码。我特别关注X86程序集的生成
有两个主要区域需要修改和添加测试
asmpriner
在lib/CodeGen/asmpriner/asmpriner.cpp中的类,该类具有不同的发射函数来处理函数、基本块等。请遍历它们。这些函数遍历每个机器指令MI
,这些机器指令具有getOperand()
和getOpCode()
等函数,以根据需要检查特定指令李>
每个特定的操作码和实际指令都在特定于目标的文件中指定,例如lib/target/X86/X86GenInstrInfo.inc
上述函数依次调用特定于目标的子类函数。在我的例子中,它们是X86AsmPrinter和类似的类李>
若要四处查看,请添加日志文件,例如
errs()<<"Opcode is "<<MI.getOpcode()<<"\n";
MI.dump();
errs()