This is the mail archive of the gcc-help@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]

Re: target specific option mismatch?


Hi,

On Friday 15 April 2011 16:50:37 Ian Lance Taylor wrote:
> Matthias Kretz <kretz@compeng.uni-frankfurt.de> writes:
> > #define VC_WORKAROUND
> > __attribute__((optimize("no-tree-vectorize"),target("no- xop")))
> > 
> > template<> inline Vector<T> &VC_WORKAROUND
> > VectorBase<T>::operator>>=(const VectorBase<T> &x)
> > {
> > 
> >     for_all_vector_entries(i,
> >     
> >             d.m(i) >>= x.d.m(i);
> >             );
> >     
> >     return *static_cast<Vector<T> *>(this);
> > 
> > }
> > 
> > vector.tcc:286:1: sorry, unimplemented: inlining failed in call to
> > âVc::SSE::Vector<T>& Vc::SSE::VectorBase<T>::operator<<=(const
> > Vc::SSE::VectorBase<T>&) [with T = int]â: target specific option mismatch
> 
> I have no suggestions for a workaround, but I don't think this should
> fail with an error like this for a function that does not have the
> always_inline attribute.  It should just not inline, and give a warning
> with -Winline.  Please consider opening a bug report.  Thanks.

How about
#define VC_WORKAROUND_IN
#define VC_WORKAROUND __attribute__((optimize("no-tree-vectorize"),target("no-
xop"),weak)

template<> VC_WORKAROUND_IN Vector<T> &VC_WORKAROUND 
VectorBase<T>::operator>>=(const VectorBase<T> &x) {

AFAIU the weak attribute is required. Otherwise, since this function is 
defined in a header, one would get link errors if the function is used with 
the same T in more than one compilation unit, no?

Regards,
	Matthias

-- 
Dipl.-Phys. Matthias Kretz
http://compeng.uni-frankfurt.de/?mkretz

SIMD easy and portable: http://compeng.uni-frankfurt.de/?vc


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