This is the mail archive of the gcc-patches@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]

Compile-time performance and Lengauer/Tarjan dominators computation


This is just a note to point out the performance benefits of this patch

http://gcc.gnu.org/ml/gcc-patches/2000-10/msg00076.html

on large routines with many jumps (e.g., implementations of finite-state
machines using gcc's computed goto).

Without this patch, I get with the CVS sources on a large file of this type:

Execution times (seconds)
 garbage collection    :   1.11 ( 0%) usr   0.00 ( 0%) sys   1.13 ( 0%) wall
 preprocessing         :   0.61 ( 0%) usr   0.13 ( 7%) sys   0.75 ( 0%) wall
 lexical analysis      :   0.71 ( 0%) usr   0.29 (15%) sys   1.01 ( 0%) wall
 parser                :   2.72 ( 1%) usr   0.32 (17%) sys   3.04 ( 1%) wall
 varconst              :   0.10 ( 0%) usr   0.00 ( 0%) sys   0.10 ( 0%) wall
 integration           :   0.00 ( 0%) usr   0.00 ( 0%) sys   0.00 ( 0%) wall
 jump                  :  13.58 ( 5%) usr   0.83 (43%) sys  14.47 ( 5%) wall
 CSE                   :   1.93 ( 1%) usr   0.00 ( 0%) sys   1.93 ( 1%) wall
 global CSE            :   3.22 ( 1%) usr   0.02 ( 1%) sys   3.25 ( 1%) wall
 loop analysis         :   0.16 ( 0%) usr   0.00 ( 0%) sys   0.16 ( 0%) wall
 CSE 2                 :   1.71 ( 1%) usr   0.00 ( 0%) sys   1.72 ( 1%) wall
 flow analysis         :  62.60 (22%) usr   0.04 ( 2%) sys  62.69 (21%) wall
 combiner              :   1.24 ( 0%) usr   0.00 ( 0%) sys   1.24 ( 0%) wall
 if-conversion         :  70.20 (24%) usr   0.06 ( 3%) sys  70.34 (24%) wall
 regmove               :   0.45 ( 0%) usr   0.00 ( 0%) sys   0.45 ( 0%) wall
 scheduling            :   9.82 ( 3%) usr   0.03 ( 2%) sys   9.85 ( 3%) wall
 local alloc           :  12.52 ( 4%) usr   0.00 ( 0%) sys  12.52 ( 4%) wall
 global alloc          :   2.52 ( 1%) usr   0.08 ( 5%) sys   2.61 ( 1%) wall
 reload CSE regs       :  14.65 ( 5%) usr   0.00 ( 0%) sys  14.66 ( 5%) wall
 flow 2                :  12.96 ( 4%) usr   0.00 ( 0%) sys  12.97 ( 4%) wall
 if-conversion 2       :  61.24 (21%) usr   0.03 ( 2%) sys  61.33 (21%) wall
 peephole 2            :   0.12 ( 0%) usr   0.00 ( 0%) sys   0.12 ( 0%) wall
 scheduling 2          :  10.21 ( 4%) usr   0.00 ( 0%) sys  10.21 ( 3%) wall
 reorder blocks        :   1.75 ( 1%) usr   0.00 ( 0%) sys   1.75 ( 1%) wall
 shorten branches      :   0.12 ( 0%) usr   0.00 ( 0%) sys   0.12 ( 0%) wall
 final                 :   3.11 ( 1%) usr   0.03 ( 2%) sys   3.15 ( 1%) wall
 symout                :   0.02 ( 0%) usr   0.00 ( 0%) sys   0.02 ( 0%) wall
 rest of compilation   :   0.70 ( 0%) usr   0.00 ( 0%) sys   0.70 ( 0%) wall
 TOTAL                 : 290.21             1.95           292.44

With this patch, I get

Execution times (seconds)
 garbage collection    :   1.14 ( 1%) usr   0.00 ( 0%) sys   1.15 ( 1%) wall
 preprocessing         :   0.59 ( 1%) usr   0.13 ( 8%) sys   0.73 ( 1%) wall
 lexical analysis      :   0.75 ( 1%) usr   0.28 (16%) sys   1.03 ( 1%) wall
 parser                :   2.71 ( 2%) usr   0.30 (17%) sys   3.01 ( 3%) wall
 varconst              :   0.10 ( 0%) usr   0.00 ( 0%) sys   0.14 ( 0%) wall
 integration           :   0.00 ( 0%) usr   0.00 ( 0%) sys   0.00 ( 0%) wall
 jump                  :  13.59 (12%) usr   0.75 (43%) sys  14.37 (12%) wall
 CSE                   :   1.90 ( 2%) usr   0.00 ( 0%) sys   1.92 ( 2%) wall
 global CSE            :   3.20 ( 3%) usr   0.01 ( 1%) sys   3.21 ( 3%) wall
 loop analysis         :   0.17 ( 0%) usr   0.00 ( 0%) sys   0.17 ( 0%) wall
 CSE 2                 :   1.61 ( 1%) usr   0.00 ( 0%) sys   1.61 ( 1%) wall
 flow analysis         :  16.32 (14%) usr   0.02 ( 2%) sys  16.40 (14%) wall
 combiner              :   1.26 ( 1%) usr   0.00 ( 0%) sys   1.26 ( 1%) wall
 if-conversion         :   4.81 ( 4%) usr   0.04 ( 2%) sys   4.86 ( 4%) wall
 regmove               :   0.47 ( 0%) usr   0.00 ( 0%) sys   0.47 ( 0%) wall
 scheduling            :  10.05 ( 9%) usr   0.02 ( 2%) sys  10.08 ( 9%) wall
 local alloc           :  11.69 (10%) usr   0.00 ( 0%) sys  11.71 (10%) wall
 global alloc          :   2.55 ( 2%) usr   0.09 ( 5%) sys   2.66 ( 2%) wall
 reload CSE regs       :  12.93 (11%) usr   0.00 ( 0%) sys  12.94 (11%) wall
 flow 2                :  12.76 (11%) usr   0.00 ( 0%) sys  12.82 (11%) wall
 if-conversion 2       :   1.57 ( 1%) usr   0.01 ( 1%) sys   1.58 ( 1%) wall
 peephole 2            :   0.12 ( 0%) usr   0.00 ( 0%) sys   0.12 ( 0%) wall
 scheduling 2          :   8.86 ( 8%) usr   0.00 ( 0%) sys   8.88 ( 8%) wall
 reorder blocks        :   1.74 ( 2%) usr   0.00 ( 0%) sys   1.74 ( 1%) wall
 shorten branches      :   0.12 ( 0%) usr   0.00 ( 0%) sys   0.12 ( 0%) wall
 final                 :   3.18 ( 3%) usr   0.02 ( 2%) sys   3.21 ( 3%) wall
 symout                :   0.02 ( 0%) usr   0.00 ( 0%) sys   0.02 ( 0%) wall
 rest of compilation   :   0.73 ( 1%) usr   0.00 ( 0%) sys   0.74 ( 1%) wall
 TOTAL                 : 115.06             1.77           117.36

This is on a dual processor 500 MHz Alpha 21264 running linux.

The system I'm compiling has about 40 files like this, so this one
patch makes a big difference in compile times, i.e., it cuts the
user time by about an hour, the wall time by about half that much.

Brad Lucier

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