Hello, following table compares optimization levels as -O0, -Os, -O1-3 and -Ofast. Columns in the table include all ELF sections bigger than 5% for a binary. Apart from that I took -O2 as a base option and I tried to disable every option in this level. Similarly I measured impact of the rest of optimizations enabled in O3 or Ofast. That gives us about 100 configurations that can be compared for speed. I would like to ask Honza to mark configurations that make sense to be run for speed comparison.
Thanks, Martin
+--------------------------------------------+---------+-------------------+---------+---------+------------+---------+-----------+-------------+---------+---------+---------+ | | .rodata | .gcc_except_table | .data | .bss | .debug_str | .symtab | .eh_frame | .debug_info | .strtab | .text | SIZE | +--------------------------------------------+---------+-------------------+---------+---------+------------+---------+-----------+-------------+---------+---------+---------+ | Os | 93.90% | 77.38% | 98.93% | 97.85% | 109.82% | 99.97% | 94.50% | 125.83% | 100.75% | 79.24% | 86.23% | | O1 | 100.26% | 87.20% | 100.00% | 100.01% | 100.00% | 99.52% | 93.15% | 100.00% | 99.21% | 93.46% | 95.49% | | O2_fbranch_probabilities | 100.00% | 97.87% | 100.00% | 100.00% | 100.00% | 99.72% | 99.65% | 100.00% | 99.46% | 98.25% | 98.71% | | O2_fwrapv | 100.00% | 100.02% | 100.00% | 100.00% | 100.00% | 99.99% | 99.71% | 100.00% | 100.00% | 98.61% | 98.90% | | O2_fno_align_jumps | 100.00% | 99.97% | 100.00% | 100.00% | 100.00% | 100.00% | 99.99% | 100.00% | 100.00% | 98.19% | 98.94% | | O2_fno_align_functions | 100.00% | 100.02% | 100.00% | 100.00% | 100.00% | 100.00% | 99.99% | 100.00% | 100.00% | 98.65% | 99.27% | | O2_fno_tree_pre | 99.83% | 100.46% | 100.00% | 100.00% | 100.00% | 99.58% | 99.66% | 100.00% | 99.88% | 98.94% | 99.29% | | O2_fno_align_loops | 100.00% | 99.98% | 100.00% | 100.00% | 100.00% | 100.00% | 99.96% | 100.00% | 100.00% | 99.05% | 99.42% | | O2_fipa_pta | 100.00% | 98.64% | 100.00% | 100.00% | 100.00% | 99.96% | 100.39% | 100.00% | 99.99% | 99.32% | 99.47% | | O2_fno_caller_saves | 100.00% | 100.08% | 100.00% | 100.00% | 100.00% | 100.01% | 100.10% | 100.00% | 100.00% | 99.29% | 99.54% | | O2_fno_inline_small_functions | 100.01% | 99.41% | 100.00% | 100.01% | 100.00% | 100.13% | 100.31% | 100.00% | 100.13% | 99.23% | 99.66% | | O2_fno_devirtualize_speculatively | 100.00% | 98.24% | 100.00% | 100.00% | 100.00% | 99.98% | 99.87% | 100.00% | 99.98% | 99.50% | 99.73% | | O2_fno_devirtualize | 100.00% | 98.26% | 100.00% | 100.00% | 100.00% | 99.98% | 99.87% | 100.00% | 99.98% | 99.50% | 99.73% | | O2_ftree_slp_vectorize | 100.82% | 100.00% | 100.00% | 100.00% | 100.00% | 99.87% | 99.07% | 100.00% | 99.88% | 99.89% | 99.92% | | O2_fira_loop_pressure | 100.00% | 100.02% | 100.00% | 100.00% | 100.00% | 99.98% | 99.97% | 100.00% | 100.00% | 99.90% | 99.97% | | O2_fno_optimize_sibling_calls | 100.00% | 99.99% | 100.00% | 100.00% | 100.00% | 100.02% | 99.14% | 100.00% | 100.01% | 99.99% | 99.98% | | O2_fsignaling_nans | 99.56% | 100.02% | 100.00% | 100.00% | 100.00% | 99.81% | 100.04% | 100.00% | 100.03% | 100.00% | 99.98% | | O2_fgcse_after_reload | 100.00% | 100.04% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 99.98% | 99.98% | | O2_fno_ipa_sra | 100.01% | 99.90% | 100.00% | 100.00% | 100.00% | 99.98% | 99.97% | 100.00% | 99.81% | 99.98% | 99.98% | | O2_fno_reorder_blocks_and_partition | 100.00% | 99.68% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 99.79% | 99.99% | 99.99% | | O2_fsched2_use_superblocks | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.01% | 100.00% | 100.00% | 99.99% | 99.99% | | O2_fdata_sections | 99.88% | 100.00% | 99.73% | 99.63% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 99.99% | | O2_fno_reorder_functions | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 99.98% | 99.99% | | O2_fno_schedule_insns2 | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 99.98% | 100.00% | | O2_fgcse_sm | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.01% | 100.00% | 100.00% | 100.00% | 100.00% | | O2_fmodulo_sched | 100.00% | 100.02% | 100.00% | 100.00% | 100.00% | 100.00% | 99.99% | 100.00% | 100.00% | 100.00% | 100.00% | | O2_fisolate_erroneous_paths_attribute | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | | O2_fgcse_las | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | | O2_fshort_wchar | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | | O2_fno_tree_builtin_call_dce | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | | O2_fdelayed_branch | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | | O2 | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | | O2_fsched_spec_load_dangerous | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | | O2_ftree_lrs | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | | O2_fno_reorder_blocks | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | | O2_fselective_scheduling | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | | O2_freg_struct_return | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | | O2_fsection_anchors | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | | O2_fno_strict_aliasing | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | | O2_fbranch_target_load_optimize2 | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | | O2_fbtr_bb_exclusive | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | | O2_funsafe_math_optimizations | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | | O2_fpeel_loops | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | | O2_fomit_frame_pointer | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | | O2_fnothrow_opt | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | | O2_freschedule_modulo_scheduled_loops | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | | O2_fvar_tracking_assignments_toggle | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | | O2_fvpt | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | | O2_fsel_sched_pipelining_outer_loops | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | | O2_fvariable_expansion_in_unroller | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | | O2_ffinite_math_only | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | | O2_fopt_info | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | | O2_fstrict_enums | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | | O2_fcx_limited_range | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | | O2_funwind_tables | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | | O2_fsel_sched_reschedule_pipelined | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | | O2_fsched_spec_load | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | | O2_fno_align_labels | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | | O2_fvar_tracking_uninit | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | | O2_fsched_pressure | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | | O2_fsel_sched_pipelining | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | | O2_fbranch_target_load_optimize | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | | O2_fsched_stalled_insns | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | | O2_fno_hoist_adjacent_loads | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | | O2_fno_thread_jumps | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | | O2_fno_optimize_strlen | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 99.98% | 99.99% | 100.00% | 99.99% | 100.02% | 100.00% | | O2_flive_range_shrinkage | 100.00% | 99.99% | 100.00% | 100.00% | 100.00% | 99.99% | 100.00% | 100.00% | 100.00% | 99.98% | 100.00% | | O2_fno_ipa_cp | 100.00% | 100.03% | 100.00% | 100.00% | 100.00% | 100.00% | 100.02% | 100.00% | 99.88% | 100.01% | 100.00% | | O2_fno_isolate_erroneous_paths_dereference | 100.00% | 100.04% | 100.00% | 100.00% | 100.00% | 100.00% | 100.01% | 100.00% | 100.00% | 100.01% | 100.01% | | O2_fcx_fortran_rules | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.02% | 100.00% | 100.00% | 100.01% | 100.01% | 100.01% | | O2_ftree_loop_if_convert_stores | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.01% | 100.05% | 100.00% | 100.00% | 99.99% | 100.01% | | O2_fexceptions | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.10% | 100.00% | 100.00% | 100.01% | 100.01% | | O2_fmerge_all_constants | 100.85% | 100.00% | 100.00% | 100.00% | 100.00% | 100.10% | 99.94% | 100.00% | 100.15% | 99.89% | 100.01% | | O2_ftree_coalesce_inlined_vars | 99.99% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.02% | 100.00% | 100.00% | 100.02% | 100.01% | | O2_funsafe_loop_optimizations | 100.00% | 99.99% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.03% | 100.02% | | O2_fno_tree_switch_conversion | 100.31% | 100.01% | 100.00% | 100.00% | 100.00% | 99.97% | 100.01% | 100.00% | 99.97% | 100.01% | 100.05% | | O2_fconserve_stack | 100.00% | 99.16% | 100.00% | 100.00% | 100.00% | 100.28% | 101.03% | 100.00% | 100.47% | 99.93% | 100.05% | | O2_fno_tree_tail_merge | 100.00% | 100.49% | 100.00% | 100.00% | 100.00% | 99.99% | 99.95% | 100.00% | 100.00% | 100.11% | 100.06% | | O2_fno_rerun_cse_after_loop | 100.00% | 100.03% | 100.00% | 100.00% | 100.00% | 100.06% | 100.04% | 100.00% | 100.01% | 100.09% | 100.07% | | O2_ftree_partial_pre | 100.00% | 99.98% | 100.00% | 100.00% | 100.00% | 100.01% | 100.01% | 100.00% | 100.00% | 100.09% | 100.11% | | O2_ftree_loop_distribution | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.01% | 100.00% | 100.00% | 100.00% | 100.17% | 100.14% | | O2_ftree_loop_distribute_patterns | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.13% | 100.08% | 100.00% | 100.09% | 100.16% | 100.18% | | O2_fno_cse_follow_jumps | 100.00% | 100.03% | 100.00% | 100.00% | 100.00% | 100.01% | 100.00% | 100.00% | 100.00% | 100.22% | 100.18% | | O2_frounding_math | 100.08% | 100.00% | 100.00% | 100.00% | 100.00% | 100.35% | 100.06% | 100.00% | 100.18% | 100.20% | 100.19% | | O2_fno_gcse | 100.00% | 100.03% | 100.00% | 100.00% | 100.00% | 100.21% | 99.68% | 100.00% | 100.01% | 100.31% | 100.22% | | O2_fno_expensive_optimizations | 99.68% | 99.92% | 100.00% | 100.00% | 100.00% | 99.43% | 100.35% | 100.00% | 99.80% | 100.50% | 100.30% | | O2_fno_tree_vrp | 100.23% | 99.58% | 100.00% | 100.00% | 100.00% | 100.01% | 100.05% | 100.00% | 100.03% | 100.35% | 100.36% | | O2_fselective_scheduling2 | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 99.96% | 100.00% | 100.00% | 100.65% | 100.43% | | O2_fnon_call_exceptions | 100.20% | 243.68% | 100.00% | 100.00% | 100.00% | 100.14% | 100.44% | 100.00% | 100.13% | 100.32% | 100.48% | | O2_funswitch_loops | 100.02% | 100.02% | 100.00% | 100.00% | 100.00% | 100.00% | 100.10% | 100.00% | 100.00% | 100.90% | 100.54% | | O2_fpredictive_commoning | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.00% | 100.02% | 100.00% | 100.00% | 100.86% | 100.75% | | O2_fno_peephole2 | 100.00% | 100.18% | 100.00% | 100.00% | 100.00% | 100.00% | 99.63% | 100.00% | 100.00% | 101.30% | 100.81% | | O2_fschedule_insns | 100.00% | 100.04% | 100.00% | 100.00% | 100.00% | 100.00% | 100.15% | 100.00% | 100.00% | 101.30% | 100.85% | | O2_fipa_cp_clone | 100.11% | 100.99% | 100.00% | 100.00% | 100.00% | 100.43% | 100.95% | 100.00% | 101.04% | 101.20% | 100.92% | | O2_fno_crossjumping | 100.00% | 102.10% | 100.00% | 100.00% | 100.00% | 100.00% | 100.70% | 100.00% | 100.00% | 102.27% | 101.54% | | O2_finline_functions | 101.45% | 110.39% | 100.00% | 100.00% | 100.00% | 99.23% | 101.26% | 100.00% | 98.99% | 112.37% | 107.48% | | O2_ftree_vectorize | 109.78% | 99.88% | 100.00% | 100.00% | 100.00% | 103.50% | 95.46% | 100.00% | 100.66% | 113.02% | 110.14% | | O2_ftree_loop_vectorize | 109.03% | 99.88% | 100.00% | 100.00% | 100.00% | 103.65% | 95.44% | 100.00% | 100.79% | 113.10% | 110.32% | | O2_ftrapv | 99.98% | 99.89% | 100.00% | 100.00% | 135.45% | 101.87% | 109.41% | 273.28% | 101.18% | 115.00% | 114.61% | | O2_ffloat_store | 99.94% | 99.96% | 100.00% | 100.00% | 100.00% | 100.03% | 100.59% | 100.00% | 100.01% | 132.75% | 121.99% | | Ofast | 110.36% | 110.91% | 100.00% | 100.00% | 100.00% | 102.49% | 97.93% | 100.00% | 100.18% | 136.69% | 126.34% | | O3 | 110.51% | 110.91% | 100.00% | 100.00% | 100.00% | 102.53% | 98.42% | 100.00% | 100.21% | 136.98% | 126.50% | | O2_funroll_loops | 100.00% | 103.10% | 100.00% | 100.00% | 100.00% | 100.04% | 101.22% | 100.00% | 100.01% | 148.33% | 132.25% | | O2_funroll_all_loops | 100.00% | 103.20% | 100.00% | 100.00% | 100.00% | 100.04% | 101.38% | 100.00% | 100.01% | 154.15% | 135.72% |