【问题标题】:GCC Optimization OptionGCC 优化选项
【发布时间】:2021-12-08 07:53:02
【问题描述】:

最近用GCC编译一个程序,但是当我使用-O1优化选项时,出错了;使用-O0时没有问题。所以我用官方文档说的那些选项替换了-O1,例如-fauto-inc-dec、-fcompare-elim、-fcprop-registers等。 但是,它运行良好,没有任何错误,但性能不是很好。

我想知道-O1是否相当于那些小编译选项?

【问题讨论】:

  • 听起来你的程序实际上有一个错误,可能是由未定义的行为引起的,它意外地与 -O0 一起工作。你应该修复这个错误。
  • 谢谢您,先生。这是很有可能的。但是,我对 -O1 和 -O1 打开的那些优化标志的区别感兴趣。为什么它们有不同的效果?

标签: gcc


【解决方案1】:

The -O1 will turn on the following optimization flags:

      -fauto-inc-dec 
      -fcompare-elim 
      -fcprop-registers 
      -fdce 
      -fdefer-pop 
      -fdelayed-branch 
      -fdse 
      -fguess-branch-probability 
      -fif-conversion2 
      -fif-conversion 
      -fipa-pure-const 
      -fipa-profile 
      -fipa-reference 
      -fmerge-constants
      -fsplit-wide-types 
      -ftree-bit-ccp 
      -ftree-builtin-call-dce 
      -ftree-ccp 
      -ftree-ch 
      -ftree-copyrename 
      -ftree-dce 
      -ftree-dominator-opts 
      -ftree-dse 
      -ftree-forwprop 
      -ftree-fre 
      -ftree-phiprop 
      -ftree-slsr 
      -ftree-sra 
      -ftree-pta 
      -ftree-ter 
      -funit-at-a-time

【讨论】:

  • 我已经用它们来代替-O1,但是效果不一样。添加顺序也很重要吗?
  • 是的,传球顺序通常很重要。
  • 谢谢,我想知道在哪里可以得到序列? GCC 手册按字母顺序对其进行了排序。
  • @user2655195 我不知道打印通行证顺序的标志,但我想可以从通行证管理器代码中挖掘出来。看看gcc.gnu.org/onlinedocs/gccint/Pass-manager.html
  • 好的,谢谢您的建议。
【解决方案2】:

完全开启优化(-O1 vs -O0)会以-f 标志无法控制的方式更改代码生成。注意gcc documentation中的这句话:

并非所有优化都直接由标志控制。此部分仅列出具有标志的优化。

一些细节取决于非常具体的 gcc 版本号(例如 gcc 4.2 与 gcc 4.5、4.9 等)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-11
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    • 2016-01-11
    相关资源
    最近更新 更多