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