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 选项启用”下的列表显然是一个错误。您可以将其报告为文档错误。