xref: /aosp_15_r20/external/clang/test/CodeGen/sse.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -O3 -triple x86_64-apple-macosx10.8.0 -target-feature +sse4.1 -emit-llvm %s -o - | FileCheck %s
2*67e74705SXin Li // FIXME: This test currently depends on optimization - it should be rewritten to avoid it.
3*67e74705SXin Li 
4*67e74705SXin Li // Don't include mm_malloc.h, it's system specific.
5*67e74705SXin Li #define __MM_MALLOC_H
6*67e74705SXin Li 
7*67e74705SXin Li #include <emmintrin.h>
8*67e74705SXin Li 
9*67e74705SXin Li // Byte-shifts look reversed due to xmm register layout
test_mm_slli_si128(__m128 a)10*67e74705SXin Li __m128 test_mm_slli_si128(__m128 a) {
11*67e74705SXin Li   // CHECK-LABEL: @test_mm_slli_si128
12*67e74705SXin Li   // CHECK: shufflevector <16 x i8> <{{.*}}, i8 0, i8 0, i8 0, i8 0, i8 0>, <16 x i8> {{.*}}, <16 x i32> <i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26>
13*67e74705SXin Li   return _mm_slli_si128(a, 5);
14*67e74705SXin Li }
15*67e74705SXin Li 
test_mm_slli_si128_0(__m128 a)16*67e74705SXin Li __m128 test_mm_slli_si128_0(__m128 a) {
17*67e74705SXin Li   // CHECK-LABEL: @test_mm_slli_si128_0
18*67e74705SXin Li   // CHECK-NOT: shufflevector
19*67e74705SXin Li   return _mm_slli_si128(a, 0);
20*67e74705SXin Li }
21*67e74705SXin Li 
test_mm_slli_si128_16(__m128 a)22*67e74705SXin Li __m128 test_mm_slli_si128_16(__m128 a) {
23*67e74705SXin Li   // CHECK-LABEL: @test_mm_slli_si128_16
24*67e74705SXin Li   // CHECK-NOT: shufflevector
25*67e74705SXin Li   return _mm_slli_si128(a, 16);
26*67e74705SXin Li }
27*67e74705SXin Li 
test_mm_srli_si128(__m128 a)28*67e74705SXin Li __m128 test_mm_srli_si128(__m128 a) {
29*67e74705SXin Li   // CHECK-LABEL: @test_mm_srli_si128
30*67e74705SXin Li   // CHECK: shufflevector <16 x i8> {{.*}}, <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, {{.*}}>, <16 x i32> <i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20>
31*67e74705SXin Li   return _mm_srli_si128(a, 5);
32*67e74705SXin Li }
33*67e74705SXin Li 
test_mm_srli_si128_0(__m128 a)34*67e74705SXin Li __m128 test_mm_srli_si128_0(__m128 a) {
35*67e74705SXin Li   // CHECK-LABEL: @test_mm_srli_si128_0
36*67e74705SXin Li   // CHECK-NOT: shufflevector
37*67e74705SXin Li   return _mm_srli_si128(a, 0);
38*67e74705SXin Li }
39*67e74705SXin Li 
test_mm_srli_si128_16(__m128 a)40*67e74705SXin Li __m128 test_mm_srli_si128_16(__m128 a) {
41*67e74705SXin Li   // CHECK-LABEL: @test_mm_srli_si128_16
42*67e74705SXin Li   // CHECK-NOT: shufflevector
43*67e74705SXin Li   return _mm_srli_si128(a, 16);
44*67e74705SXin Li }
45