2014-09-10 53 views
9

我有一個ModulePass與opt工具一起工作,但我無法弄清楚如何在命令行中使其可用。我使用我的通行證當前的工作流程是:在clang命令行上提供LLVM ModulePass

  1. 鐺-c -emit-LLVM [C源代碼文件]
  2. LLVM鏈接[LLVM位碼文件]
  3. 選擇-load [PassName。所以 - [傳遞名稱] [鏈接LLVM文件]
  4. LLC [導致位碼文件]
  5. GCC [編譯得到的彙編文件] -o [目標]

我想獲得我的通行證與整合鐺命令以便它可以作爲現有軟件構建的一部分被調用(例如, C++標準庫),而不必爲我編譯的每個東西重新構建整個構建系統。我已經看到了如何做到這一點的提示,但我無法將這些部分放在一起工作。

Run an LLVM Pass Automatically with Clang正確地描述了我想要的內容,但該方法在LLVM 3.4中似乎已被棄用(PassManagerBuilder已移至舊的名稱空間)。

LLVM - Run Own Pass automatically with clang似乎解決了基本問題,但我希望我可以做到這一點,而不必修改clang(這似乎是什麼建議那裏)。

什麼是使用LLVM 3.4從clang製作新傳遞的最佳方式?

回答

7

Clang仍然使用PassManagerBuilder從3.5開始(參見BackendUtil.cpp中的PassManagerBuilderWrapper類)。所以我相信用RegisterStandardPasses來擴展它,就像在我的博客文章中一樣,它仍然是向Clang的通關經理添加通行證的唯一方法。

很難找到任何關於的信息如何棄用「舊」通行證管理器基礎結構。但由於Clang仍在使用它,因此不建議使用。 :)

+0

感謝您的答案,我會繼續PassManagerBuilder設置。 – Erik 2014-11-30 13:32:05

+0

它適用於llvm-3.7。註冊ModulePass的註釋:將EP_EarlyAsPossible改爲EP_ModuleOptimizerElely否則llvm會將其視爲FunctionPass並嘗試調用runOnFunction。 – xywang 2015-12-16 03:15:06