2014-04-17 100 views
6

我爲llvm寫了一些自己的通行證,以便在叮噹中使用它們。LLVM - 鏗鏘自動通行證

我將它們集成在llvm中(不是動態加載的)。他們甚至在現有的優化上市:節當我輸入:

opt --help-hidden 

我想現在會自動運行我的通行證自己的一個作爲最後一個當我打電話鐺:

clang ./hello.bc -o ./hello 

甚至與C代碼:

clang ./hello.c -o ./hello 

當我手動運行我的通行證與選擇,修改後的字節代碼生成並寫入到一個新的.BC文件:

opt -my-pass <./hello.bc> ./hello_optimized.bc 

當我編譯修改.BC與鐺,鐺正常優化再次運行,這毀了我的手動執行合格的優化:

clang -O0 -m32 ./hello_optimized.bc -o ./hello_optimized 

我的問題是:

  • 我如何鏗鏘所有的最後一關自動運行我自己寫的通?
  • 另一種可能的解決方案是完全禁用所有通行證,或至少刪除叮/ opt的死代碼/函數。我怎麼能這樣做?
+0

使用鐺-flto,並通過您的通行證金LTO插件的序列。 –

回答

1

做到這一點的正確方法是讓clang將你的通行證添加到它構建的通行證管理器中。請參閱clang/lib/CodeGen/BackendUtil.cpp:void EmitAssemblyHelper::CreatePasses()瞭解如何處理消毒劑。

0

您可以使用-Xclang直接與clang一起運行自己的傳球。

clang++ -Xclang -load -Xclang ./libmypass.so input.cpp 

Source