GCC 中的“-O2”是否启用了“-ftree-slp-vectorize”?

Is `-ftree-slp-vectorize` not enabled by `-O2` in GCC?

来自https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html

它说“-ftree-slp-vectorize:对树执行基本块矢量化。默认情况下,此标志在 -O2 和 -ftree-vectorize、-fprofile-use 和 -fauto-profile 中启用。”

不过,我似乎必须明确传递一个标志才能打开 SIMD。我在这里误解了什么吗?不过它在 -O3 启用。

https://www.godbolt.org/z/1ffzdqMoT

Is -ftree-slp-vectorize not enabled by -O2 in GCC?

是也不是。这取决于编译器的版本。

From https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html

您已链接到最新版本的文档。它适用于当前正在开发的版本,目前是版本 12。

However it seems I have to pass a flag explicitly to turn on SIMD.

https://www.godbolt.org/z/1ffzdqMoT

您的示例使用 GCC 版本 11。

Did I mis undertand something here?

您阅读了错误版本的文档,或使用了错误版本的编译器,因此您的假设不成立。