[tree-ssa] Miscompilation (SIGSEGV) with -ffast-math (!?), huge compile time regression

Richard Guenther rguenth@tat.physik.uni-tuebingen.de
Mon Feb 23 16:06:00 GMT 2004


Diego Novillo wrote:
> On Mon, 2004-02-23 at 10:21, Diego Novillo wrote:
> 
> 
>> The compile time regression you experienced is probably not all 
>> because of the merge.  We are spending a significant chunk of time 
>> in the tree optimizers.
>> 
> 
> I forgot to ask, could you compile with -ftime-report -fmem-report 
> before and after the compile-time degradation you experienced?

Yes. For a -O2 compilation the following are the results (faster 
computer than previous report):

before (g++ (GCC) 3.5-tree-ssa 20040209 (merged 20040126)):
Execution times (seconds)
  garbage collection    :   8.91 ( 8%) usr   0.03 ( 1%) sys   8.94 ( 8%) 
wall
  callgraph construction:   0.68 ( 1%) usr   0.00 ( 0%) sys   0.68 ( 1%) 
wall
  callgraph optimization:   0.33 ( 0%) usr   0.01 ( 0%) sys   0.34 ( 0%) 
wall
  cfg construction      :   0.48 ( 0%) usr   0.02 ( 0%) sys   0.50 ( 0%) 
wall
  cfg cleanup           :   0.99 ( 1%) usr   0.00 ( 0%) sys   0.99 ( 1%) 
wall
  trivially dead code   :   0.69 ( 1%) usr   0.00 ( 0%) sys   0.70 ( 1%) 
wall
  life analysis         :   2.43 ( 2%) usr   0.00 ( 0%) sys   2.43 ( 2%) 
wall
  life info update      :   1.18 ( 1%) usr   0.00 ( 0%) sys   1.18 ( 1%) 
wall
  alias analysis        :   1.15 ( 1%) usr   0.00 ( 0%) sys   1.15 ( 1%) 
wall
  register scan         :   0.76 ( 1%) usr   0.00 ( 0%) sys   0.76 ( 1%) 
wall
  rebuild jump labels   :   0.17 ( 0%) usr   0.00 ( 0%) sys   0.17 ( 0%) 
wall
  preprocessing         :   0.40 ( 0%) usr   0.20 ( 5%) sys   0.84 ( 1%) 
wall
  parser                :  10.81 (10%) usr   1.17 (29%) sys  11.96 (11%) 
wall
  name lookup           :   7.55 ( 7%) usr   1.65 (41%) sys   9.21 ( 8%) 
wall
  integration           :  11.28 (11%) usr   0.05 ( 1%) sys  11.33 (10%) 
wall
  tree gimplify         :   1.59 ( 1%) usr   0.02 ( 0%) sys   1.61 ( 1%) 
wall
  tree eh               :   1.14 ( 1%) usr   0.00 ( 0%) sys   1.14 ( 1%) 
wall
  tree CFG construction :   0.56 ( 1%) usr   0.02 ( 0%) sys   0.58 ( 1%) 
wall
  tree CFG cleanup      :   1.07 ( 1%) usr   0.00 ( 0%) sys   1.07 ( 1%) 
wall
  tree alias analysis   :   0.38 ( 0%) usr   0.00 ( 0%) sys   0.38 ( 0%) 
wall
  tree PHI insertion    :   1.30 ( 1%) usr   0.00 ( 0%) sys   1.30 ( 1%) 
wall
  tree SSA rewrite      :   1.51 ( 1%) usr   0.01 ( 0%) sys   1.53 ( 1%) 
wall
  tree SSA other        :   2.55 ( 2%) usr   0.02 ( 0%) sys   2.56 ( 2%) 
wall
  dominator optimization:   7.97 ( 7%) usr   0.17 ( 4%) sys   8.22 ( 7%) 
wall
  tree SRA              :   0.14 ( 0%) usr   0.00 ( 0%) sys   0.14 ( 0%) 
wall
  tree CCP              :   1.64 ( 2%) usr   0.00 ( 0%) sys   1.64 ( 1%) 
wall
  tree split crit edges :   0.18 ( 0%) usr   0.00 ( 0%) sys   0.18 ( 0%) 
wall
  tree PRE              :   3.62 ( 3%) usr   0.01 ( 0%) sys   3.63 ( 3%) 
wall
  tree conservative DCE :   1.05 ( 1%) usr   0.02 ( 0%) sys   1.07 ( 1%) 
wall
  tree aggressive DCE   :   0.60 ( 1%) usr   0.00 ( 0%) sys   0.60 ( 1%) 
wall
  tree SSA to normal    :   1.21 ( 1%) usr   0.09 ( 2%) sys   1.30 ( 1%) 
wall
  dominance frontiers   :   0.18 ( 0%) usr   0.01 ( 0%) sys   0.19 ( 0%) 
wall
  control dependences   :   0.10 ( 0%) usr   0.00 ( 0%) sys   0.10 ( 0%) 
wall
  expand                :   6.22 ( 6%) usr   0.03 ( 1%) sys   6.27 ( 6%) 
wall
  varconst              :   0.35 ( 0%) usr   0.03 ( 1%) sys   0.40 ( 0%) 
wall
  jump                  :   0.45 ( 0%) usr   0.04 ( 1%) sys   0.49 ( 0%) 
wall
  CSE                   :   3.86 ( 4%) usr   0.02 ( 0%) sys   3.91 ( 4%) 
wall
  global CSE            :   2.76 ( 3%) usr   0.05 ( 1%) sys   2.81 ( 3%) 
wall
  loop analysis         :   0.40 ( 0%) usr   0.02 ( 0%) sys   0.43 ( 0%) 
wall
  bypass jumps          :   0.76 ( 1%) usr   0.00 ( 0%) sys   0.76 ( 1%) 
wall
  CSE 2                 :   1.35 ( 1%) usr   0.00 ( 0%) sys   1.35 ( 1%) 
wall
  branch prediction     :   1.25 ( 1%) usr   0.02 ( 0%) sys   1.27 ( 1%) 
wall
  flow analysis         :   0.06 ( 0%) usr   0.01 ( 0%) sys   0.07 ( 0%) 
wall
  combiner              :   1.28 ( 1%) usr   0.01 ( 0%) sys   1.30 ( 1%) 
wall
  if-conversion         :   0.35 ( 0%) usr   0.00 ( 0%) sys   0.35 ( 0%) 
wall
  regmove               :   0.47 ( 0%) usr   0.00 ( 0%) sys   0.47 ( 0%) 
wall
  local alloc           :   1.18 ( 1%) usr   0.00 ( 0%) sys   1.18 ( 1%) 
wall
  global alloc          :   3.69 ( 3%) usr   0.03 ( 1%) sys   3.75 ( 3%) 
wall
  reload CSE regs       :   1.66 ( 2%) usr   0.00 ( 0%) sys   1.66 ( 1%) 
wall
  flow 2                :   0.21 ( 0%) usr   0.00 ( 0%) sys   0.21 ( 0%) 
wall
  if-conversion 2       :   0.16 ( 0%) usr   0.00 ( 0%) sys   0.16 ( 0%) 
wall
  peephole 2            :   0.28 ( 0%) usr   0.00 ( 0%) sys   0.29 ( 0%) 
wall
  rename registers      :   0.47 ( 0%) usr   0.04 ( 1%) sys   0.51 ( 0%) 
wall
  scheduling 2          :   1.98 ( 2%) usr   0.05 ( 1%) sys   2.21 ( 2%) 
wall
  reorder blocks        :   0.28 ( 0%) usr   0.01 ( 0%) sys   0.29 ( 0%) 
wall
  shorten branches      :   0.37 ( 0%) usr   0.03 ( 1%) sys   0.50 ( 0%) 
wall
  reg stack             :   0.07 ( 0%) usr   0.00 ( 0%) sys   0.07 ( 0%) 
wall
  final                 :   0.83 ( 1%) usr   0.07 ( 2%) sys   0.90 ( 1%) 
wall
  symout                :   0.02 ( 0%) usr   0.00 ( 0%) sys   0.02 ( 0%) 
wall
  rest of compilation   :   0.84 ( 1%) usr   0.03 ( 1%) sys   0.87 ( 1%) 
wall
  TOTAL                 : 106.28             4.03           111.04



after (g++ (GCC) 3.5-tree-ssa 20040220 (merged 20040211)):
Execution times (seconds)
  garbage collection    :   9.18 ( 4%) usr   0.00 ( 0%) sys   9.50 ( 4%) 
wall
  callgraph construction:   0.66 ( 0%) usr   0.00 ( 0%) sys   0.66 ( 0%) 
wall
  callgraph optimization:   0.33 ( 0%) usr   0.01 ( 0%) sys   0.34 ( 0%) 
wall
  cfg construction      :   0.34 ( 0%) usr   0.00 ( 0%) sys   0.34 ( 0%) 
wall
  cfg cleanup           :   0.99 ( 0%) usr   0.00 ( 0%) sys   0.99 ( 0%) 
wall
  trivially dead code   :   0.77 ( 0%) usr   0.01 ( 0%) sys   0.78 ( 0%) 
wall
  life analysis         :   2.59 ( 1%) usr   0.01 ( 0%) sys   2.60 ( 1%) 
wall
  life info update      :   1.19 ( 1%) usr   0.00 ( 0%) sys   1.20 ( 0%) 
wall
  alias analysis        :   1.07 ( 0%) usr   0.00 ( 0%) sys   1.07 ( 0%) 
wall
  register scan         :   0.67 ( 0%) usr   0.00 ( 0%) sys   0.67 ( 0%) 
wall
  rebuild jump labels   :   0.18 ( 0%) usr   0.00 ( 0%) sys   0.18 ( 0%) 
wall
  preprocessing         :   0.32 ( 0%) usr   0.23 ( 5%) sys   1.29 ( 1%) 
wall
  parser                :  10.16 ( 4%) usr   1.12 (22%) sys  11.26 ( 5%) 
wall
  name lookup           :   4.14 ( 2%) usr   2.07 (41%) sys   6.22 ( 3%) 
wall
  integration           :  11.83 ( 5%) usr   0.04 ( 1%) sys  11.93 ( 5%) 
wall
  tree gimplify         :   1.61 ( 1%) usr   0.01 ( 0%) sys   1.63 ( 1%) 
wall
  tree eh               :   1.15 ( 0%) usr   0.01 ( 0%) sys   1.16 ( 0%) 
wall
  tree CFG construction :   2.74 ( 1%) usr   0.01 ( 0%) sys   2.88 ( 1%) 
wall
  tree CFG cleanup      :   1.46 ( 1%) usr   0.01 ( 0%) sys   1.47 ( 1%) 
wall
  tree PTA              :   0.98 ( 0%) usr   0.00 ( 0%) sys   0.99 ( 0%) 
wall
  tree alias analysis   :   1.20 ( 1%) usr   0.00 ( 0%) sys   1.21 ( 1%) 
wall
  tree PHI insertion    :   1.46 ( 1%) usr   0.01 ( 0%) sys   1.47 ( 1%) 
wall
  tree SSA rewrite      :  19.89 ( 8%) usr   0.02 ( 0%) sys  20.03 ( 8%) 
wall
  tree SSA other        :   2.25 ( 1%) usr   0.36 ( 7%) sys   2.61 ( 1%) 
wall
  tree operand scan     :   2.51 ( 1%) usr   0.38 ( 7%) sys   2.92 ( 1%) 
wall
  dominator optimization:  49.77 (21%) usr   0.20 ( 4%) sys  50.28 (21%) 
wall
  tree SRA              :   0.18 ( 0%) usr   0.00 ( 0%) sys   0.18 ( 0%) 
wall
  tree CCP              :   1.51 ( 1%) usr   0.00 ( 0%) sys   1.54 ( 1%) 
wall
  tree split crit edges :   0.18 ( 0%) usr   0.00 ( 0%) sys   0.18 ( 0%) 
wall
  tree PRE              :   3.13 ( 1%) usr   0.05 ( 1%) sys   3.18 ( 1%) 
wall
  tree linearize phis   :   0.02 ( 0%) usr   0.00 ( 0%) sys   0.02 ( 0%) 
wall
  tree forward propagate:   0.69 ( 0%) usr   0.00 ( 0%) sys   0.70 ( 0%) 
wall
  tree conservative DCE :   1.24 ( 1%) usr   0.01 ( 0%) sys   1.25 ( 1%) 
wall
  tree aggressive DCE   :   0.65 ( 0%) usr   0.00 ( 0%) sys   0.65 ( 0%) 
wall
  tree DSE              :  24.22 (10%) usr   0.01 ( 0%) sys  24.33 (10%) 
wall
  tree copy headers     :   0.82 ( 0%) usr   0.01 ( 0%) sys   0.84 ( 0%) 
wall
  tree SSA to normal    :   1.59 ( 1%) usr   0.02 ( 0%) sys   1.77 ( 1%) 
wall
  dominance frontiers   :   0.18 ( 0%) usr   0.00 ( 0%) sys   0.18 ( 0%) 
wall
  control dependences   :   0.07 ( 0%) usr   0.01 ( 0%) sys   0.08 ( 0%) 
wall
  expand                :  45.89 (20%) usr   0.09 ( 2%) sys  46.31 (19%) 
wall
  varconst              :   0.28 ( 0%) usr   0.01 ( 0%) sys   0.31 ( 0%) 
wall
  jump                  :   0.40 ( 0%) usr   0.03 ( 1%) sys   0.43 ( 0%) 
wall
  CSE                   :   3.89 ( 2%) usr   0.01 ( 0%) sys   3.90 ( 2%) 
wall
  global CSE            :   2.81 ( 1%) usr   0.02 ( 0%) sys   2.83 ( 1%) 
wall
  loop analysis         :   0.31 ( 0%) usr   0.01 ( 0%) sys   0.32 ( 0%) 
wall
  bypass jumps          :   0.70 ( 0%) usr   0.00 ( 0%) sys   0.70 ( 0%) 
wall
  CSE 2                 :   1.47 ( 1%) usr   0.00 ( 0%) sys   1.48 ( 1%) 
wall
  branch prediction     :   1.10 ( 0%) usr   0.00 ( 0%) sys   1.10 ( 0%) 
wall
  flow analysis         :   0.03 ( 0%) usr   0.00 ( 0%) sys   0.04 ( 0%) 
wall
  combiner              :   1.41 ( 1%) usr   0.00 ( 0%) sys   1.41 ( 1%) 
wall
  if-conversion         :   0.41 ( 0%) usr   0.00 ( 0%) sys   0.41 ( 0%) 
wall
  regmove               :   0.36 ( 0%) usr   0.01 ( 0%) sys   0.38 ( 0%) 
wall
  mode switching        :   0.02 ( 0%) usr   0.01 ( 0%) sys   0.03 ( 0%) 
wall
  local alloc           :   1.19 ( 1%) usr   0.02 ( 0%) sys   1.21 ( 1%) 
wall
  global alloc          :   2.81 ( 1%) usr   0.06 ( 1%) sys   2.88 ( 1%) 
wall
  reload CSE regs       :   1.52 ( 1%) usr   0.00 ( 0%) sys   1.52 ( 1%) 
wall
  flow 2                :   0.28 ( 0%) usr   0.01 ( 0%) sys   0.30 ( 0%) 
wall
  if-conversion 2       :   0.13 ( 0%) usr   0.00 ( 0%) sys   0.13 ( 0%) 
wall
  peephole 2            :   0.38 ( 0%) usr   0.00 ( 0%) sys   0.39 ( 0%) 
wall
  rename registers      :   0.43 ( 0%) usr   0.01 ( 0%) sys   0.45 ( 0%) 
wall
  scheduling 2          :   1.80 ( 1%) usr   0.01 ( 0%) sys   1.82 ( 1%) 
wall
  reorder blocks        :   0.27 ( 0%) usr   0.00 ( 0%) sys   0.27 ( 0%) 
wall
  shorten branches      :   0.27 ( 0%) usr   0.00 ( 0%) sys   0.27 ( 0%) 
wall
  reg stack             :   0.03 ( 0%) usr   0.00 ( 0%) sys   0.03 ( 0%) 
wall
  final                 :   0.75 ( 0%) usr   0.09 ( 2%) sys   0.84 ( 0%) 
wall
  symout                :   0.03 ( 0%) usr   0.00 ( 0%) sys   0.03 ( 0%) 
wall
  rest of compilation   :   1.29 ( 1%) usr   0.02 ( 0%) sys   1.31 ( 1%) 
wall
  TOTAL                 : 234.23             5.07           241.96


So DOM is to blame.

Richard.



More information about the Gcc mailing list