【问题标题】:How to turn off ANY optimisation flag in GCC如何在 GCC 中关闭任何优化标志
【发布时间】:2015-02-16 20:06:25
【问题描述】:

我试图了解如何关闭使用 GCC 编译的特定优化标志。我知道有些标志有-fno 选项,但大多数标志没有(据我所见)。我正在尝试使用-O1 标志编译一个程序,但每次编译都删除-O1 中的一个标志。

例如; -fauto-inc-dec 没有等效的 -fno-auto-inc-dec 标志,我可以将其传递给参数,例如:-O1 -fno-auto-inc-dec

想要使用-O1 选项进行编译,但关闭-O1 提供的特定选项以查看导致的差异。

任何帮助将不胜感激,不幸的是我是新手,所以我是初学者。

【问题讨论】:

    标签: gcc


    【解决方案1】:

    man gcc中所述:

    Most optimizations are only enabled if an -O level is set on
    the command line.  Otherwise they are disabled, 
    even if individual optimization flags are specified.
    

    所以基本上通过 not 传递任何 -O 标志你没有使用可配置的优化。

    另外,-O1 不是默认值,-O0 是。

    您也可以反其道而行之,禁用所有优化并手动启用“批处理”,即查看gcc -Q --help=optimizers,查看在哪个级别启用了哪些优化并将其剥离。

    为了解决您对-O* 选项启用未列出的标志的担忧,我想说这是一个手册页。在特定架构上主动查询编译器应该为您提供一个详尽的优化列表,这些优化将通过特定的 -O 标志启用,因此将 -O0 与这些标志的列表结合使用 应该产生完全相同的结果。

    【讨论】:

    • 我意识到我说“默认”是个错误,我现在已经删除了,谢谢。我想做的是使用 ALL -O1 选项进行编译,但有选择地删除单个选项以查看性能变化。这可能吗?我已经读到,您无法通过指定所有编译器标志来获得 O1 性能,因为它设置了默认变量,因此除了我要删除的标志之外列出所有标志不是一种选择。
    • 不是据我所知。您确实可以反其道而行之,禁用所有优化并手动启用“批处理”,即查看gcc -Q --help=optimizers,查看在哪个级别启用了哪些优化并剥离它们。
    • 呃,你从哪里得到无法通过手动指定标志获得-O1 性能的信息?
    • 我在文档中唯一能找到的部分是手册页中列出的选项并不是一个详尽的列表,这是完全有道理的,因为手册页不依赖于体系结构。但是,如果您查询编译器在您的特定架构上启用的 选项,您 得到一个详尽的列表。
    【解决方案2】:

    为什么不反过来呢?使用-O0 关闭所有优化并有选择地启用它们。

    或者,如果您希望一一禁用它们,请从以下开始:

    CFLAGS=-O0 \
          -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
    

    (顺便说一句,所有这些信息都来自man gcc

    【讨论】:

      猜你喜欢
      • 2010-12-19
      • 1970-01-01
      • 2010-09-11
      • 1970-01-01
      • 1970-01-01
      • 2011-07-30
      • 1970-01-01
      • 1970-01-01
      • 2013-11-07
      相关资源
      最近更新 更多