1ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// RUN: %clang_cc1 -ffreestanding -triple x86_64-apple-macosx10.8.0 -target-feature +sse4.1 -emit-llvm %s -o - | FileCheck %s
27c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman
3f0e97dba82a2c3eee716d6032c7a4eb889b01317Manman Ren#include <xmmintrin.h>
47c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman#include <emmintrin.h>
55228982f07d3420672060b2429a797b0cd3e00d5Craig Topper#include <smmintrin.h>
67c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman
7f0e97dba82a2c3eee716d6032c7a4eb889b01317Manman Ren__m128 test_rsqrt_ss(__m128 x) {
8f0e97dba82a2c3eee716d6032c7a4eb889b01317Manman Ren  // CHECK: define {{.*}} @test_rsqrt_ss
9f0e97dba82a2c3eee716d6032c7a4eb889b01317Manman Ren  // CHECK: call <4 x float> @llvm.x86.sse.rsqrt.ss
10f0e97dba82a2c3eee716d6032c7a4eb889b01317Manman Ren  // CHECK: extractelement <4 x float> {{.*}}, i32 0
11f0e97dba82a2c3eee716d6032c7a4eb889b01317Manman Ren  // CHECK: extractelement <4 x float> {{.*}}, i32 1
12f0e97dba82a2c3eee716d6032c7a4eb889b01317Manman Ren  // CHECK: extractelement <4 x float> {{.*}}, i32 2
13f0e97dba82a2c3eee716d6032c7a4eb889b01317Manman Ren  // CHECK: extractelement <4 x float> {{.*}}, i32 3
14f0e97dba82a2c3eee716d6032c7a4eb889b01317Manman Ren  return _mm_rsqrt_ss(x);
15f0e97dba82a2c3eee716d6032c7a4eb889b01317Manman Ren}
16f0e97dba82a2c3eee716d6032c7a4eb889b01317Manman Ren
17f0e97dba82a2c3eee716d6032c7a4eb889b01317Manman Ren__m128 test_rcp_ss(__m128 x) {
18f0e97dba82a2c3eee716d6032c7a4eb889b01317Manman Ren  // CHECK: define {{.*}} @test_rcp_ss
19f0e97dba82a2c3eee716d6032c7a4eb889b01317Manman Ren  // CHECK: call <4 x float> @llvm.x86.sse.rcp.ss
20f0e97dba82a2c3eee716d6032c7a4eb889b01317Manman Ren  // CHECK: extractelement <4 x float> {{.*}}, i32 0
21f0e97dba82a2c3eee716d6032c7a4eb889b01317Manman Ren  // CHECK: extractelement <4 x float> {{.*}}, i32 1
22f0e97dba82a2c3eee716d6032c7a4eb889b01317Manman Ren  // CHECK: extractelement <4 x float> {{.*}}, i32 2
23f0e97dba82a2c3eee716d6032c7a4eb889b01317Manman Ren  // CHECK: extractelement <4 x float> {{.*}}, i32 3
24f0e97dba82a2c3eee716d6032c7a4eb889b01317Manman Ren  return _mm_rcp_ss(x);
25f0e97dba82a2c3eee716d6032c7a4eb889b01317Manman Ren}
26f0e97dba82a2c3eee716d6032c7a4eb889b01317Manman Ren
27f0e97dba82a2c3eee716d6032c7a4eb889b01317Manman Ren__m128 test_sqrt_ss(__m128 x) {
28f0e97dba82a2c3eee716d6032c7a4eb889b01317Manman Ren  // CHECK: define {{.*}} @test_sqrt_ss
29f0e97dba82a2c3eee716d6032c7a4eb889b01317Manman Ren  // CHECK: call <4 x float> @llvm.x86.sse.sqrt.ss
30f0e97dba82a2c3eee716d6032c7a4eb889b01317Manman Ren  // CHECK: extractelement <4 x float> {{.*}}, i32 0
31f0e97dba82a2c3eee716d6032c7a4eb889b01317Manman Ren  // CHECK: extractelement <4 x float> {{.*}}, i32 1
32f0e97dba82a2c3eee716d6032c7a4eb889b01317Manman Ren  // CHECK: extractelement <4 x float> {{.*}}, i32 2
33f0e97dba82a2c3eee716d6032c7a4eb889b01317Manman Ren  // CHECK: extractelement <4 x float> {{.*}}, i32 3
34f0e97dba82a2c3eee716d6032c7a4eb889b01317Manman Ren  return _mm_sqrt_ss(x);
35f0e97dba82a2c3eee716d6032c7a4eb889b01317Manman Ren}
36f0e97dba82a2c3eee716d6032c7a4eb889b01317Manman Ren
377c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman__m128 test_loadl_pi(__m128 x, void* y) {
387c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  // CHECK: define {{.*}} @test_loadl_pi
397c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  // CHECK: load <2 x float>* {{.*}}, align 1{{$}}
407c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  // CHECK: shufflevector {{.*}} <4 x i32> <i32 0, i32 1
417c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  // CHECK: shufflevector {{.*}} <4 x i32> <i32 4, i32 5, i32 2, i32 3>
427c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  return _mm_loadl_pi(x,y);
437c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman}
447c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman
457c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman__m128 test_loadh_pi(__m128 x, void* y) {
467c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  // CHECK: define {{.*}} @test_loadh_pi
477c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  // CHECK: load <2 x float>* {{.*}}, align 1{{$}}
487c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  // CHECK: shufflevector {{.*}} <4 x i32> <i32 0, i32 1
497c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  // CHECK: shufflevector {{.*}} <4 x i32> <i32 0, i32 1, i32 4, i32 5>
507c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  return _mm_loadh_pi(x,y);
517c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman}
527c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman
537c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman__m128 test_load_ss(void* y) {
547c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  // CHECK: define {{.*}} @test_load_ss
557c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  // CHECK: load float* {{.*}}, align 1{{$}}
567c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  return _mm_load_ss(y);
577c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman}
587c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman
597c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman__m128 test_load1_ps(void* y) {
607c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  // CHECK: define {{.*}} @test_load1_ps
617c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  // CHECK: load float* {{.*}}, align 1{{$}}
627c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  return _mm_load1_ps(y);
637c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman}
647c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman
657c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedmanvoid test_store_ss(__m128 x, void* y) {
6693ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin  // CHECK-LABEL: define void @test_store_ss
67ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  // CHECK: store {{.*}} float* {{.*}}, align 1{{$}}
687c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  _mm_store_ss(y, x);
697c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman}
707c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman
717c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman__m128d test_load1_pd(__m128 x, void* y) {
727c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  // CHECK: define {{.*}} @test_load1_pd
737c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  // CHECK: load double* {{.*}}, align 1{{$}}
747c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  return _mm_load1_pd(y);
757c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman}
767c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman
777c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman__m128d test_loadr_pd(__m128 x, void* y) {
787c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  // CHECK: define {{.*}} @test_loadr_pd
797c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  // CHECK: load <2 x double>* {{.*}}, align 16{{$}}
807c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  return _mm_loadr_pd(y);
817c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman}
827c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman
837c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman__m128d test_load_sd(void* y) {
847c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  // CHECK: define {{.*}} @test_load_sd
857c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  // CHECK: load double* {{.*}}, align 1{{$}}
867c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  return _mm_load_sd(y);
877c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman}
887c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman
897c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman__m128d test_loadh_pd(__m128d x, void* y) {
907c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  // CHECK: define {{.*}} @test_loadh_pd
917c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  // CHECK: load double* {{.*}}, align 1{{$}}
927c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  return _mm_loadh_pd(x, y);
937c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman}
947c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman
957c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman__m128d test_loadl_pd(__m128d x, void* y) {
967c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  // CHECK: define {{.*}} @test_loadl_pd
977c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  // CHECK: load double* {{.*}}, align 1{{$}}
987c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  return _mm_loadl_pd(x, y);
997c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman}
1007c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman
1017c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedmanvoid test_store_sd(__m128d x, void* y) {
10293ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin  // CHECK-LABEL: define void @test_store_sd
1037c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  // CHECK: store {{.*}} double* {{.*}}, align 1{{$}}
1047c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  _mm_store_sd(y, x);
1057c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman}
1067c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman
1077c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedmanvoid test_store1_pd(__m128d x, void* y) {
10893ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin  // CHECK-LABEL: define void @test_store1_pd
1097c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  // CHECK: store {{.*}} double* {{.*}}, align 1{{$}}
1107c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  // CHECK: store {{.*}} double* {{.*}}, align 1{{$}}
1117c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  _mm_store1_pd(y, x);
1127c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman}
1137c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman
1147c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedmanvoid test_storer_pd(__m128d x, void* y) {
11593ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin  // CHECK-LABEL: define void @test_storer_pd
1167c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  // CHECK: store {{.*}} <2 x double>* {{.*}}, align 16{{$}}
1177c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  _mm_storer_pd(y, x);
1187c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman}
1197c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman
1207c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedmanvoid test_storeh_pd(__m128d x, void* y) {
12193ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin  // CHECK-LABEL: define void @test_storeh_pd
1227c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  // CHECK: store {{.*}} double* {{.*}}, align 1{{$}}
1237c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  _mm_storeh_pd(y, x);
1247c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman}
1257c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman
1267c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedmanvoid test_storel_pd(__m128d x, void* y) {
12793ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin  // CHECK-LABEL: define void @test_storel_pd
1287c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  // CHECK: store {{.*}} double* {{.*}}, align 1{{$}}
1297c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  _mm_storel_pd(y, x);
1307c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman}
1317c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman
1327c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman__m128i test_loadl_epi64(void* y) {
1337c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  // CHECK: define {{.*}} @test_loadl_epi64
1347c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  // CHECK: load i64* {{.*}}, align 1{{$}}
1357c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman  return _mm_loadl_epi64(y);
1367c06f6b319b272ea9e2df8ef03793c7b89e8dfabEli Friedman}
1375228982f07d3420672060b2429a797b0cd3e00d5Craig Topper
1385228982f07d3420672060b2429a797b0cd3e00d5Craig Topper__m128i test_mm_minpos_epu16(__m128i x) {
1395aeaca3fa755cddba583842e7a0c3e168bf71b4dCraig Topper  // CHECK: define {{.*}} @test_mm_minpos_epu16
1405aeaca3fa755cddba583842e7a0c3e168bf71b4dCraig Topper  // CHECK: @llvm.x86.sse41.phminposuw
1415228982f07d3420672060b2429a797b0cd3e00d5Craig Topper  return _mm_minpos_epu16(x);
1425228982f07d3420672060b2429a797b0cd3e00d5Craig Topper}
1435aeaca3fa755cddba583842e7a0c3e168bf71b4dCraig Topper
1445aeaca3fa755cddba583842e7a0c3e168bf71b4dCraig Topper__m128i test_mm_mpsadbw_epu8(__m128i x, __m128i y) {
1455aeaca3fa755cddba583842e7a0c3e168bf71b4dCraig Topper  // CHECK: define {{.*}} @test_mm_mpsadbw_epu8
1465aeaca3fa755cddba583842e7a0c3e168bf71b4dCraig Topper  // CHECK: @llvm.x86.sse41.mpsadbw
1475aeaca3fa755cddba583842e7a0c3e168bf71b4dCraig Topper  return _mm_mpsadbw_epu8(x, y, 1);
1485aeaca3fa755cddba583842e7a0c3e168bf71b4dCraig Topper}
1495aeaca3fa755cddba583842e7a0c3e168bf71b4dCraig Topper
1505aeaca3fa755cddba583842e7a0c3e168bf71b4dCraig Topper__m128 test_mm_dp_ps(__m128 x, __m128 y) {
1515aeaca3fa755cddba583842e7a0c3e168bf71b4dCraig Topper  // CHECK: define {{.*}} @test_mm_dp_ps
1525aeaca3fa755cddba583842e7a0c3e168bf71b4dCraig Topper  // CHECK: @llvm.x86.sse41.dpps
1535aeaca3fa755cddba583842e7a0c3e168bf71b4dCraig Topper  return _mm_dp_ps(x, y, 2);
1545aeaca3fa755cddba583842e7a0c3e168bf71b4dCraig Topper}
1555aeaca3fa755cddba583842e7a0c3e168bf71b4dCraig Topper
1565aeaca3fa755cddba583842e7a0c3e168bf71b4dCraig Topper__m128d test_mm_dp_pd(__m128d x, __m128d y) {
1575aeaca3fa755cddba583842e7a0c3e168bf71b4dCraig Topper  // CHECK: define {{.*}} @test_mm_dp_pd
1585aeaca3fa755cddba583842e7a0c3e168bf71b4dCraig Topper  // CHECK: @llvm.x86.sse41.dppd
1595aeaca3fa755cddba583842e7a0c3e168bf71b4dCraig Topper  return _mm_dp_pd(x, y, 2);
1605aeaca3fa755cddba583842e7a0c3e168bf71b4dCraig Topper}
1615aeaca3fa755cddba583842e7a0c3e168bf71b4dCraig Topper
1625aeaca3fa755cddba583842e7a0c3e168bf71b4dCraig Topper__m128 test_mm_round_ps(__m128 x) {
1635aeaca3fa755cddba583842e7a0c3e168bf71b4dCraig Topper  // CHECK: define {{.*}} @test_mm_round_ps
1645aeaca3fa755cddba583842e7a0c3e168bf71b4dCraig Topper  // CHECK: @llvm.x86.sse41.round.ps
1655aeaca3fa755cddba583842e7a0c3e168bf71b4dCraig Topper  return _mm_round_ps(x, 2);
1665aeaca3fa755cddba583842e7a0c3e168bf71b4dCraig Topper}
1675aeaca3fa755cddba583842e7a0c3e168bf71b4dCraig Topper
1685aeaca3fa755cddba583842e7a0c3e168bf71b4dCraig Topper__m128 test_mm_round_ss(__m128 x, __m128 y) {
1695aeaca3fa755cddba583842e7a0c3e168bf71b4dCraig Topper  // CHECK: define {{.*}} @test_mm_round_ss
1705aeaca3fa755cddba583842e7a0c3e168bf71b4dCraig Topper  // CHECK: @llvm.x86.sse41.round.ss
1715aeaca3fa755cddba583842e7a0c3e168bf71b4dCraig Topper  return _mm_round_ss(x, y, 2);
1725aeaca3fa755cddba583842e7a0c3e168bf71b4dCraig Topper}
1735aeaca3fa755cddba583842e7a0c3e168bf71b4dCraig Topper
1745aeaca3fa755cddba583842e7a0c3e168bf71b4dCraig Topper__m128d test_mm_round_pd(__m128d x) {
1755aeaca3fa755cddba583842e7a0c3e168bf71b4dCraig Topper  // CHECK: define {{.*}} @test_mm_round_pd
1765aeaca3fa755cddba583842e7a0c3e168bf71b4dCraig Topper  // CHECK: @llvm.x86.sse41.round.pd
1775aeaca3fa755cddba583842e7a0c3e168bf71b4dCraig Topper  return _mm_round_pd(x, 2);
1785aeaca3fa755cddba583842e7a0c3e168bf71b4dCraig Topper}
1795aeaca3fa755cddba583842e7a0c3e168bf71b4dCraig Topper
1805aeaca3fa755cddba583842e7a0c3e168bf71b4dCraig Topper__m128d test_mm_round_sd(__m128d x, __m128d y) {
1815aeaca3fa755cddba583842e7a0c3e168bf71b4dCraig Topper  // CHECK: define {{.*}} @test_mm_round_sd
1825aeaca3fa755cddba583842e7a0c3e168bf71b4dCraig Topper  // CHECK: @llvm.x86.sse41.round.sd
1835aeaca3fa755cddba583842e7a0c3e168bf71b4dCraig Topper  return _mm_round_sd(x, y, 2);
1845aeaca3fa755cddba583842e7a0c3e168bf71b4dCraig Topper}
185c5713cfd87b028d3fcf2e11d8baa67fbc4e18916Chad Rosier
186c5713cfd87b028d3fcf2e11d8baa67fbc4e18916Chad Rosiervoid test_storel_epi64(__m128i x, void* y) {
18793ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin  // CHECK-LABEL: define void @test_storel_epi64
188c5713cfd87b028d3fcf2e11d8baa67fbc4e18916Chad Rosier  // CHECK: store {{.*}} i64* {{.*}}, align 1{{$}}
189c5713cfd87b028d3fcf2e11d8baa67fbc4e18916Chad Rosier  _mm_storel_epi64(y, x);
190c5713cfd87b028d3fcf2e11d8baa67fbc4e18916Chad Rosier}
191440a5f49133307745de7cc92a44d53088cf47c26Eli Friedman
192440a5f49133307745de7cc92a44d53088cf47c26Eli Friedmanvoid test_stream_si32(int x, void *y) {
193440a5f49133307745de7cc92a44d53088cf47c26Eli Friedman  // CHECK-LABEL: define void @test_stream_si32
194440a5f49133307745de7cc92a44d53088cf47c26Eli Friedman  // CHECK: store {{.*}} i32* {{.*}}, align 1, !nontemporal
195440a5f49133307745de7cc92a44d53088cf47c26Eli Friedman  _mm_stream_si32(y, x);
196440a5f49133307745de7cc92a44d53088cf47c26Eli Friedman}
197440a5f49133307745de7cc92a44d53088cf47c26Eli Friedman
198440a5f49133307745de7cc92a44d53088cf47c26Eli Friedmanvoid test_stream_si64(long long x, void *y) {
199440a5f49133307745de7cc92a44d53088cf47c26Eli Friedman  // CHECK-LABEL: define void @test_stream_si64
200440a5f49133307745de7cc92a44d53088cf47c26Eli Friedman  // CHECK: store {{.*}} i64* {{.*}}, align 1, !nontemporal
201440a5f49133307745de7cc92a44d53088cf47c26Eli Friedman  _mm_stream_si64(y, x);
202440a5f49133307745de7cc92a44d53088cf47c26Eli Friedman}
203440a5f49133307745de7cc92a44d53088cf47c26Eli Friedman
204440a5f49133307745de7cc92a44d53088cf47c26Eli Friedmanvoid test_stream_si128(__m128i x, void *y) {
205440a5f49133307745de7cc92a44d53088cf47c26Eli Friedman  // CHECK-LABEL: define void @test_stream_si128
206440a5f49133307745de7cc92a44d53088cf47c26Eli Friedman  // CHECK: store {{.*}} <2 x i64>* {{.*}}, align 16, !nontemporal
207440a5f49133307745de7cc92a44d53088cf47c26Eli Friedman  _mm_stream_si128(y, x);
208440a5f49133307745de7cc92a44d53088cf47c26Eli Friedman}
209bb6144beedc7cbf8df9822024c20c3a8172682c1Manman Ren
210bb6144beedc7cbf8df9822024c20c3a8172682c1Manman Renvoid test_extract_epi16(__m128i __a) {
211bb6144beedc7cbf8df9822024c20c3a8172682c1Manman Ren  // CHECK-LABEL: define void @test_extract_epi16
212bb6144beedc7cbf8df9822024c20c3a8172682c1Manman Ren  // CHECK: [[x:%.*]] = and i32 %{{.*}}, 7
213bb6144beedc7cbf8df9822024c20c3a8172682c1Manman Ren  // CHECK: extractelement <8 x i16> %{{.*}}, i32 [[x]]
214bb6144beedc7cbf8df9822024c20c3a8172682c1Manman Ren  _mm_extract_epi16(__a, 8);
215bb6144beedc7cbf8df9822024c20c3a8172682c1Manman Ren}
2168484375b0fc442c704b3ec06e2e795d88591606fManman Ren
2178484375b0fc442c704b3ec06e2e795d88591606fManman Renint test_extract_ps(__m128i __a) {
2188484375b0fc442c704b3ec06e2e795d88591606fManman Ren  // CHECK-LABEL: @test_extract_ps
2198484375b0fc442c704b3ec06e2e795d88591606fManman Ren  // CHECK: extractelement <4 x float> %{{.*}}, i32 0
2208484375b0fc442c704b3ec06e2e795d88591606fManman Ren  return _mm_extract_ps(__a, 4);
2218484375b0fc442c704b3ec06e2e795d88591606fManman Ren}
2228484375b0fc442c704b3ec06e2e795d88591606fManman Ren
2238484375b0fc442c704b3ec06e2e795d88591606fManman Renint test_extract_epi8(__m128i __a) {
2248484375b0fc442c704b3ec06e2e795d88591606fManman Ren  // CHECK-LABEL: @test_extract_epi8
2258484375b0fc442c704b3ec06e2e795d88591606fManman Ren  // CHECK: extractelement <16 x i8> %{{.*}}, i32 0
2268484375b0fc442c704b3ec06e2e795d88591606fManman Ren  return _mm_extract_epi8(__a, 16);
2278484375b0fc442c704b3ec06e2e795d88591606fManman Ren}
2288484375b0fc442c704b3ec06e2e795d88591606fManman Ren
2298484375b0fc442c704b3ec06e2e795d88591606fManman Renint test_extract_epi32(__m128i __a) {
2308484375b0fc442c704b3ec06e2e795d88591606fManman Ren  // CHECK-LABEL: @test_extract_epi32
2318484375b0fc442c704b3ec06e2e795d88591606fManman Ren  // CHECK: extractelement <4 x i32> %{{.*}}, i32 0
2328484375b0fc442c704b3ec06e2e795d88591606fManman Ren  return _mm_extract_epi32(__a, 4);
2338484375b0fc442c704b3ec06e2e795d88591606fManman Ren}
2348484375b0fc442c704b3ec06e2e795d88591606fManman Ren
2358484375b0fc442c704b3ec06e2e795d88591606fManman Renvoid test_insert_epi32(__m128i __a, int b) {
2368484375b0fc442c704b3ec06e2e795d88591606fManman Ren  // CHECK-LABEL: @test_insert_epi32
2378484375b0fc442c704b3ec06e2e795d88591606fManman Ren  // CHECK: insertelement <4 x i32> %{{.*}}, i32 %{{.*}}, i32 0
2388484375b0fc442c704b3ec06e2e795d88591606fManman Ren   _mm_insert_epi32(__a, b, 4);
2398484375b0fc442c704b3ec06e2e795d88591606fManman Ren}
2406bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
2416bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines__m128d test_blend_pd(__m128d V1, __m128d V2) {
2426bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK-LABEL: @test_blend_pd
2436bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x i32> <i32 2, i32 1>
2446bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  return _mm_blend_pd(V1, V2, 1);
2456bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines}
2466bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
2476bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines__m128 test_blend_ps(__m128 V1, __m128 V2) {
2486bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK-LABEL: @test_blend_ps
2496bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x i32> <i32 4, i32 1, i32 6, i32 3>
2506bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  return _mm_blend_ps(V1, V2, 5);
2516bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines}
2526bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
2536bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines__m128i test_blend_epi16(__m128i V1, __m128i V2) {
2546bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK-LABEL: @test_blend_epi16
2556bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  // CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 7>
2566bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  return _mm_blend_epi16(V1, V2, 42);
2576bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines}
258