This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Scheduling an early complete loop unrolling pass?
- From: Dorit Nuzman <DORIT at il dot ibm dot com>
- To: Ira Rosen <IRAR at il dot ibm dot com>
- Cc: gcc at gcc dot gnu dot org, Paolo Bonzini <paolo dot bonzini at lu dot unisi dot ch>, Richard Guenther <rguenther at suse dot de>, Zdenek Dvorak <rakdver at atrey dot karlin dot mff dot cuni dot cz>
- Date: Tue, 6 Feb 2007 11:55:24 +0200
- Subject: Re: Scheduling an early complete loop unrolling pass?
Ira Rosen/Haifa/IBM wrote on 06/02/2007 11:49:17:
> Dorit Nuzman/Haifa/IBM wrote on 05/02/2007 21:13:40:
>
> > Richard Guenther <rguenther@suse.de> wrote on 05/02/2007 17:59:00:
> >
...
> >
> > That's going to change once this project goes in: "(3.2) Straight-
> > line code vectorization" from http://gcc.gnu.
> > org/wiki/AutovectBranchOptimizations. In fact, I think in autovect-
> > branch, if you unroll the above loop it should get vectorized
> > already. Ira - is that really the case?
>
> The completely unrolled loop will not get vectorized because the
> code will not be inside any loop (and our SLP implementation will
> focus, at least as a first step, on loops).
Ah, right... I wonder if we can keep the loop structure in place, even
after completely unrolling the loop - I mean the 'struct loop' in
'current_loops' (not the actual CFG), so that the "SLP in loops" would have
a chance to at least consider vectorizing this "loop". Zdenek - what do you
say?
thanks,
dorit
> The following will get vectorized (without permutation on autovect
> branch, and with redundant permutation on mainline):
>
> for (i = 0; i < n; i++)
> {
> v[4*i] = 0.0;
> v[4*i + 1] = 0.0;
> v[4*i + 2] = 0.0;
> v[4*i + 3] = 0.0;
> }
>
> The original completely unrolled loop will get vectorized if it is
> encapsulated in an outer-loop, like so:
>
> for (j=0; j<n; j++)
> {
> for (i = 0; i < 4; i++)
> v[i] = 0.0;
> v += 4;
> }
>
> Ira