GCC优化标志的顺序

时间:2015-10-14 05:31:58

标签: c gcc optimization compiler-optimization

我想为输入C程序定义一组优化序列,以研究我应用的序列对代码性能的影响。

示例:

 gcc -fauto-inc-dec -fbranch-count-reg -fcombine-stack-adjustments ... test.c -o out.o 

这些选项的顺序是否会影响生成代码的有效性?

同样,两次应用优化选项会产生影响吗?

有没有更好的方法来测试数千个优化序列?就像-02(包括大约20个选项)一样,我想定义自己的标志

1 个答案:

答案 0 :(得分:5)

  • 这些选项的顺序是否会影响生成代码的有效性?

    • ,这些选项作为命令行参数传递给编译器的顺序不会影响生成代码的有效性。
  • 有没有更好的方法来测试数千个优化序列?

    • 由于我们没有优化序列w.r.t优化标志传递给编译器,我们没有办法测试。但是,正如您所知,我们有可以试验的优化级别。
  • 更高的优化级别对程序执行更多全局转换,并应用更昂贵的分析算法,以生成更快,更紧凑的代码。编译时的价格以及由此带来的执行时间的改善都取决于特定的应用程序和硬件环境。您应该尝试为您的应用程序找到最佳级别。 请参阅Optimization Levels for GCC

  • 我想定义自己的旗帜

  • 目前,gcc支持许多可以在Optimize Options中引用的标志。如果您想定义一个标志,那么编译器需要理解它,您可能需要修改gcc的编译器代码,以便它可以理解一个新标志。请参阅github上的代码,opts.c,opts.c处理优化标志和级别。

  • 同样,两次应用优化选项会产生影响吗?

    • 不,两次应用相同的优化选项不会产生影响。例如:执行gcc -fauto-inc-dec -fauto-inc-dec test.c与执行gcc -fauto-inc-dec test.c具有相同的影响。

添加有关其他优化传递的评论 - 您可以编写一个gcc优化插件来进行额外的传递。请参阅这篇文章:An introduction to creating GCC plugins。本文有助于创建插件到进行额外的优化传递,转换代码或分析信息。)