0

用clang已经有一段时间了,可以clang -fno-builtin -emit-llvm -c hello.c用来防止llvm内置函数的生成,比如llvm.memset.

最近,我用 DragonEgg 切换到 gcc,因为要构建的程序最初设计为使用 gcc 编译。我在网上搜索,但没有找到有关如何设置 DragonEgg 参数的任何信息。

谁能给我一些帮助?欢迎任何提示或参考。谢谢!

4

1 回答 1

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 内在函数是由优化 pass 添加的instcombine。使用-disable-simplify-libcalls,可以防止 LLVM 内在函数在instcombine.

该方法还应该适用llvm-gcc于生成没有 LLVM 内在函数的 LLVM IR。

于 2013-04-10T22:11:34.200 回答