This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Extreme PRE compile times



On Wed, 12 Nov 2003 law@redhat.com wrote:

>
> Compiling g++.dg/eh/cleanup1.C without PRE we get:
>
> Execution times (seconds)
>  garbage collection    :   1.56 ( 1%) usr   0.02 ( 2%) sys   1.56 ( 1%) wall
>  callgraph construction:   0.12 ( 0%) usr   0.02 ( 2%) sys   0.14 ( 0%) wall
>  cfg construction      :   0.55 ( 0%) usr   0.00 ( 0%) sys   0.52 ( 0%) wall
>  cfg cleanup           :   0.64 ( 1%) usr   0.00 ( 0%) sys   0.64 ( 1%) wall
>  trivially dead code   :   0.30 ( 0%) usr   0.00 ( 0%) sys   0.31 ( 0%) wall
>  life analysis         :   3.36 ( 3%) usr   0.01 ( 1%) sys   3.36 ( 3%) wall
>  life info update      :   2.65 ( 2%) usr   0.00 ( 0%) sys   2.62 ( 2%) wall
>  alias analysis        :   0.53 ( 0%) usr   0.00 ( 0%) sys   0.53 ( 0%) wall
>  register scan         :   0.20 ( 0%) usr   0.00 ( 0%) sys   0.22 ( 0%) wall
>  rebuild jump labels   :   0.12 ( 0%) usr   0.00 ( 0%) sys   0.11 ( 0%) wall
>  preprocessing         :   0.01 ( 0%) usr   0.00 ( 0%) sys   0.01 ( 0%) wall
>  parser                :   1.97 ( 2%) usr   0.06 ( 6%) sys   2.00 ( 2%) wall
>  name lookup           :   0.01 ( 0%) usr   0.02 ( 2%) sys   0.04 ( 0%) wall
>  integration           :   2.04 ( 2%) usr   0.03 ( 3%) sys   2.08 ( 2%) wall
>  tree gimplify         :   0.32 ( 0%) usr   0.00 ( 0%) sys   0.33 ( 0%) wall
>  tree eh               :   0.14 ( 0%) usr   0.01 ( 1%) sys   0.16 ( 0%) wall
>  tree CFG construction :   0.61 ( 1%) usr   0.03 ( 3%) sys   0.66 ( 1%) wall
>  tree CFG cleanup      :   0.66 ( 1%) usr   0.00 ( 0%) sys   0.69 ( 1%) wall
>  tree must-alias       :   0.02 ( 0%) usr   0.00 ( 0%) sys   0.02 ( 0%) wall
>  tree PHI insertion    :  12.46 (11%) usr   0.01 ( 1%) sys  12.47 (11%) wall
>  tree SSA rewrite      :   0.09 ( 0%) usr   0.01 ( 1%) sys   0.11 ( 0%) wall
>  tree SSA other        :   0.24 ( 0%) usr   0.02 ( 2%) sys   0.26 ( 0%) wall
>  tree thread jumps     :   0.25 ( 0%) usr   0.03 ( 3%) sys   0.27 ( 0%) wall
>  dominator optimization:   0.58 ( 1%) usr   0.03 ( 3%) sys   0.61 ( 1%) wall
>  tree CCP              :   0.22 ( 0%) usr   0.01 ( 1%) sys   0.22 ( 0%) wall
>  tree COPYPROP         :   0.03 ( 0%) usr   0.00 ( 0%) sys   0.03 ( 0%) wall
>  tree DCE              :   0.20 ( 0%) usr   0.01 ( 1%) sys   0.20 ( 0%) wall
>  tree SSA to normal    :   0.26 ( 0%) usr   0.01 ( 1%) sys   0.28 ( 0%) wall
>  dominance frontiers   :   0.02 ( 0%) usr   0.00 ( 0%) sys   0.02 ( 0%) wall
>  expand                :   0.55 ( 0%) usr   0.03 ( 3%) sys   0.53 ( 0%) wall
>  jump                  :   2.81 ( 3%) usr   0.02 ( 2%) sys   2.88 ( 3%) wall
>  CSE                   :   1.15 ( 1%) usr   0.00 ( 0%) sys   1.19 ( 1%) wall
>  global CSE            :   4.24 ( 4%) usr   0.41 (42%) sys   4.63 ( 4%) wall
>  loop analysis         :   0.05 ( 0%) usr   0.00 ( 0%) sys   0.03 ( 0%) wall
>  bypass jumps          :   0.63 ( 1%) usr   0.06 ( 6%) sys   0.69 ( 1%) wall
>  CSE 2                 :   0.34 ( 0%) usr   0.00 ( 0%) sys   0.35 ( 0%) wall
>  branch prediction     :   1.72 ( 2%) usr   0.00 ( 0%) sys   1.72 ( 2%) wall
>  flow analysis         :   0.06 ( 0%) usr   0.00 ( 0%) sys   0.08 ( 0%) wall
>  combiner              :   9.35 ( 8%) usr   0.00 ( 0%) sys   9.35 ( 8%) wall
>  if-conversion         :   3.03 ( 3%) usr   0.01 ( 1%) sys   3.03 ( 3%) wall
>  regmove               :   0.16 ( 0%) usr   0.00 ( 0%) sys   0.17 ( 0%) wall
>  mode switching        :   0.00 ( 0%) usr   0.00 ( 0%) sys   0.01 ( 0%) wall
>  local alloc           :   0.36 ( 0%) usr   0.01 ( 1%) sys   0.37 ( 0%) wall
>  global alloc          :  17.18 (15%) usr   0.01 ( 1%) sys  17.18 (15%) wall
>  reload CSE regs       :   1.95 ( 2%) usr   0.01 ( 1%) sys   1.96 ( 2%) wall
>  flow 2                :   0.29 ( 0%) usr   0.00 ( 0%) sys   0.29 ( 0%) wall
>  if-conversion 2       :   1.24 ( 1%) usr   0.00 ( 0%) sys   1.23 ( 1%) wall
>  peephole 2            :   0.10 ( 0%) usr   0.00 ( 0%) sys   0.11 ( 0%) wall
>  rename registers      :   3.73 ( 3%) usr   0.04 ( 4%) sys   3.77 ( 3%) wall
>  scheduling 2          :  31.25 (28%) usr   0.00 ( 0%) sys  31.27 (28%) wall
>  reorder blocks        :   0.18 ( 0%) usr   0.00 ( 0%) sys   0.17 ( 0%) wall
>  shorten branches      :   0.12 ( 0%) usr   0.00 ( 0%) sys   0.12 ( 0%) wall
>  final                 :   0.20 ( 0%) usr   0.04 ( 4%) sys   0.24 ( 0%) wall
>  rest of compilation   :   0.72 ( 1%) usr   0.01 ( 1%) sys   0.70 ( 1%) wall
>  TOTAL                 : 111.58             0.98           112.56
>
>
> If I turn on tree-pre, then it looks like this:
>
> Execution times (seconds)
>  garbage collection    : 269.10 (29%) usr   0.18 ( 5%) sys 268.95 (28%) wall
>  callgraph construction:   0.14 ( 0%) usr   0.00 ( 0%) sys   0.15 ( 0%) wall
>  cfg construction      :   0.55 ( 0%) usr   0.00 ( 0%) sys   0.54 ( 0%) wall
>  cfg cleanup           :   0.62 ( 0%) usr   0.00 ( 0%) sys   0.65 ( 0%) wall
>  trivially dead code   :   0.31 ( 0%) usr   0.00 ( 0%) sys   0.33 ( 0%) wall
>  life analysis         :   3.36 ( 0%) usr   0.00 ( 0%) sys   3.35 ( 0%) wall
>  life info update      :   2.65 ( 0%) usr   0.00 ( 0%) sys   2.63 ( 0%) wall
>  alias analysis        :   0.50 ( 0%) usr   0.00 ( 0%) sys   0.50 ( 0%) wall
>  register scan         :   0.20 ( 0%) usr   0.00 ( 0%) sys   0.20 ( 0%) wall
>  rebuild jump labels   :   0.12 ( 0%) usr   0.00 ( 0%) sys   0.11 ( 0%) wall
>  preprocessing         :   0.00 ( 0%) usr   0.00 ( 0%) sys   0.02 ( 0%) wall
>  parser                :   1.98 ( 0%) usr   0.06 ( 2%) sys   2.05 ( 0%) wall
>  name lookup           :   0.07 ( 0%) usr   0.01 ( 0%) sys   0.05 ( 0%) wall
>  integration           :   2.17 ( 0%) usr   0.01 ( 0%) sys   2.18 ( 0%) wall
>  tree gimplify         :   0.33 ( 0%) usr   0.00 ( 0%) sys   0.34 ( 0%) wall
>  tree eh               :   0.15 ( 0%) usr   0.01 ( 0%) sys   0.15 ( 0%) wall
>  tree CFG construction :   0.61 ( 0%) usr   0.00 ( 0%) sys   0.61 ( 0%) wall
>  tree CFG cleanup      :   0.65 ( 0%) usr   0.00 ( 0%) sys   0.67 ( 0%) wall
>  tree must-alias       :   0.03 ( 0%) usr   0.00 ( 0%) sys   0.03 ( 0%) wall
>  tree PHI insertion    :  12.48 ( 1%) usr   0.02 ( 1%) sys  12.51 ( 1%) wall
>  tree SSA rewrite      :   0.10 ( 0%) usr   0.01 ( 0%) sys   0.11 ( 0%) wall
>  tree SSA other        :   0.24 ( 0%) usr   0.03 ( 1%) sys   0.26 ( 0%) wall
>  tree thread jumps     :   0.27 ( 0%) usr   0.02 ( 1%) sys   0.28 ( 0%) wall
>  dominator optimization:   0.92 ( 0%) usr   0.33 ( 9%) sys   1.25 ( 0%) wall
>  tree CCP              :   0.23 ( 0%) usr   0.00 ( 0%) sys   0.22 ( 0%) wall
>  tree PRE              : 562.07 (60%) usr   0.93 (25%) sys 576.33 (60%) wall
>  tree COPYPROP         :   0.04 ( 0%) usr   0.00 ( 0%) sys   0.03 ( 0%) wall
>  tree DCE              :   0.21 ( 0%) usr   0.00 ( 0%) sys   0.20 ( 0%) wall
>  tree SSA to normal    :   1.14 ( 0%) usr   1.59 (42%) sys   3.17 ( 0%) wall
>  dominance frontiers   :   0.04 ( 0%) usr   0.00 ( 0%) sys   0.04 ( 0%) wall
>  expand                :   0.50 ( 0%) usr   0.05 ( 1%) sys   0.60 ( 0%) wall
>  varconst              :   0.00 ( 0%) usr   0.01 ( 0%) sys   0.00 ( 0%) wall
>  jump                  :   2.71 ( 0%) usr   0.02 ( 1%) sys   2.72 ( 0%) wall
>  CSE                   :   1.28 ( 0%) usr   0.00 ( 0%) sys   1.31 ( 0%) wall
>  global CSE            :   4.17 ( 0%) usr   0.39 (10%) sys   4.55 ( 0%) wall
>  loop analysis         :   0.05 ( 0%) usr   0.00 ( 0%) sys   0.03 ( 0%) wall
>  bypass jumps          :   0.61 ( 0%) usr   0.07 ( 2%) sys   0.68 ( 0%) wall
>  CSE 2                 :   0.38 ( 0%) usr   0.00 ( 0%) sys   0.37 ( 0%) wall
>  branch prediction     :   1.76 ( 0%) usr   0.00 ( 0%) sys   1.74 ( 0%) wall
>  flow analysis         :   0.07 ( 0%) usr   0.00 ( 0%) sys   0.06 ( 0%) wall
>  combiner              :   9.36 ( 1%) usr   0.00 ( 0%) sys   9.36 ( 1%) wall
>  if-conversion         :   3.28 ( 0%) usr   0.00 ( 0%) sys   3.29 ( 0%) wall
>  regmove               :   0.17 ( 0%) usr   0.00 ( 0%) sys   0.17 ( 0%) wall
>  mode switching        :   0.01 ( 0%) usr   0.00 ( 0%) sys   0.00 ( 0%) wall
>  local alloc           :   0.36 ( 0%) usr   0.00 ( 0%) sys   0.37 ( 0%) wall
>  global alloc          :  16.83 ( 2%) usr   0.00 ( 0%) sys  16.83 ( 2%) wall
>  reload CSE regs       :   2.04 ( 0%) usr   0.01 ( 0%) sys   2.04 ( 0%) wall
>  flow 2                :   0.27 ( 0%) usr   0.00 ( 0%) sys   0.29 ( 0%) wall
>  if-conversion 2       :   1.15 ( 0%) usr   0.00 ( 0%) sys   1.16 ( 0%) wall
>  peephole 2            :   0.10 ( 0%) usr   0.00 ( 0%) sys   0.10 ( 0%) wall
>  rename registers      :   3.74 ( 0%) usr   0.02 ( 1%) sys   3.76 ( 0%) wall
>  scheduling 2          :  31.91 ( 3%) usr   0.00 ( 0%) sys  31.90 ( 3%) wall
>  reorder blocks        :   0.17 ( 0%) usr   0.00 ( 0%) sys   0.18 ( 0%) wall
>  shorten branches      :   0.12 ( 0%) usr   0.00 ( 0%) sys   0.11 ( 0%) wall
>  final                 :   0.23 ( 0%) usr   0.01 ( 0%) sys   0.25 ( 0%) wall
>  rest of compilation   :   0.69 ( 0%) usr   0.00 ( 0%) sys   0.71 ( 0%) wall
>  TOTAL                 : 943.25             3.79           960.50
>
>
> Clearly PRE is still doing something that's not terribly intelligent given
> that PRE + the increase the GC time accounts for 90% of the total
> compilation time for this file.

As I said, it's being worked on.

This also looks like it was done with checking on.
Please turn checking off and try again.

Checking now changes the GC heuristics so that they aren't tuned to the
machine (it's 30/4096 now, IIRC).

This causes an incredible number of collections to occur that wouldn't
have occurred before.

Even without checking, however, the GC part of it is *not* something i
can fix alone, however. We ggc_alloc *everything* in tree-ssa, for no good
reason.

For example, the *ops arrays are ggc_alloced, when we *always* know
their lifetime.

--Dan



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]