我想写一个LLVM插件告诉我:对于每个函数声明,函数将有多少个通用寄存器,XMM寄存器和堆栈参数。这只需要适用于x86 SYSV调用约定。这目前可能吗?如果是这样,任何方向都会受到最高的赞赏。
答案 0 :(得分:0)
这可能但有点棘手,当您尝试操纵IR时,LLVM似乎比使用机器特定代码时要友好得多。没有简单的方法来添加通行证。 另请注意,最终使用的寄存器数量取决于虚拟寄存器最终如何分配到实际x86逻辑寄存器中,在某些情况下可能会发生溢出,而在其他情况下可能会消除某些变量。因此,您不仅无法使用SSA形式的IR工作,您实际上需要在CodeGen的最后阶段工作。为了使事情更有趣,它还取决于您使用的优化级别。 退房 - LLVM / lib中/的CodeGen / Passes.cpp,看addOptimizedRegAlloc或addFastRegAlloc,检查出所传递的所谓的内部,并使用最后的(在不同的文件中实现中的CodeGen),以搭上一程。内部循环应该非常简单,但您需要根据TargetRegisterInfo中枚举的X86目标reg来运行簿记