This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug tree-optimization/33244] Missed opportunities for vectorization due to PRE



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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]