Home | History | Annotate | Download | only in CodeGen
      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 #include <smmintrin.h>
      5 
      6 __m128 test_loadl_pi(__m128 x, void* y) {
      7   // CHECK: define {{.*}} @test_loadl_pi
      8   // CHECK: load <2 x float>* {{.*}}, align 1{{$}}
      9   // CHECK: shufflevector {{.*}} <4 x i32> <i32 0, i32 1
     10   // CHECK: shufflevector {{.*}} <4 x i32> <i32 4, i32 5, i32 2, i32 3>
     11   return _mm_loadl_pi(x,y);
     12 }
     13 
     14 __m128 test_loadh_pi(__m128 x, void* y) {
     15   // CHECK: define {{.*}} @test_loadh_pi
     16   // CHECK: load <2 x float>* {{.*}}, align 1{{$}}
     17   // CHECK: shufflevector {{.*}} <4 x i32> <i32 0, i32 1
     18   // CHECK: shufflevector {{.*}} <4 x i32> <i32 0, i32 1, i32 4, i32 5>
     19   return _mm_loadh_pi(x,y);
     20 }
     21 
     22 __m128 test_load_ss(void* y) {
     23   // CHECK: define {{.*}} @test_load_ss
     24   // CHECK: load float* {{.*}}, align 1{{$}}
     25   return _mm_load_ss(y);
     26 }
     27 
     28 __m128 test_load1_ps(void* y) {
     29   // CHECK: define {{.*}} @test_load1_ps
     30   // CHECK: load float* {{.*}}, align 1{{$}}
     31   return _mm_load1_ps(y);
     32 }
     33 
     34 void test_store_ss(__m128 x, void* y) {
     35   // CHECK: define void @test_store_ss
     36   // CHECK: store {{.*}} float* {{.*}}, align 1,
     37   _mm_store_ss(y, x);
     38 }
     39 
     40 __m128d test_load1_pd(__m128 x, void* y) {
     41   // CHECK: define {{.*}} @test_load1_pd
     42   // CHECK: load double* {{.*}}, align 1{{$}}
     43   return _mm_load1_pd(y);
     44 }
     45 
     46 __m128d test_loadr_pd(__m128 x, void* y) {
     47   // CHECK: define {{.*}} @test_loadr_pd
     48   // CHECK: load <2 x double>* {{.*}}, align 16{{$}}
     49   return _mm_loadr_pd(y);
     50 }
     51 
     52 __m128d test_load_sd(void* y) {
     53   // CHECK: define {{.*}} @test_load_sd
     54   // CHECK: load double* {{.*}}, align 1{{$}}
     55   return _mm_load_sd(y);
     56 }
     57 
     58 __m128d test_loadh_pd(__m128d x, void* y) {
     59   // CHECK: define {{.*}} @test_loadh_pd
     60   // CHECK: load double* {{.*}}, align 1{{$}}
     61   return _mm_loadh_pd(x, y);
     62 }
     63 
     64 __m128d test_loadl_pd(__m128d x, void* y) {
     65   // CHECK: define {{.*}} @test_loadl_pd
     66   // CHECK: load double* {{.*}}, align 1{{$}}
     67   return _mm_loadl_pd(x, y);
     68 }
     69 
     70 void test_store_sd(__m128d x, void* y) {
     71   // CHECK: define void @test_store_sd
     72   // CHECK: store {{.*}} double* {{.*}}, align 1{{$}}
     73   _mm_store_sd(y, x);
     74 }
     75 
     76 void test_store1_pd(__m128d x, void* y) {
     77   // CHECK: define void @test_store1_pd
     78   // CHECK: store {{.*}} double* {{.*}}, align 1{{$}}
     79   // CHECK: store {{.*}} double* {{.*}}, align 1{{$}}
     80   _mm_store1_pd(y, x);
     81 }
     82 
     83 void test_storer_pd(__m128d x, void* y) {
     84   // CHECK: define void @test_storer_pd
     85   // CHECK: store {{.*}} <2 x double>* {{.*}}, align 16{{$}}
     86   _mm_storer_pd(y, x);
     87 }
     88 
     89 void test_storeh_pd(__m128d x, void* y) {
     90   // CHECK: define void @test_storeh_pd
     91   // CHECK: store {{.*}} double* {{.*}}, align 1{{$}}
     92   _mm_storeh_pd(y, x);
     93 }
     94 
     95 void test_storel_pd(__m128d x, void* y) {
     96   // CHECK: define void @test_storel_pd
     97   // CHECK: store {{.*}} double* {{.*}}, align 1{{$}}
     98   _mm_storel_pd(y, x);
     99 }
    100 
    101 __m128i test_loadl_epi64(void* y) {
    102   // CHECK: define {{.*}} @test_loadl_epi64
    103   // CHECK: load i64* {{.*}}, align 1{{$}}
    104   return _mm_loadl_epi64(y);
    105 }
    106 
    107 __m128i test_mm_minpos_epu16(__m128i x) {
    108   // CHECK: define {{.*}} @test_mm_minpos_epu16
    109   // CHECK: @llvm.x86.sse41.phminposuw
    110   return _mm_minpos_epu16(x);
    111 }
    112 
    113 __m128i test_mm_mpsadbw_epu8(__m128i x, __m128i y) {
    114   // CHECK: define {{.*}} @test_mm_mpsadbw_epu8
    115   // CHECK: @llvm.x86.sse41.mpsadbw
    116   return _mm_mpsadbw_epu8(x, y, 1);
    117 }
    118 
    119 __m128 test_mm_dp_ps(__m128 x, __m128 y) {
    120   // CHECK: define {{.*}} @test_mm_dp_ps
    121   // CHECK: @llvm.x86.sse41.dpps
    122   return _mm_dp_ps(x, y, 2);
    123 }
    124 
    125 __m128d test_mm_dp_pd(__m128d x, __m128d y) {
    126   // CHECK: define {{.*}} @test_mm_dp_pd
    127   // CHECK: @llvm.x86.sse41.dppd
    128   return _mm_dp_pd(x, y, 2);
    129 }
    130 
    131 __m128 test_mm_round_ps(__m128 x) {
    132   // CHECK: define {{.*}} @test_mm_round_ps
    133   // CHECK: @llvm.x86.sse41.round.ps
    134   return _mm_round_ps(x, 2);
    135 }
    136 
    137 __m128 test_mm_round_ss(__m128 x, __m128 y) {
    138   // CHECK: define {{.*}} @test_mm_round_ss
    139   // CHECK: @llvm.x86.sse41.round.ss
    140   return _mm_round_ss(x, y, 2);
    141 }
    142 
    143 __m128d test_mm_round_pd(__m128d x) {
    144   // CHECK: define {{.*}} @test_mm_round_pd
    145   // CHECK: @llvm.x86.sse41.round.pd
    146   return _mm_round_pd(x, 2);
    147 }
    148 
    149 __m128d test_mm_round_sd(__m128d x, __m128d y) {
    150   // CHECK: define {{.*}} @test_mm_round_sd
    151   // CHECK: @llvm.x86.sse41.round.sd
    152   return _mm_round_sd(x, y, 2);
    153 }
    154