我已经使用LLVM/Clang及其中间表示(IR(有一段时间了。我最近开始与GCC合作。我想将IR位代码转储到一个文件中,类似于LLVM中的(-flto-save temps标志(。
我可以在构建时使用"-fdump-tree cfg raw"标志获得gimple IR,但对于多个输入文件,这会为每个源生成一个".gimple"文件。
为了获得整个程序的视图,在LLVM中,我在LDFLAGS中使用了"-flto-Wl,-plugin-opt=save temps"。在GCC中获得相同行为的正确方法是什么。
我尝试使用"gcc-fdump-tree cfg raw-flto-save temps src1.c main.c",但没有得到组合的IR文件。输出包括每个源的.o、.s、.i文件和每个源的.cfg文件。
您看不到合并的文件,因为此过程不是由lto执行的。cc1执行的所有传递不一定由lto执行。解决方案可能是使用fdump-tree-all option
gcc -flto -fdump-tree-all -o exec x.c y.c
您将获得整个程序的所有gimple文件。每执行一次,您将获得exec.ltrans.xxxt.pass_name
。否则,如果您不想使用fdump树,那么您必须确保要转储的传递将由lto执行。