如何知道每个mcpu和march选项的clang和gcc启用了哪些优化?

Ruf*_*ufo 5 optimization gcc clang

Clang和GCC有两个开关,-mcpu并且-march可以为所选的CPU启用一些优化.即-march=i686内部启用-mmmx,-msse等等.

我想知道是否有一些命令可以显示什么开关被激活march,并mcpu为每个CPU.我更喜欢一个命令,但我也接受带有信息的代码位置的答案.

Ali*_*Ali 4

对于海湾合作委员会,尝试

\n\n

gcc -mcpu=native -Q --help=target

\n\n

它打印的第一行:

\n\n
\n

gcc:警告:\xe2\x80\x98-mcpu=\xe2\x80\x99 已弃用;使用 \xe2\x80\x98-mtune=\xe2\x80\x99 或 \xe2\x80\x98-march=\xe2\x80\x99\n 代替

\n
\n\n

其次是

\n\n
The following options are target specific:\n  -m128bit-long-double                  [disabled]\n  -m32                                  [disabled]\n  -m3dnow                               [disabled]\n  -m3dnowa                              [disabled]\n  -m64                                  [enabled]\n  -m80387                               [enabled]\n  -m8bit-idiv                           [disabled]\n   [...]\n
Run Code Online (Sandbox Code Playgroud)\n\n

这回答了 gcc 的部分。

\n\n
\n\n

不幸的是,我对 clang 不熟悉。到目前为止我能想到的最好的办法是:

\n\n

clang --target=i386 -### myfile.c

\n\n

其中-###使选项得以显示。手臂显示不同的东西。我不确定这对你来说是否足够。

\n\n

设置选项的文件似乎是Targets.cpp,尽管它没有太大帮助,因为它是一个 5.8k 行长的文件。

\n\n

在查看 llvm 代码生成之后,我的印象是 clang/LLVM 没有 gcc 那么多的目标特定选项。例如,请参阅特定于目标的功能矩阵或llc公开(记录)的选项。

\n\n

还有一件事:clang 有意公开的编译器优化选项要少得多。例如, clang 中没有-finline-limit暴露类似物。

\n\n

也许-###最终会打印所有暴露的东西。

\n