This is the mail archive of the gcc-bugs@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: optimization/2001: [3.2/3.3 regression] Inordinately long compile


> 
> http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=2001
> 
> Brad, the last time you confirmed this ugly bug is 5 months ago, do you 
> still see this?  If so, maybe this is an Alpha-specific problem?  On my 
> ol' slow K6-2, I get a very reasonable compile time (with -march=i586 
> -fPIC -O2 -fno-math-errno):
> 
> Execution times (seconds)
...
>  TOTAL                 :   9.66             0.34            11.80

Perhaps you were testing 3.4, where this is fixed?  Or perhaps it requires
a large number of registers before gcc screws up.  Here are the times I
now get, first for the 3.3 branch, then for 3.4:

popov-1734% gcc/cc1 -fPIC -fno-math-errno -O2 -mcpu=ev6 pi.i
 __copysignf copysignf __copysign copysign __fabsf fabsf __fabs fabs __floorf __floor floorf floor ___H__20_pi ___init_proc ____20_pi
Execution times (seconds)
 cfg construction      :   0.24 ( 0%) usr   0.02 ( 3%) sys   0.50 ( 0%) wall
 cfg cleanup           :   0.94 ( 0%) usr   0.00 ( 0%) sys   0.50 ( 0%) wall
 trivially dead code   :   1.23 ( 0%) usr   0.00 ( 0%) sys   2.50 ( 1%) wall
 life analysis         :  13.07 ( 4%) usr   0.00 ( 0%) sys  12.50 ( 4%) wall
 life info update      :   1.95 ( 1%) usr   0.00 ( 0%) sys   3.00 ( 1%) wall
 preprocessing         :   0.06 ( 0%) usr   0.02 ( 4%) sys   0.00 ( 0%) wall
 lexical analysis      :   0.11 ( 0%) usr   0.04 ( 5%) sys   0.00 ( 0%) wall
 parser                :   0.30 ( 0%) usr   0.03 ( 5%) sys   0.50 ( 0%) wall
 expand                :   0.08 ( 0%) usr   0.01 ( 1%) sys   0.00 ( 0%) wall
 varconst              :   0.02 ( 0%) usr   0.00 ( 0%) sys   0.00 ( 0%) wall
 integration           :   0.02 ( 0%) usr   0.00 ( 0%) sys   0.00 ( 0%) wall
 jump                  :   0.60 ( 0%) usr   0.00 ( 0%) sys   0.50 ( 0%) wall
 CSE                   :   7.86 ( 2%) usr   0.00 ( 1%) sys   7.50 ( 2%) wall
 global CSE            :   4.63 ( 1%) usr   0.19 (29%) sys   5.00 ( 2%) wall
 loop analysis         :   0.14 ( 0%) usr   0.00 ( 0%) sys   0.00 ( 0%) wall
 CSE 2                 :   3.78 ( 1%) usr   0.00 ( 0%) sys   3.50 ( 1%) wall
 branch prediction     :   1.52 ( 0%) usr   0.00 ( 1%) sys   1.50 ( 0%) wall
 flow analysis         :   0.20 ( 0%) usr   0.00 ( 0%) sys   0.00 ( 0%) wall
 combiner              :   0.67 ( 0%) usr   0.00 ( 1%) sys   1.00 ( 0%) wall
 if-conversion         :   0.15 ( 0%) usr   0.00 ( 0%) sys   0.00 ( 0%) wall
 regmove               :   0.59 ( 0%) usr   0.00 ( 0%) sys   0.50 ( 0%) wall
 scheduling            : 125.24 (39%) usr   0.03 ( 4%) sys 125.00 (39%) wall
 local alloc           :   1.24 ( 0%) usr   0.00 ( 0%) sys   1.50 ( 0%) wall
 global alloc          :   4.76 ( 1%) usr   0.09 (14%) sys   4.50 ( 1%) wall
 reload CSE regs       : 110.46 (34%) usr   0.11 (16%) sys 110.50 (34%) wall
 flow 2                :   0.74 ( 0%) usr   0.00 ( 0%) sys   1.00 ( 0%) wall
 if-conversion 2       :   0.07 ( 0%) usr   0.00 ( 0%) sys   0.50 ( 0%) wall
 peephole 2            :   0.25 ( 0%) usr   0.00 ( 0%) sys   0.00 ( 0%) wall
 rename registers      :   1.56 ( 0%) usr   0.00 ( 0%) sys   1.50 ( 0%) wall
 scheduling 2          :  35.85 (11%) usr   0.08 (12%) sys  35.50 (11%) wall
 reorder blocks        :   0.04 ( 0%) usr   0.00 ( 0%) sys   0.00 ( 0%) wall
 shorten branches      :   0.39 ( 0%) usr   0.00 ( 0%) sys   0.50 ( 0%) wall
 final                 :   1.37 ( 0%) usr   0.03 ( 4%) sys   1.50 ( 0%) wall
 rest of compilation   :   0.33 ( 0%) usr   0.00 ( 0%) sys   0.00 ( 0%) wall
 TOTAL                 : 320.50             0.67           321.00

gcc/cc1 -fPIC -fno-math-errno -O2 -mcpu=ev6 pi.i
 __copysignf copysignf __copysign copysign __fabsf fabsf __fabs fabs __floorf __floor floorf floor ___H__20_pi ___init_proc ____20_pi
Execution times (seconds)
 cfg construction      :   0.03 ( 1%) usr   0.00 ( 1%) sys   0.03 ( 1%) wall
 cfg cleanup           :   0.10 ( 2%) usr   0.00 ( 0%) sys   0.10 ( 2%) wall
 trivially dead code   :   0.10 ( 2%) usr   0.00 ( 0%) sys   0.10 ( 2%) wall
 life analysis         :   0.19 ( 5%) usr   0.00 ( 0%) sys   0.19 ( 4%) wall
 life info update      :   0.09 ( 2%) usr   0.00 ( 0%) sys   0.09 ( 2%) wall
 alias analysis        :   0.09 ( 2%) usr   0.00 ( 1%) sys   0.09 ( 2%) wall
 register scan         :   0.04 ( 1%) usr   0.00 ( 0%) sys   0.04 ( 1%) wall
 rebuild jump labels   :   0.02 ( 0%) usr   0.00 ( 0%) sys   0.02 ( 0%) wall
 preprocessing         :   0.07 ( 2%) usr   0.02 (12%) sys   0.10 ( 2%) wall
 lexical analysis      :   0.08 ( 2%) usr   0.04 (24%) sys   0.12 ( 3%) wall
 parser                :   0.31 ( 7%) usr   0.03 (19%) sys   0.34 ( 8%) wall
 expand                :   0.08 ( 2%) usr   0.00 ( 3%) sys   0.08 ( 2%) wall
 varconst              :   0.02 ( 0%) usr   0.00 ( 2%) sys   0.02 ( 0%) wall
 integration           :   0.02 ( 1%) usr   0.00 ( 1%) sys   0.02 ( 1%) wall
 jump                  :   0.02 ( 1%) usr   0.00 ( 2%) sys   0.03 ( 1%) wall
 CSE                   :   0.32 ( 8%) usr   0.00 ( 0%) sys   0.32 ( 7%) wall
 global CSE            :   0.59 (14%) usr   0.01 ( 9%) sys   0.61 (14%) wall
 bypass jumps          :   0.12 ( 3%) usr   0.01 ( 4%) sys   0.13 ( 3%) wall
 CSE 2                 :   0.12 ( 3%) usr   0.00 ( 0%) sys   0.12 ( 3%) wall
 branch prediction     :   0.05 ( 1%) usr   0.00 ( 1%) sys   0.05 ( 1%) wall
 combiner              :   0.13 ( 3%) usr   0.00 ( 1%) sys   0.14 ( 3%) wall
 if-conversion         :   0.02 ( 1%) usr   0.00 ( 1%) sys   0.02 ( 1%) wall
 regmove               :   0.05 ( 1%) usr   0.00 ( 0%) sys   0.05 ( 1%) wall
 scheduling            :   0.41 (10%) usr   0.00 ( 2%) sys   0.41 ( 9%) wall
 local alloc           :   0.11 ( 3%) usr   0.00 ( 0%) sys   0.11 ( 3%) wall
 global alloc          :   0.17 ( 4%) usr   0.01 ( 7%) sys   0.18 ( 4%) wall
 reload CSE regs       :   0.21 ( 5%) usr   0.00 ( 3%) sys   0.21 ( 5%) wall
 flow 2                :   0.02 ( 0%) usr   0.00 ( 0%) sys   0.02 ( 0%) wall
 if-conversion 2       :   0.05 ( 1%) usr   0.00 ( 0%) sys   0.05 ( 1%) wall
 peephole 2            :   0.01 ( 0%) usr   0.00 ( 0%) sys   0.01 ( 0%) wall
 rename registers      :   0.08 ( 2%) usr   0.00 ( 0%) sys   0.08 ( 2%) wall
 scheduling 2          :   0.15 ( 3%) usr   0.00 ( 1%) sys   0.15 ( 3%) wall
 reorder blocks        :   0.10 ( 2%) usr   0.01 ( 7%) sys   0.12 ( 3%) wall
 shorten branches      :   0.02 ( 0%) usr   0.00 ( 0%) sys   0.02 ( 0%) wall
 final                 :   0.08 ( 2%) usr   0.00 ( 1%) sys   0.08 ( 2%) wall
 rest of compilation   :   0.10 ( 2%) usr   0.00 ( 0%) sys   0.10 ( 2%) wall
 TOTAL                 :   4.20             0.17             4.37

And the code generated by 3.3 is absolutely horrendous; I put the .s files at

http://www.math.purdue.edu/~lucier/GNATS/GNATS-6/pi-3.3.s.gz

and

http://www.math.purdue.edu/~lucier/GNATS/GNATS-6/pi-3.4.s.gz

The 3.4-generated code is a model of good behavior and decorum ;-).

The patch that fixed this for 3.4 was

http://gcc.gnu.org/ml/gcc-cvs/2003-02/msg00742.html

Perhaps it's in the RedHat 3.2 branch, too.

Brad


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