On Tue, Nov 27, 2018 at 3:51 PM Jeffrey Walton <noloa...@gmail.com> wrote: > > I've got some self tests failing on PowerPC with GCC 8.2. The program > was compiled with -O1 and -fsanitize=undefined. The program uses > Altivec. A sample finding is shown below. > > ppc_simd.h:965 is a vec_add, and it happens on a unsigned int vector. > We don't use signed vector types. I don't believe overflow can happen > and the algorithm depends on unsigned wrap.
This is kind of weird. The template function below is the one generating the findings. I added two overloads to capture the signed int vectors. My hope was to brick the program and look at the stack. The overloads are never used. I guess this leaves the question, where are the signed types coming from since they are not from our program. template <class T1, class T2> inline T1 VecAdd(const T1 vec1, const T2 vec2) { // ppc_simd.h : 965 return (T1)vec_add(vec1, (T1)vec2); } typedef __vector signed int int32x4_p; inline int32x4_p VecAdd(const int32x4_p vec1, const int32x4_p vec2) { volatile int* p = NULLPTR; *p = 0; return vec_add(vec1, vec2); } #if defined(_ARCH_PWR8) typedef __vector signed long long int64x2_p; inline int64x2_p VecAdd(const int64x2_p vec1, const int64x2_p vec2) { volatile int* p = NULLPTR; *p = 0; return vec_add(vec1, vec2); } #endif _______________________________________________ cfarm-users mailing list cfarm-users@lists.tetaneutral.net https://lists.tetaneutral.net/listinfo/cfarm-users