[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / CodeGen / X86 / vselect-2.ll
blobc751b7a7c87eea20b1bbafde50c4f65b7764a337
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=SSE --check-prefix=SSE2
3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=SSE --check-prefix=SSE41
4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=AVX --check-prefix=AVX1
5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefix=AVX --check-prefix=AVX2
7 define <4 x i32> @test1(<4 x i32> %A, <4 x i32> %B) {
8 ; SSE2-LABEL: test1:
9 ; SSE2:       # %bb.0:
10 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3]
11 ; SSE2-NEXT:    retq
13 ; SSE41-LABEL: test1:
14 ; SSE41:       # %bb.0:
15 ; SSE41-NEXT:    blendps {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3]
16 ; SSE41-NEXT:    retq
18 ; AVX-LABEL: test1:
19 ; AVX:       # %bb.0:
20 ; AVX-NEXT:    vblendps {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3]
21 ; AVX-NEXT:    retq
22   %select = select <4 x i1><i1 true, i1 true, i1 false, i1 false>, <4 x i32> %A, <4 x i32> %B
23   ret <4 x i32> %select
26 define <4 x i32> @test2(<4 x i32> %A, <4 x i32> %B) {
27 ; SSE2-LABEL: test2:
28 ; SSE2:       # %bb.0:
29 ; SSE2-NEXT:    movsd {{.*#+}} xmm0 = xmm1[0],xmm0[1]
30 ; SSE2-NEXT:    retq
32 ; SSE41-LABEL: test2:
33 ; SSE41:       # %bb.0:
34 ; SSE41-NEXT:    blendps {{.*#+}} xmm0 = xmm1[0,1],xmm0[2,3]
35 ; SSE41-NEXT:    retq
37 ; AVX-LABEL: test2:
38 ; AVX:       # %bb.0:
39 ; AVX-NEXT:    vblendps {{.*#+}} xmm0 = xmm1[0,1],xmm0[2,3]
40 ; AVX-NEXT:    retq
41   %select = select <4 x i1><i1 false, i1 false, i1 true, i1 true>, <4 x i32> %A, <4 x i32> %B
42   ret <4 x i32> %select
45 define <4 x float> @test3(<4 x float> %A, <4 x float> %B) {
46 ; SSE2-LABEL: test3:
47 ; SSE2:       # %bb.0:
48 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3]
49 ; SSE2-NEXT:    retq
51 ; SSE41-LABEL: test3:
52 ; SSE41:       # %bb.0:
53 ; SSE41-NEXT:    blendps {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3]
54 ; SSE41-NEXT:    retq
56 ; AVX-LABEL: test3:
57 ; AVX:       # %bb.0:
58 ; AVX-NEXT:    vblendps {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3]
59 ; AVX-NEXT:    retq
60   %select = select <4 x i1><i1 true, i1 true, i1 false, i1 false>, <4 x float> %A, <4 x float> %B
61   ret <4 x float> %select
64 define <4 x float> @test4(<4 x float> %A, <4 x float> %B) {
65 ; SSE2-LABEL: test4:
66 ; SSE2:       # %bb.0:
67 ; SSE2-NEXT:    movsd {{.*#+}} xmm0 = xmm1[0],xmm0[1]
68 ; SSE2-NEXT:    retq
70 ; SSE41-LABEL: test4:
71 ; SSE41:       # %bb.0:
72 ; SSE41-NEXT:    blendps {{.*#+}} xmm0 = xmm1[0,1],xmm0[2,3]
73 ; SSE41-NEXT:    retq
75 ; AVX-LABEL: test4:
76 ; AVX:       # %bb.0:
77 ; AVX-NEXT:    vblendps {{.*#+}} xmm0 = xmm1[0,1],xmm0[2,3]
78 ; AVX-NEXT:    retq
79   %select = select <4 x i1><i1 false, i1 false, i1 true, i1 true>, <4 x float> %A, <4 x float> %B
80   ret <4 x float> %select