0

我已经使用 LLVM/Clang 及其中间表示(IR)有一段时间了。我最近开始使用 GCC。我想将 IR 位码转储到一个文件中,类似于 LLVM 中的 (-flto -save-temps flag)。

我可以在构建时使用“-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 文件。

4

1 回答 1

0

您看不到合并的文件,因为此 pass 不是由 lto 执行的。cc1 执行的所有 pass 不一定由 lto 执行。一个解决方案可能是使用fdump-tree-all option

gcc -flto -fdump-tree-all -o exec x.c y.c

您将获得整个程序的所有 gimple 文件。对于执行的每个传递,您将获得exec.ltrans.xxxt.pass_name. 否则,如果您不想使用 fdump-tree-all,则必须确保要转储的 pass 将由 lto 执行。

于 2020-11-03T18:02:05.503 回答