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