G++ 中的 -Og 级别启用了哪些优化?
What are optimisations enabled by -Og level in G++?
官方 GCC 文档没有提供在 -Og
级别为 C++ 启用的优化列表,仅说明所选选项不会损害可调试性。
我需要知道优化列表,请执行二进制搜索,哪个特定的搜索会导致内联模板中的错误class [=] 构造函数调用19=]ARM Cortex-M7 (arm-none-eabi) 平台。我只想禁用阻止我们的代码正常工作的那个。某处是否有列表或询问 GCC 本身的选项?
此外,这将帮助我检查我是否真的看到编译器中的错误,或者在那个地方应用的优化揭示了其他问题。在前一种情况下,我需要通过最小的工作示例来确定它,而这并不容易。 -O0
的代码工作正常。
您始终可以通过以下操作查看优化级别启用的内容:g++ -c -Q -Og --help=optimizers | grep enabled
。来自手册页:
If the -Q
option appears on the command line before the --help=
option, then the descriptive text displayed by --help=
is changed.
Instead of describing the displayed options, an indication is given as
to whether the option is enabled, disabled or set to a specific value
(assuming that the compiler knows this at the point where the
--help=
option is used).
这在 GCC 6.1.1 上输出 x86_64:
-faggressive-loop-optimizations [enabled]
-fasynchronous-unwind-tables [enabled]
-fauto-inc-dec [enabled]
-fcombine-stack-adjustments [enabled]
-fcompare-elim [enabled]
-fcprop-registers [enabled]
-fdce [enabled]
-fdefer-pop [enabled]
-fdelete-null-pointer-checks [enabled]
-fdse [enabled]
-fearly-inlining [enabled]
-fforward-propagate [enabled]
-ffunction-cse [enabled]
-fgcse-lm [enabled]
-fguess-branch-probability [enabled]
-finline [enabled]
-finline-atomics [enabled]
-fipa-profile [enabled]
-fipa-pure-const [enabled]
-fipa-reference [enabled]
-fira-hoist-pressure [enabled]
-fira-share-save-slots [enabled]
-fira-share-spill-slots [enabled]
-fivopts [enabled]
-fjump-tables [enabled]
-flifetime-dse [enabled]
-fmath-errno [enabled]
-fpeephole [enabled]
-fplt [enabled]
-fprefetch-loop-arrays [enabled]
-frename-registers [enabled]
-freorder-blocks [enabled]
-frtti [enabled]
-fsched-critical-path-heuristic [enabled]
-fsched-dep-count-heuristic [enabled]
-fsched-group-heuristic [enabled]
-fsched-interblock [enabled]
-fsched-last-insn-heuristic [enabled]
-fsched-rank-heuristic [enabled]
-fsched-spec [enabled]
-fsched-spec-insn-heuristic [enabled]
-fsched-stalled-insns-dep [enabled]
-fschedule-fusion [enabled]
-fshort-enums [enabled]
-fshrink-wrap [enabled]
-fsigned-zeros [enabled]
-fsplit-ivs-in-unroller [enabled]
-fsplit-wide-types [enabled]
-fssa-backprop [enabled]
-fstdarg-opt [enabled]
-fstrict-volatile-bitfields [enabled]
-fno-threadsafe-statics [enabled]
-ftrapping-math [enabled]
-ftree-builtin-call-dce [enabled]
-ftree-ccp [enabled]
-ftree-ch [enabled]
-ftree-coalesce-vars [enabled]
-ftree-copy-prop [enabled]
-ftree-cselim [enabled]
-ftree-dce [enabled]
-ftree-dominator-opts [enabled]
-ftree-dse [enabled]
-ftree-forwprop [enabled]
-ftree-fre [enabled]
-ftree-loop-if-convert [enabled]
-ftree-loop-im [enabled]
-ftree-loop-ivcanon [enabled]
-ftree-loop-optimize [enabled]
-ftree-phiprop [enabled]
-ftree-reassoc [enabled]
-ftree-scev-cprop [enabled]
-ftree-sink [enabled]
-ftree-slsr [enabled]
-ftree-ter [enabled]
-fvar-tracking [enabled]
-fvar-tracking-assignments [enabled]
-fweb [enabled]
官方 GCC 文档没有提供在 -Og
级别为 C++ 启用的优化列表,仅说明所选选项不会损害可调试性。
我需要知道优化列表,请执行二进制搜索,哪个特定的搜索会导致内联模板中的错误class [=] 构造函数调用19=]ARM Cortex-M7 (arm-none-eabi) 平台。我只想禁用阻止我们的代码正常工作的那个。某处是否有列表或询问 GCC 本身的选项?
此外,这将帮助我检查我是否真的看到编译器中的错误,或者在那个地方应用的优化揭示了其他问题。在前一种情况下,我需要通过最小的工作示例来确定它,而这并不容易。 -O0
的代码工作正常。
您始终可以通过以下操作查看优化级别启用的内容:g++ -c -Q -Og --help=optimizers | grep enabled
。来自手册页:
If the
-Q
option appears on the command line before the--help=
option, then the descriptive text displayed by--help=
is changed. Instead of describing the displayed options, an indication is given as to whether the option is enabled, disabled or set to a specific value (assuming that the compiler knows this at the point where the--help=
option is used).
这在 GCC 6.1.1 上输出 x86_64:
-faggressive-loop-optimizations [enabled]
-fasynchronous-unwind-tables [enabled]
-fauto-inc-dec [enabled]
-fcombine-stack-adjustments [enabled]
-fcompare-elim [enabled]
-fcprop-registers [enabled]
-fdce [enabled]
-fdefer-pop [enabled]
-fdelete-null-pointer-checks [enabled]
-fdse [enabled]
-fearly-inlining [enabled]
-fforward-propagate [enabled]
-ffunction-cse [enabled]
-fgcse-lm [enabled]
-fguess-branch-probability [enabled]
-finline [enabled]
-finline-atomics [enabled]
-fipa-profile [enabled]
-fipa-pure-const [enabled]
-fipa-reference [enabled]
-fira-hoist-pressure [enabled]
-fira-share-save-slots [enabled]
-fira-share-spill-slots [enabled]
-fivopts [enabled]
-fjump-tables [enabled]
-flifetime-dse [enabled]
-fmath-errno [enabled]
-fpeephole [enabled]
-fplt [enabled]
-fprefetch-loop-arrays [enabled]
-frename-registers [enabled]
-freorder-blocks [enabled]
-frtti [enabled]
-fsched-critical-path-heuristic [enabled]
-fsched-dep-count-heuristic [enabled]
-fsched-group-heuristic [enabled]
-fsched-interblock [enabled]
-fsched-last-insn-heuristic [enabled]
-fsched-rank-heuristic [enabled]
-fsched-spec [enabled]
-fsched-spec-insn-heuristic [enabled]
-fsched-stalled-insns-dep [enabled]
-fschedule-fusion [enabled]
-fshort-enums [enabled]
-fshrink-wrap [enabled]
-fsigned-zeros [enabled]
-fsplit-ivs-in-unroller [enabled]
-fsplit-wide-types [enabled]
-fssa-backprop [enabled]
-fstdarg-opt [enabled]
-fstrict-volatile-bitfields [enabled]
-fno-threadsafe-statics [enabled]
-ftrapping-math [enabled]
-ftree-builtin-call-dce [enabled]
-ftree-ccp [enabled]
-ftree-ch [enabled]
-ftree-coalesce-vars [enabled]
-ftree-copy-prop [enabled]
-ftree-cselim [enabled]
-ftree-dce [enabled]
-ftree-dominator-opts [enabled]
-ftree-dse [enabled]
-ftree-forwprop [enabled]
-ftree-fre [enabled]
-ftree-loop-if-convert [enabled]
-ftree-loop-im [enabled]
-ftree-loop-ivcanon [enabled]
-ftree-loop-optimize [enabled]
-ftree-phiprop [enabled]
-ftree-reassoc [enabled]
-ftree-scev-cprop [enabled]
-ftree-sink [enabled]
-ftree-slsr [enabled]
-ftree-ter [enabled]
-fvar-tracking [enabled]
-fvar-tracking-assignments [enabled]
-fweb [enabled]