我使用clang已经有一段时间了,我可以使用clang -fno-builtin -emit-llvm -c hello.c
来阻止生成llvm内置函数,例如llvm.memset
。
最近,我使用DragonEgg切换到gcc,因为要构建的程序最初设计为使用gcc编译。我在网上搜索过,但没有找到任何关于如何设置DragonEgg参数的信息。
有人可以给我一些帮助吗?任何提示或参考都将受到欢迎。谢谢!
答案 0 :(得分: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内在函数的LLVM IR。