[Bug optimization/2692] excessive compile time with optimization

pinskia at gcc dot gnu dot org gcc-bugzilla@gcc.gnu.org
Sun Nov 23 08:24:00 GMT 2003


------- Additional Comments From pinskia at gcc dot gnu dot org  2003-11-23 08:24 -------
It is cool that -O3 and -O2 are faster than -O1 (unit-at-a-time causes this)
The time has migrated to rename (for -O3 at least) registers on the mainline:
-O3 -fno-web:
Execution times (seconds)
 garbage collection    :   1.78 ( 2%) usr   0.01 ( 0%) sys   2.76 ( 2%) wall
 callgraph construction:   0.09 ( 0%) usr   0.02 ( 1%) sys   0.34 ( 0%) wall
 cfg construction      :   0.15 ( 0%) usr   0.00 ( 0%) sys   0.19 ( 0%) wall
 cfg cleanup           :   0.02 ( 0%) usr   0.00 ( 0%) sys   0.02 ( 0%) wall
 trivially dead code   :   0.34 ( 0%) usr   0.02 ( 1%) sys   0.70 ( 1%) wall
 life analysis         :   2.81 ( 3%) usr   0.00 ( 0%) sys   3.02 ( 3%) wall
 life info update      :   1.07 ( 1%) usr   0.02 ( 1%) sys   1.30 ( 1%) wall
 alias analysis        :   0.45 ( 0%) usr   0.05 ( 2%) sys   0.71 ( 1%) wall
 register scan         :   0.28 ( 0%) usr   0.00 ( 0%) sys   0.33 ( 0%) wall
 rebuild jump labels   :   0.10 ( 0%) usr   0.00 ( 0%) sys   0.13 ( 0%) wall
 preprocessing         :   0.05 ( 0%) usr   0.04 ( 2%) sys   0.15 ( 0%) wall
 parser                :   0.65 ( 1%) usr   0.20 ( 9%) sys   1.54 ( 1%) wall
 name lookup           :   0.16 ( 0%) usr   0.44 (19%) sys   0.65 ( 1%) wall
 expand                :   0.91 ( 1%) usr   0.12 ( 5%) sys   3.07 ( 3%) wall
 integration           :   1.11 ( 1%) usr   0.09 ( 4%) sys   1.55 ( 1%) wall
 jump                  :   0.07 ( 0%) usr   0.00 ( 0%) sys   0.09 ( 0%) wall
 CSE                   :   3.09 ( 3%) usr   0.07 ( 3%) sys   3.85 ( 3%) wall
 loop analysis         :   0.01 ( 0%) usr   0.00 ( 0%) sys   0.02 ( 0%) wall
 CSE 2                 :   0.92 ( 1%) usr   0.02 ( 1%) sys   1.02 ( 1%) wall
 branch prediction     :   0.04 ( 0%) usr   0.00 ( 0%) sys   0.06 ( 0%) wall
 flow analysis         :   0.02 ( 0%) usr   0.00 ( 0%) sys   0.03 ( 0%) wall
 combiner              :  15.43 (16%) usr   0.13 ( 6%) sys  18.74 (16%) wall
 if-conversion         :   0.01 ( 0%) usr   0.00 ( 0%) sys   0.00 ( 0%) wall
 regmove               :   0.40 ( 0%) usr   0.01 ( 0%) sys   0.41 ( 0%) wall
 scheduling            :   8.13 ( 8%) usr   0.46 (20%) sys   9.42 ( 8%) wall
 local alloc           :   1.21 ( 1%) usr   0.02 ( 1%) sys   1.30 ( 1%) wall
 global alloc          :   2.52 ( 3%) usr   0.08 ( 3%) sys   2.72 ( 2%) wall
 reload CSE regs       :   0.94 ( 1%) usr   0.00 ( 0%) sys   0.97 ( 1%) wall
 flow 2                :   0.05 ( 0%) usr   0.00 ( 0%) sys   0.05 ( 0%) wall
 rename registers      :  51.52 (53%) usr   0.07 ( 3%) sys  56.65 (48%) wall
 scheduling 2          :   1.63 ( 2%) usr   0.39 (17%) sys   4.27 ( 4%) wall
 shorten branches      :   0.09 ( 0%) usr   0.01 ( 0%) sys   0.12 ( 0%) wall
 final                 :   0.19 ( 0%) usr   0.02 ( 1%) sys   0.22 ( 0%) wall
 rest of compilation   :   0.45 ( 0%) usr   0.01 ( 0%) sys   0.50 ( 0%) wall
 TOTAL                 :  96.78             2.33           116.99

-O0:
Execution times (seconds)
 garbage collection    :   0.13 ( 3%) usr   0.00 ( 0%) sys   0.14 ( 2%) wall
 cfg construction      :   0.04 ( 1%) usr   0.00 ( 0%) sys   0.02 ( 0%) wall
 trivially dead code   :   0.03 ( 1%) usr   0.00 ( 0%) sys   0.07 ( 1%) wall
 life analysis         :   0.41 (10%) usr   0.00 ( 0%) sys   0.50 ( 8%) wall
 life info update      :   0.21 ( 5%) usr   0.00 ( 0%) sys   0.23 ( 4%) wall
 register scan         :   0.05 ( 1%) usr   0.00 ( 0%) sys   0.05 ( 1%) wall
 rebuild jump labels   :   0.01 ( 0%) usr   0.00 ( 0%) sys   0.04 ( 1%) wall
 preprocessing         :   0.04 ( 1%) usr   0.07 ( 9%) sys   0.11 ( 2%) wall
 parser                :   0.68 (16%) usr   0.18 (22%) sys   0.78 (12%) wall
 name lookup           :   0.19 ( 5%) usr   0.45 (56%) sys   0.78 (12%) wall
 expand                :   0.22 ( 5%) usr   0.00 ( 0%) sys   0.26 ( 4%) wall
 integration           :   0.08 ( 2%) usr   0.00 ( 0%) sys   0.09 ( 1%) wall
 jump                  :   0.00 ( 0%) usr   0.01 ( 1%) sys   0.00 ( 0%) wall
 flow analysis         :   0.04 ( 1%) usr   0.00 ( 0%) sys   0.02 ( 0%) wall
 local alloc           :   0.73 (18%) usr   0.02 ( 3%) sys   1.21 (19%) wall
 global alloc          :   0.76 (18%) usr   0.02 ( 3%) sys   1.11 (18%) wall
 flow 2                :   0.01 ( 0%) usr   0.00 ( 0%) sys   0.00 ( 0%) wall
 shorten branches      :   0.07 ( 2%) usr   0.00 ( 0%) sys   0.07 ( 1%) wall
 final                 :   0.17 ( 4%) usr   0.01 ( 1%) sys   0.35 ( 6%) wall
 rest of compilation   :   0.24 ( 6%) usr   0.00 ( 0%) sys   0.35 ( 6%) wall
 TOTAL                 :   4.15             0.80             6.25

-O1:
Execution times (seconds)
 garbage collection    :   1.23 ( 1%) usr   0.00 ( 0%) sys   1.28 ( 1%) wall
 cfg construction      :   0.13 ( 0%) usr   0.00 ( 0%) sys   0.13 ( 0%) wall
 cfg cleanup           :   0.01 ( 0%) usr   0.00 ( 0%) sys   0.02 ( 0%) wall
 trivially dead code   :   0.32 ( 0%) usr   0.01 ( 1%) sys   0.30 ( 0%) wall
 life analysis         :   3.45 ( 3%) usr   0.02 ( 1%) sys   4.09 ( 4%) wall
 life info update      :   1.02 ( 1%) usr   0.00 ( 0%) sys   1.05 ( 1%) wall
 alias analysis        :   0.41 ( 0%) usr   0.04 ( 3%) sys   0.47 ( 0%) wall
 register scan         :   0.25 ( 0%) usr   0.00 ( 0%) sys   0.28 ( 0%) wall
 rebuild jump labels   :   0.08 ( 0%) usr   0.00 ( 0%) sys   0.08 ( 0%) wall
 preprocessing         :   0.05 ( 0%) usr   0.07 ( 5%) sys   0.16 ( 0%) wall
 parser                :   0.61 ( 1%) usr   0.18 (13%) sys   0.75 ( 1%) wall
 name lookup           :   0.37 ( 0%) usr   0.34 (25%) sys   0.76 ( 1%) wall
 expand                :   0.66 ( 1%) usr   0.08 ( 6%) sys   0.74 ( 1%) wall
 integration           :   1.02 ( 1%) usr   0.02 ( 1%) sys   1.07 ( 1%) wall
 jump                  :   0.04 ( 0%) usr   0.01 ( 1%) sys   0.03 ( 0%) wall
 CSE                   :   3.27 ( 3%) usr   0.03 ( 2%) sys   3.39 ( 3%) wall
 loop analysis         :   0.01 ( 0%) usr   0.00 ( 0%) sys   0.02 ( 0%) wall
 branch prediction     :   0.03 ( 0%) usr   0.00 ( 0%) sys   0.03 ( 0%) wall
 flow analysis         :   0.04 ( 0%) usr   0.00 ( 0%) sys   0.04 ( 0%) wall
 combiner              :  81.10 (79%) usr   0.20 (15%) sys  83.87 (77%) wall
 if-conversion         :   0.00 ( 0%) usr   0.00 ( 0%) sys   0.02 ( 0%) wall
 local alloc           :   1.62 ( 2%) usr   0.05 ( 4%) sys   1.67 ( 2%) wall
 global alloc          :   3.68 ( 4%) usr   0.23 (17%) sys   4.02 ( 4%) wall
 reload CSE regs       :   1.37 ( 1%) usr   0.01 ( 1%) sys   1.94 ( 2%) wall
 flow 2                :   0.09 ( 0%) usr   0.00 ( 0%) sys   0.20 ( 0%) wall
 rename registers      :   0.47 ( 0%) usr   0.00 ( 0%) sys   0.60 ( 1%) wall
 shorten branches      :   0.17 ( 0%) usr   0.02 ( 1%) sys   0.23 ( 0%) wall
 final                 :   0.43 ( 0%) usr   0.01 ( 1%) sys   0.61 ( 1%) wall
 rest of compilation   :   0.75 ( 1%) usr   0.02 ( 1%) sys   0.80 ( 1%) wall
 TOTAL                 : 102.71             1.37           108.74

-O2:
Execution times (seconds)
 garbage collection    :   1.69 ( 4%) usr   0.00 ( 0%) sys   2.63 ( 4%) wall
 callgraph construction:   0.08 ( 0%) usr   0.02 ( 1%) sys   0.11 ( 0%) wall
 callgraph optimization:   0.01 ( 0%) usr   0.00 ( 0%) sys   0.00 ( 0%) wall
 cfg construction      :   0.13 ( 0%) usr   0.00 ( 0%) sys   0.13 ( 0%) wall
 cfg cleanup           :   0.02 ( 0%) usr   0.00 ( 0%) sys   0.03 ( 0%) wall
 trivially dead code   :   0.34 ( 1%) usr   0.01 ( 0%) sys   0.38 ( 1%) wall
 life analysis         :   2.88 ( 6%) usr   0.03 ( 1%) sys   3.48 ( 6%) wall
 life info update      :   0.97 ( 2%) usr   0.00 ( 0%) sys   1.09 ( 2%) wall
 alias analysis        :   0.44 ( 1%) usr   0.07 ( 3%) sys   0.75 ( 1%) wall
 register scan         :   0.24 ( 1%) usr   0.01 ( 0%) sys   0.25 ( 0%) wall
 rebuild jump labels   :   0.10 ( 0%) usr   0.00 ( 0%) sys   0.12 ( 0%) wall
 preprocessing         :   0.07 ( 0%) usr   0.08 ( 4%) sys   0.13 ( 0%) wall
 parser                :   0.55 ( 1%) usr   0.14 ( 6%) sys   0.82 ( 1%) wall
 name lookup           :   0.27 ( 1%) usr   0.43 (19%) sys   0.63 ( 1%) wall
 expand                :   0.73 ( 2%) usr   0.05 ( 2%) sys   0.81 ( 1%) wall
 integration           :   1.04 ( 2%) usr   0.14 ( 6%) sys   1.24 ( 2%) wall
 jump                  :   0.08 ( 0%) usr   0.02 ( 1%) sys   0.08 ( 0%) wall
 CSE                   :   3.13 ( 7%) usr   0.06 ( 3%) sys   4.16 ( 7%) wall
 loop analysis         :   0.01 ( 0%) usr   0.00 ( 0%) sys   0.03 ( 0%) wall
 CSE 2                 :   0.89 ( 2%) usr   0.02 ( 1%) sys   0.99 ( 2%) wall
 branch prediction     :   0.03 ( 0%) usr   0.01 ( 0%) sys   0.04 ( 0%) wall
 flow analysis         :   0.02 ( 0%) usr   0.00 ( 0%) sys   0.03 ( 0%) wall
 combiner              :  15.77 (35%) usr   0.11 ( 5%) sys  18.25 (31%) wall
 if-conversion         :   0.01 ( 0%) usr   0.00 ( 0%) sys   0.01 ( 0%) wall
 regmove               :   0.40 ( 1%) usr   0.00 ( 0%) sys   0.48 ( 1%) wall
 scheduling            :   8.15 (18%) usr   0.47 (21%) sys   9.75 (16%) wall
 local alloc           :   1.28 ( 3%) usr   0.02 ( 1%) sys   1.44 ( 2%) wall
 global alloc          :   2.46 ( 5%) usr   0.10 ( 4%) sys   3.05 ( 5%) wall
 reload CSE regs       :   0.96 ( 2%) usr   0.02 ( 1%) sys   1.17 ( 2%) wall
 flow 2                :   0.04 ( 0%) usr   0.00 ( 0%) sys   0.05 ( 0%) wall
 rename registers      :   0.21 ( 0%) usr   0.00 ( 0%) sys   0.55 ( 1%) wall
 scheduling 2          :   1.32 ( 3%) usr   0.41 (18%) sys   5.31 ( 9%) wall
 shorten branches      :   0.08 ( 0%) usr   0.00 ( 0%) sys   0.09 ( 0%) wall
 final                 :   0.22 ( 0%) usr   0.02 ( 1%) sys   0.89 ( 1%) wall
 rest of compilation   :   0.46 ( 1%) usr   0.00 ( 0%) sys   0.52 ( 1%) wall
 TOTAL                 :  45.16             2.24            59.57

-O1 -funit-at-a-time:

Execution times (seconds)
 garbage collection    :   1.18 ( 4%) usr   0.00 ( 0%) sys   1.22 ( 4%) wall
 callgraph construction:   0.10 ( 0%) usr   0.01 ( 1%) sys   0.10 ( 0%) wall
 cfg construction      :   0.11 ( 0%) usr   0.00 ( 0%) sys   0.12 ( 0%) wall
 cfg cleanup           :   0.02 ( 0%) usr   0.00 ( 0%) sys   0.02 ( 0%) wall
 trivially dead code   :   0.22 ( 1%) usr   0.00 ( 0%) sys   0.21 ( 1%) wall
 life analysis         :   2.70 ( 9%) usr   0.02 ( 2%) sys   2.75 ( 8%) wall
 life info update      :   0.54 ( 2%) usr   0.00 ( 0%) sys   0.56 ( 2%) wall
 alias analysis        :   0.27 ( 1%) usr   0.01 ( 1%) sys   0.31 ( 1%) wall
 register scan         :   0.17 ( 1%) usr   0.00 ( 0%) sys   0.17 ( 1%) wall
 rebuild jump labels   :   0.07 ( 0%) usr   0.00 ( 0%) sys   0.07 ( 0%) wall
 preprocessing         :   0.01 ( 0%) usr   0.12 (11%) sys   0.12 ( 0%) wall
 parser                :   0.51 ( 2%) usr   0.15 (14%) sys   0.81 ( 2%) wall
 name lookup           :   0.34 ( 1%) usr   0.38 (35%) sys   0.70 ( 2%) wall
 expand                :   0.71 ( 2%) usr   0.07 ( 6%) sys   0.78 ( 2%) wall
 integration           :   1.11 ( 4%) usr   0.08 ( 7%) sys   1.21 ( 4%) wall
 jump                  :   0.03 ( 0%) usr   0.00 ( 0%) sys   0.04 ( 0%) wall
 CSE                   :   2.00 ( 6%) usr   0.05 ( 5%) sys   2.09 ( 6%) wall
 loop analysis         :   0.00 ( 0%) usr   0.00 ( 0%) sys   0.02 ( 0%) wall
 branch prediction     :   0.04 ( 0%) usr   0.00 ( 0%) sys   0.04 ( 0%) wall
 flow analysis         :   0.02 ( 0%) usr   0.00 ( 0%) sys   0.03 ( 0%) wall
 combiner              :  17.04 (54%) usr   0.07 ( 6%) sys  17.57 (53%) wall
 local alloc           :   0.75 ( 2%) usr   0.03 ( 3%) sys   0.80 ( 2%) wall
 global alloc          :   1.80 ( 6%) usr   0.04 ( 4%) sys   1.89 ( 6%) wall
 reload CSE regs       :   0.47 ( 2%) usr   0.00 ( 0%) sys   0.49 ( 1%) wall
 flow 2                :   0.05 ( 0%) usr   0.00 ( 0%) sys   0.04 ( 0%) wall
 rename registers      :   0.23 ( 1%) usr   0.00 ( 0%) sys   0.23 ( 1%) wall
 shorten branches      :   0.08 ( 0%) usr   0.00 ( 0%) sys   0.08 ( 0%) wall
 final                 :   0.18 ( 1%) usr   0.02 ( 2%) sys   0.21 ( 1%) wall
 rest of compilation   :   0.47 ( 2%) usr   0.01 ( 1%) sys   0.47 ( 1%) wall
 TOTAL                 :  31.27             1.09            33.21

-O0 -funit-at-a-time:
Execution times (seconds)
 garbage collection    :   0.14 ( 3%) usr   0.00 ( 0%) sys   0.14 ( 2%) wall
 callgraph construction:   0.10 ( 2%) usr   0.00 ( 0%) sys   0.11 ( 2%) wall
 cfg construction      :   0.02 ( 0%) usr   0.00 ( 0%) sys   0.02 ( 0%) wall
 trivially dead code   :   0.03 ( 1%) usr   0.00 ( 0%) sys   0.02 ( 0%) wall
 life analysis         :   0.42 (10%) usr   0.01 ( 1%) sys   1.09 (15%) wall
 life info update      :   0.21 ( 5%) usr   0.00 ( 0%) sys   0.23 ( 3%) wall
 register scan         :   0.05 ( 1%) usr   0.01 ( 1%) sys   0.04 ( 1%) wall
 rebuild jump labels   :   0.02 ( 0%) usr   0.00 ( 0%) sys   0.04 ( 1%) wall
 preprocessing         :   0.07 ( 2%) usr   0.06 ( 9%) sys   0.09 ( 1%) wall
 parser                :   0.64 (15%) usr   0.15 (22%) sys   0.80 (11%) wall
 name lookup           :   0.25 ( 6%) usr   0.36 (54%) sys   0.71 (10%) wall
 expand                :   0.22 ( 5%) usr   0.01 ( 1%) sys   0.24 ( 3%) wall
 integration           :   0.07 ( 2%) usr   0.01 ( 1%) sys   0.07 ( 1%) wall
 jump                  :   0.00 ( 0%) usr   0.00 ( 0%) sys   0.02 ( 0%) wall
 flow analysis         :   0.02 ( 0%) usr   0.00 ( 0%) sys   0.02 ( 0%) wall
 local alloc           :   0.74 (17%) usr   0.01 ( 1%) sys   0.80 (11%) wall
 global alloc          :   0.74 (17%) usr   0.02 ( 3%) sys   1.25 (17%) wall
 flow 2                :   0.02 ( 0%) usr   0.00 ( 0%) sys   0.01 ( 0%) wall
 shorten branches      :   0.07 ( 2%) usr   0.00 ( 0%) sys   0.08 ( 1%) wall
 final                 :   0.20 ( 5%) usr   0.00 ( 0%) sys   1.01 (14%) wall
 rest of compilation   :   0.29 ( 7%) usr   0.00 ( 0%) sys   0.31 ( 4%) wall
 TOTAL                 :   4.37             0.67             7.16


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=2692



More information about the Gcc-bugs mailing list