2013-04-10 39 views
0

我一直在使用clang很久,我可以使用clang -fno-builtin -emit-llvm -c hello.c來防止生成llvm內置函數,如llvm.memsetDragonEgg支持clang中的-fno-builtin參數嗎?

最近,我用DragonEgg切換到gcc,因爲要編譯的程序最初設計爲使用gcc編譯。我在網上搜索,但沒有找到關於如何設置DragonEgg參數的任何信息。

任何人都可以請給我一些幫助嗎?任何提示或參考將受到歡迎。謝謝!

回答

0

我已經想出了一種使用gcc + DragonEgg來自己實現類似效果的方法。

gcc -S -c -O0 -fplugin=$(DRAGONEGG_SO) -fplugin-arg-dragonegg-emit-ir hello.c -o hello.bc 
opt -O3 -disable-simplify-libcalls hello.bc -o hello.bc 

$(DRAGONEGG_SO)是通向dragonegg.so

基本上,LLVM內在函數由優化傳遞instcombine添加。通過-disable-simplify-libcalls,可以防止在instcombine中生成LLVM內部函數。

該方法也應該用於llvm-gcc以生成LLVM IR,而不使用LLVM內在函數。