Serious code size regression from 3.0.2 to now

tm tm@mail.kloo.net
Thu Jul 18 21:53:00 GMT 2002


On Thu, 18 Jul 2002, Joern Rennecke wrote:

> tm wrote:
> > Basically, GCC is now generating HUGE groups of jump instructions which
> > are aligned to 32-byte boundaries.
> 
> Was it not generating these lone jump instructions before,
> or did it align them less?

I think this is what's happening:

1. The function has a large looop in it, which is slightly larger than the
   relative branch span.

2. The branch from the tail to the head doesn't reach in a single relative
   branch.

3. GCC generates a cache-aligned helper branch instruction and
   significantly increases the size of the loop body.

4. This causes other relative branches to go out of range.

5. Repeat steps 3 and 4 several dozen times.

The map_fog.i also takes a verrry long time to compile, I suspect it's
because the function is rescanned 94 times for branches which are out of
range?

Toshi




More information about the Gcc-bugs mailing list