xref: /aosp_15_r20/external/compiler-rt/test/msan/vector_select.cc (revision 7c3d14c8b49c529e04be81a3ce6f5cc23712e4c6)
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