1*7c3d14c8STreehugger Robot // RUN: %clangxx_msan -O0 %s -c -o %t 2*7c3d14c8STreehugger Robot // RUN: %clangxx_msan -O3 %s -c -o %t 3*7c3d14c8STreehugger Robot 4*7c3d14c8STreehugger Robot // Regression test for MemorySanitizer instrumentation of a select instruction 5*7c3d14c8STreehugger Robot // with vector arguments. 6*7c3d14c8STreehugger Robot 7*7c3d14c8STreehugger Robot #if defined(__x86_64__) 8*7c3d14c8STreehugger Robot #include <emmintrin.h> 9*7c3d14c8STreehugger Robot select(bool b,__m128d c,__m128d d)10*7c3d14c8STreehugger Robot__m128d select(bool b, __m128d c, __m128d d) 11*7c3d14c8STreehugger Robot { 12*7c3d14c8STreehugger Robot return b ? c : d; 13*7c3d14c8STreehugger Robot } 14*7c3d14c8STreehugger Robot #elif defined (__mips64) || defined (__powerpc64__) 15*7c3d14c8STreehugger Robot typedef double __w64d __attribute__ ((vector_size(16))); 16*7c3d14c8STreehugger Robot select(bool b,__w64d c,__w64d d)17*7c3d14c8STreehugger Robot__w64d select(bool b, __w64d c, __w64d d) 18*7c3d14c8STreehugger Robot { 19*7c3d14c8STreehugger Robot return b ? c : d; 20*7c3d14c8STreehugger Robot } 21*7c3d14c8STreehugger Robot #endif 22