2013-05-27 43 views
-1

我讀了這個頁面,http://llvm.org/docs/WritingAnLLVMPass.html如何使一通,可以讀取LLVM IR和解析它

,我可以完全做到Hello.so的例子。

現在我只想製作一個.so文件,可以通過opt調用並讀取我的IR文件名作爲輸入參數。而我提交後,它會輸出文件的名稱。

我曾嘗試過多種方法,但我仍然不知道該怎麼辦呢....

我希望我能做到這樣。

選擇-load ../Debug+Asserts/lib/xxxx.so -flag < llvm.ll>的/ dev/null的

當我按下回車鍵,將輸出文件的名稱 - >「llvm.ll」

誰能幫我寫這個簡單的程序,我要優化LLVM IR作爲我學期的項目,現在我堅持在這裏...幫我,謝謝〜


你能告訴我詳細的代碼嗎? t爲我工作

​​
+0

優化比LLVM更進一步嗎?這很難... – 2013-05-27 14:26:01

+0

我要優化分支分歧問題(仍然有一些我們可以做的,也許大聲笑 –

回答

2

你的問題可以真正簡化爲「我怎樣才能從LLVM傳遞中訪問當前.ll文件的名稱」。您不需要「解析LLVM IR」或類似的東西 - 當LLVM傳遞正在運行時,它已經超過了解析階段。

在任何情況下,我都不知道從LLVM模塊獲取文件名的確實方法,但是在準備.ll文件時可以編碼該信息。例如,通過; ModuleID = 'llvm.ll'將模塊ID設置爲文件名,然後通過writing a module pass檢索它並調用getModuleIdentifier來獲取字符串。然後你可以打印出來,例如

bool runOnModule(Module& M) { 
    dbgs() << M.getModuleIdentifier() << "\n"; 
    return false; 
} 

或者,使用metadata

+0

我得到從這個代碼 –

+0

我有另一個問題,有functionPass和ModulePass,這兩個supprot 「ll」類型的llvm IR,或只支持「bc」類型 –

+0

@IanTsai是否將模塊標識設置爲某個字符串,然後仍然獲得「」? – Oak