This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/79047] New: loop annotation ignored in templated function
- From: "fwinter at jlab dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Tue, 10 Jan 2017 18:13:36 +0000
- Subject: [Bug c++/79047] New: loop annotation ignored in templated function
- Auto-submitted: auto-generated
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.)