【问题标题】:How to know what optimizations are enabled by clang and gcc for each mcpu and march option?如何知道 clang 和 gcc 为每个 mcpu 和 March 选项启用了哪些优化?
【发布时间】:2014-01-31 00:32:03
【问题描述】:

Clang 和 GCC 有两个开关,-mcpu 和 -march,用于启用特定于所选 CPU 的一些优化。即-march=i686 在内部启用-mmmx、-msse 等等。

我想知道是否有一些命令可以显示march 和mcpu 为每个 CPU 启用了哪些开关。我更喜欢一个命令,但我也接受带有信息的代码位置的答案。

【问题讨论】:

    标签: gcc optimization clang


    【解决方案1】:

    gcc,试试

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

    它打印的第一行:

    gcc:警告:'-mcpu=' 已弃用;使用“-mtune=”或“-march=” 而是

    紧随其后

    The following options are target specific:
      -m128bit-long-double                  [disabled]
      -m32                                  [disabled]
      -m3dnow                               [disabled]
      -m3dnowa                              [disabled]
      -m64                                  [enabled]
      -m80387                               [enabled]
      -m8bit-idiv                           [disabled]
       [...]
    

    这回答了 gcc 的部分。


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

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

    -### 在哪里显示选项。手臂显示了不同的东西。我不确定它是否足以满足您的需求。

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

    查看 llvm 代码生成后,我的印象是 clang/LLVM 没有 gcc 那么多的目标特定选项。 参见例如 the target-specific feature matrix 或暴露(记录) options of llc。

    还有一件事:clang 故意公开的编译器优化选项要少得多。比如有no -finline-limit analogue exposed in clang.

    也许-###毕竟打印了所有暴露的东西。

    【讨论】:

    • 有点离题,但是:clang 有内联控制选项。 -mllvm -inline-threshold=...。 clang -mllvm -help-hidden 提供了很多选项。虽然,我不会说 clang 提供的选项和 GCC 一样多——我只是不知道。
    【解决方案2】:

    如前所述,gcc -Q --help=target 以人类可读的形式打印有关优化的信息。

    clang 似乎没有特定的选项。但是如果你把简单的程序编译成 LLVM IR,你可以检索到一些信息。

    示例命令:

    echo 'int main(){}' | clang -S -emit-llvm -x c - -o - | grep attributes.

    示例输出:

    attributes #0 = { noinline nounwind optnone uwtable "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "frame-pointer"="all" "less-precise-fpmad"="false" "min-legal-vector-width"="0" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
    

    在 clang-10 上测试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-05
      • 1970-01-01
      • 2012-12-05
      • 1970-01-01
      • 2013-12-30
      • 1970-01-01
      • 2016-10-12
      • 1970-01-01
      相关资源
      最近更新 更多