------- 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