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 c++/79047] New: loop annotation ignored in templated function


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79047

            Bug ID: 79047
           Summary: loop annotation ignored in templated function
           Product: gcc
           Version: 5.4.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: fwinter at jlab dot org
  Target Milestone: ---

Created attachment 40496
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=40496&action=edit
exploit

#pragma GCC ivdep
is ignored in a templated function:

simple.cc: In member function ‘void VectorT<T>::add(const VectorT<T>&) [with T
= float]’:
simple.cc:37:20: warning: ignoring loop annotation
     for( int x = 0 ; x < r.count() ; x++ ) {


simple.cc:37:20: note: loop vectorized
simple.cc:37:20: note: loop versioned for vectorization because of possible
aliasing
simple.cc:37:20: note: loop peeled for vectorization to enhance alignment


I attach an example that demonstrates this behavior. Compiled with

g++ -O3  -fopt-info-vec simple.cc

g++ (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609

The examples also shows that vectorization works for the same function if we
remove the template. Thus, the problem is that the loop annotation is not
passed down to the template instantiation of the function. (Otherwise I cannot
explain the behavior as the functions are identical.)

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