SPEC2000 comparison of LLVM-3.2 and coming GCC4.8 on x86/x86-64

Xinliang David Li davidxl@google.com
Thu Feb 7 18:16:00 GMT 2013


On Thu, Feb 7, 2013 at 9:28 AM, David Edelsohn <dje.gcc@gmail.com> wrote:
> On Thu, Feb 7, 2013 at 11:09 AM, Richard Biener
> <richard.guenther@gmail.com> wrote:
>
>> Also note that for SPEC -funroll-loops helps GCC (yes ... we don't
>> enable that by default at -O3, we probably should).
>
> Richi,
>
> Are you suggesting enabling -funroll-loops by default at -O3?  When I
> checked earlier this year, GCC was too aggressive with loop unrolling
> on non-numerically-intensive code and that option was not uniformly
> beneficial, unfortunately.  It would be a good change if GCC's
> unrolling heuristics were better.

yes, GCC's unroller behavior is at two extremes -- tree level full
unroller is too conservative, while rtl unroller is too aggressive
(e.g, in cases where ICC unroll 2 times, GCC unrolls by 9 -- even when
the body contains conditional branches and the trip count is a small
constant (e.g. 100).

For comparison. ICC turns on loop unrolling at O3 -- but it does it
conservatively compared with GCC's behavior with -funroll-loops.  Full
unrolling is turned on at O2 and above for all ICC, LLCM, and GCC, but
GCC's one is almost useless -- it does not allow any code growth at O2
which means it only kicks in for tiny loops with very small trip
count. Both ICC and LLVM are more aggressive at O2.

David

>
> Thanks, David



More information about the Gcc mailing list