2013-05-21 111 views
1

我想編寫一個LLVM插件來告訴我:對於每個函數聲明,該函數將具有多少個通用寄存器,XMM寄存器和堆棧參數。這隻需要適用於x86 SYSV調用約定。目前這可能嗎?如果是這樣,任何方向將不勝感激。LLVM:獲取函數參數位置(ABI)

回答

0

這是可能的,但稍微有些棘手,當你嘗試操縱IR時,LLVM似乎比用特定機器代碼搞亂更友好。對於其中一種,添加通行證沒有簡單的方法。 另請注意,最終使用的寄存器數量取決於虛擬寄存器如何最終分配到真正的x86邏輯寄存器(在某些情況下可能會出現溢出)以及其他變量的消除。因此,您不僅可以避免在值爲SSA形式的IR上工作,而且您實際上需要在CodeGen的最後階段開展工作。爲了讓事情更有趣,它還取決於您使用的優化級別。 檢出 - llvm/lib/CodeGen/Passes.cpp,看看addOptimizedRegAlloc或addFastRegAlloc,檢查傳入的內部調用並使用最後的(在CodeGen中的單獨文件中實現),搭便車。內部循環應該非常簡單,但您需要根據TargetRegisterInfo中枚舉的X86目標代碼運行簿記。