GCC优化标志的顺序

sta*_*icx 7 c optimization gcc compiler-optimization

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

例:

 gcc -fauto-inc-dec -fbranch-count-reg -fcombine-stack-adjustments ... test.c -o out.o 
Run Code Online (Sandbox Code Playgroud)

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

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

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

a3.*_*ity 5

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

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

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

  • 我想定义自己的旗帜

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

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

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

(添加有关其他优化过程的注释 - 您可以编写一个gcc优化插件来进行额外的传递.请参阅这篇文章:创建GCC插件的介绍.本文有助于创建插件以执行其他优化传递,转换代码或分析信息.)

  • @staticx:是的,你认为优化的顺序很重要.但是,给出命令行参数的顺序不会影响gcc中的优化传递顺序. (6认同)
  • 以上答案是正确的.顺便说一句,您可以使用[MELT](http://gcc-melt.org/)来增强GCC.优化标志是设置参数,后来由GCC传递管理器用于对优化进行排序(有时以动态方式).详细信息可能特定于特定版本的GCC,以及`gcc-help @ gcc.gnu.org`(如果您只是使用优化)或`gcc @ gcc.gnu.org`(如果您正在创建插件或MELT)扩展)是最好的问题 (3认同)