This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/33244] Missed opportunities for vectorization due to PRE
- From: "matz at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 7 Sep 2010 14:41:41 -0000
- Subject: [Bug tree-optimization/33244] Missed opportunities for vectorization due to PRE
- References: <bug-33244-7780@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #2 from matz at gcc dot gnu dot org 2010-09-07 14:41 -------
Since the fix for PR44710 we can if-convert the conditions in the inner loop.
With http://gcc.gnu.org/ml/gcc-patches/2010-09/msg00542.html we also
make sure that the latch block isn't filled, which in turn then triggers
the if-conversion. This then reveals the rest of the problems, which are:
* inlining needs to happen (our default parameters don't inline ginteg)
The patch above ensures this by making the functions internal
* a library with vectorized logf needs to be available (libacml_mv for
instance)
The patch above works around this by getting rid of calls to log/sqrt
* loop interchange needs to happen, because in the original testcase
we have:
do i=0,Ng1
do j=0,Ng2
G(i,j) = ...
exactly the wrong way around. Our loop-interchange code is only
capable of vectorizing perfect nests, which here doesn't exist
as LIM and PRE move out some loop invariant expressions from the
inner to the outer loop. If we weren't doing that, that itself would
already prevent vectorization.
The patch above works around this by doing the interchange by hand.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33244