This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: new benchmark times on alpha
> > > OK, I may take a look at that example.
> > >
> > > Honza
> > > >
> > > > The .i file for the most egregious compile-time problems is at
> > > >
> > > > http://www.math.purdue.edu/~lucier/scheme.i.gz
> > > >
> > > > Brad Lucier
> >
> > It seems to be relatively easy to isolate the problem pass here ;-):
> >
> > popov-15% /export/u10/gcc-3.1/lib/gcc-lib/alphaev6-unknown-linux-gnu/3.1/cc1 -I../../../lib -O2 -W -Wall -Wno-unused -Wdisabled-optimization -fno-math-errno -fno-strict-aliasing -mcpu=ev6 -fomit-frame-pointer scheme.i
> > ___H__20_scheme {GC 22338k -> 5849k} {GC 44113k -> 5438k} {GC 8029k -> 5861k} {GC 8882k -> 6508k} {GC 10519k -> 5394k} {GC 7447k -> 5989k} {GC 12330k -> 6716k} ___init_proc ____20_scheme
> > Execution times (seconds)
> > garbage collection : 0.76 ( 1%) usr 0.02 ( 2%) sys 1.25 ( 1%) wall
> > cfg construction : 0.40 ( 0%) usr 0.00 ( 0%) sys 0.25 ( 0%) wall
> > cfg cleanup : 80.13 (76%) usr 0.00 ( 0%) sys 80.00 (75%) wall
OK, I've reproduced this on alpha cross. The problem is that crossjumping finds about
3000 oppurtunities to optimize that is much more than the old corssjumper did. I believe
this is positive fact. The optimizer appears to behave sanely - needs about 5 iterations
to stabilize.
The profile is:
14.25 21.33 21.33 43511047 0.00 0.00 rtx_renumbered_equal_p
11.20 38.10 16.77 43510736 0.00 0.00 flow_find_cross_jump
7.79 49.76 11.66 87127135 0.00 0.00 onlyjump_p
7.72 61.32 11.56 24390 0.47 3.96 try_crossjump_bb
7.33 72.30 10.98 43554487 0.00 0.00 try_crossjump_to_edge
6.81 82.49 10.19 111131042 0.00 0.00 find_reg_note
4.86 89.77 7.28 87638989 0.00 0.00 side_effects_p
3.14 94.47 4.70 87079198 0.00 0.00 find_reg_equal_equiv_note
1.94 97.38 2.91 763788 0.00 0.00 print_rtx
The CFG consist of 2832 blocks, so giving about 8000000 checks to check crossjumping possibility
each block with each. Since we do have 7 iterations with crossjumping overall, the
40 millions of crossjump checks appears to make sense. I will take a look if I can cut the
number somehow, but I doubt, as I did quite a lot of tricks already.
Perhaps we can add switch to controll crossjumping.
Honza
if the code were checking each basic block with each,