【发布时间】:2019-06-20 09:39:43
【问题描述】:
我正在尝试查看 GCC 是否应用了部分死代码消除优化。
部分死代码消除可以被认为是两个选择通过的结果:assignment sinking + 死代码消除。例如
x = 3;
y = p + q; y = p + q; y = p + q;
if(cond) then if(cond) then if(cond) then
x = 5; assn sinking x = 3; dead code eln x = 5;
p = p*q; -----------> x = 5; -------------> p = p*q;
else p = p*q; else
q = p*q; else x = 3;
end if; x = 3; q = p*q;
out(x); q = p*q; end if;
end if; out(x)
out(x)
我尝试了以下方法。
备注:我所有的观察都是基于 Gimple 级别的转储文件,而不是 RTL 级别。
我电脑上的 GCC 版本:gcc (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0.
我尝试使用以下命令编译我的代码:
gcc -O3 -fdump-tree-all pde.c
我收到以下dump files。根据 GCC 7.4.0 文档,有一个名为 pde.c.134t.sink 的地方预计会看到前向存储动作。但我无法在任何 gimple 级转储文件中找到任何类型的代码运动。我不确定它是否在 RTL 级别进行代码运动?我已经尝试了很多基准测试,但我从未在 Gimple 级别看到分配下沉/部分死代码消除。
问题1: GCC 是否应用assignment sinking / 部分死代码消除?
问题2:如果是,那么我在哪里可以看到这个?
【问题讨论】:
标签: c gcc compiler-optimization dead-code