gcc -funswitch-loops 和 -O3
gcc -funswitch-loops and -O3
我对 GCC 的循环取消切换优化选项 -funswitch-loops
很感兴趣,尤其是它实际启用的功能。根据 documentation:
The following options control optimizations that may improve performance, but are not enabled by any -O
options. This section includes experimental options that may produce broken code.
...
-funswitch-loops
Move branches with loop invariant conditions out of the loop, with duplicates of the loop on both branches (modified according to result of the condition).
Enabled by -fprofile-use
and -fauto-profile
.
所以如果我还没有使用 -fprofile-use
或 -fauto-profile
,似乎我必须明确地将 -funswitch-loops
添加到我的编译器标志列表中才能激活循环取消切换.很公平。虽然在同一个 documentation 的其他地方,我们发现
-O3
Optimize yet more. -O3
turns on all optimizations specified by -O2
and also turns on the following optimization flags:
...
-funswitch-loops
...
所以文档似乎声称 -funswitch-loops
是由 -O3
打开的,而且 而不是 是由 [=35= 打开的-O
个选项中的任何 。是哪一个?
您可以使用 -v -Q
进行编译以查看所有有效优化选项的列表。在 gcc 10.2 上使用 -v -Q -O3
,我看到包含 -funswitch-loops
。
所以它在“未被任何 -O
选项启用”下的列表显然是一个错误。您可以将其报告为文档错误。
我对 GCC 的循环取消切换优化选项 -funswitch-loops
很感兴趣,尤其是它实际启用的功能。根据 documentation:
The following options control optimizations that may improve performance, but are not enabled by any
-O
options. This section includes experimental options that may produce broken code....
-funswitch-loops
Move branches with loop invariant conditions out of the loop, with duplicates of the loop on both branches (modified according to result of the condition).
Enabled by
-fprofile-use
and-fauto-profile
.
所以如果我还没有使用 -fprofile-use
或 -fauto-profile
,似乎我必须明确地将 -funswitch-loops
添加到我的编译器标志列表中才能激活循环取消切换.很公平。虽然在同一个 documentation 的其他地方,我们发现
-O3
Optimize yet more.
-O3
turns on all optimizations specified by-O2
and also turns on the following optimization flags:...
-funswitch-loops
...
所以文档似乎声称 -funswitch-loops
是由 -O3
打开的,而且 而不是 是由 [=35= 打开的-O
个选项中的任何 。是哪一个?
您可以使用 -v -Q
进行编译以查看所有有效优化选项的列表。在 gcc 10.2 上使用 -v -Q -O3
,我看到包含 -funswitch-loops
。
所以它在“未被任何 -O
选项启用”下的列表显然是一个错误。您可以将其报告为文档错误。