1 // RUN: %clang_cc1 -ffreestanding -triple i386-apple-darwin9 -target-cpu pentium4 -target-feature +sse4.1 -g -emit-llvm %s -o - | FileCheck %s 2 3 #include <emmintrin.h> 4 5 __m128 test_loadl_pi(__m128 x, void* y) { 6 // CHECK: define {{.*}} @test_loadl_pi 7 // CHECK: load <2 x float>* {{.*}}, align 1{{$}} 8 // CHECK: shufflevector {{.*}} <4 x i32> <i32 0, i32 1 9 // CHECK: shufflevector {{.*}} <4 x i32> <i32 4, i32 5, i32 2, i32 3> 10 return _mm_loadl_pi(x,y); 11 } 12 13 __m128 test_loadh_pi(__m128 x, void* y) { 14 // CHECK: define {{.*}} @test_loadh_pi 15 // CHECK: load <2 x float>* {{.*}}, align 1{{$}} 16 // CHECK: shufflevector {{.*}} <4 x i32> <i32 0, i32 1 17 // CHECK: shufflevector {{.*}} <4 x i32> <i32 0, i32 1, i32 4, i32 5> 18 return _mm_loadh_pi(x,y); 19 } 20 21 __m128 test_load_ss(void* y) { 22 // CHECK: define {{.*}} @test_load_ss 23 // CHECK: load float* {{.*}}, align 1{{$}} 24 return _mm_load_ss(y); 25 } 26 27 __m128 test_load1_ps(void* y) { 28 // CHECK: define {{.*}} @test_load1_ps 29 // CHECK: load float* {{.*}}, align 1{{$}} 30 return _mm_load1_ps(y); 31 } 32 33 void test_store_ss(__m128 x, void* y) { 34 // CHECK: define void @test_store_ss 35 // CHECK: store {{.*}} float* {{.*}}, align 1, 36 _mm_store_ss(y, x); 37 } 38 39 __m128d test_load1_pd(__m128 x, void* y) { 40 // CHECK: define {{.*}} @test_load1_pd 41 // CHECK: load double* {{.*}}, align 1{{$}} 42 return _mm_load1_pd(y); 43 } 44 45 __m128d test_loadr_pd(__m128 x, void* y) { 46 // CHECK: define {{.*}} @test_loadr_pd 47 // CHECK: load <2 x double>* {{.*}}, align 16{{$}} 48 return _mm_loadr_pd(y); 49 } 50 51 __m128d test_load_sd(void* y) { 52 // CHECK: define {{.*}} @test_load_sd 53 // CHECK: load double* {{.*}}, align 1{{$}} 54 return _mm_load_sd(y); 55 } 56 57 __m128d test_loadh_pd(__m128d x, void* y) { 58 // CHECK: define {{.*}} @test_loadh_pd 59 // CHECK: load double* {{.*}}, align 1{{$}} 60 return _mm_loadh_pd(x, y); 61 } 62 63 __m128d test_loadl_pd(__m128d x, void* y) { 64 // CHECK: define {{.*}} @test_loadl_pd 65 // CHECK: load double* {{.*}}, align 1{{$}} 66 return _mm_loadl_pd(x, y); 67 } 68 69 void test_store_sd(__m128d x, void* y) { 70 // CHECK: define void @test_store_sd 71 // CHECK: store {{.*}} double* {{.*}}, align 1{{$}} 72 _mm_store_sd(y, x); 73 } 74 75 void test_store1_pd(__m128d x, void* y) { 76 // CHECK: define void @test_store1_pd 77 // CHECK: store {{.*}} double* {{.*}}, align 1{{$}} 78 // CHECK: store {{.*}} double* {{.*}}, align 1{{$}} 79 _mm_store1_pd(y, x); 80 } 81 82 void test_storer_pd(__m128d x, void* y) { 83 // CHECK: define void @test_storer_pd 84 // CHECK: store {{.*}} <2 x double>* {{.*}}, align 16{{$}} 85 _mm_storer_pd(y, x); 86 } 87 88 void test_storeh_pd(__m128d x, void* y) { 89 // CHECK: define void @test_storeh_pd 90 // CHECK: store {{.*}} double* {{.*}}, align 1{{$}} 91 _mm_storeh_pd(y, x); 92 } 93 94 void test_storel_pd(__m128d x, void* y) { 95 // CHECK: define void @test_storel_pd 96 // CHECK: store {{.*}} double* {{.*}}, align 1{{$}} 97 _mm_storel_pd(y, x); 98 } 99 100 __m128i test_loadl_epi64(void* y) { 101 // CHECK: define {{.*}} @test_loadl_epi64 102 // CHECK: load i64* {{.*}}, align 1{{$}} 103 return _mm_loadl_epi64(y); 104 } 105