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

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,这些机器指令具

我正在使用llvm编译我的C程序。我想知道是否生成了一个特定的汇编序列,如果生成了,它与哪个源代码行相关联。例如,我想在每次生成
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()