Extend the statepoint intrinsic to allow statepoints to be marked as transitions...
[oota-llvm.git] / test / CodeGen / X86 / vselect-2.ll
1 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=SSE2
2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=SSE41
3
4 define <4 x i32> @test1(<4 x i32> %A, <4 x i32> %B) {
5 ; SSE2-LABEL: test1:
6 ; SSE2:       # BB#0:
7 ; SSE2-NEXT:    movsd {{.*#+}} xmm1 = xmm0[0],xmm1[1]
8 ; SSE2-NEXT:    movapd %xmm1, %xmm0
9 ; SSE2-NEXT:    retq
10 ;
11 ; SSE41-LABEL: test1:
12 ; SSE41:       # BB#0:
13 ; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]
14 ; SSE41-NEXT:    retq
15   %select = select <4 x i1><i1 true, i1 true, i1 false, i1 false>, <4 x i32> %A, <4 x i32> %B
16   ret <4 x i32> %select
17 }
18
19 define <4 x i32> @test2(<4 x i32> %A, <4 x i32> %B) {
20 ; SSE2-LABEL: test2:
21 ; SSE2:       # BB#0:
22 ; SSE2-NEXT:    movsd {{.*#+}} xmm0 = xmm1[0],xmm0[1]
23 ; SSE2-NEXT:    retq
24 ;
25 ; SSE41-LABEL: test2:
26 ; SSE41:       # BB#0:
27 ; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm1[0,1,2,3],xmm0[4,5,6,7]
28 ; SSE41-NEXT:    retq
29   %select = select <4 x i1><i1 false, i1 false, i1 true, i1 true>, <4 x i32> %A, <4 x i32> %B
30   ret <4 x i32> %select
31 }
32
33 define <4 x float> @test3(<4 x float> %A, <4 x float> %B) {
34 ; SSE2-LABEL: test3:
35 ; SSE2:       # BB#0:
36 ; SSE2-NEXT:    movsd {{.*#+}} xmm1 = xmm0[0],xmm1[1]
37 ; SSE2-NEXT:    movapd %xmm1, %xmm0
38 ; SSE2-NEXT:    retq
39 ;
40 ; SSE41-LABEL: test3:
41 ; SSE41:       # BB#0:
42 ; SSE41-NEXT:    blendpd {{.*#+}} xmm0 = xmm0[0],xmm1[1]
43 ; SSE41-NEXT:    retq
44   %select = select <4 x i1><i1 true, i1 true, i1 false, i1 false>, <4 x float> %A, <4 x float> %B
45   ret <4 x float> %select
46 }
47
48 define <4 x float> @test4(<4 x float> %A, <4 x float> %B) {
49 ; SSE2-LABEL: test4:
50 ; SSE2:       # BB#0:
51 ; SSE2-NEXT:    movsd {{.*#+}} xmm0 = xmm1[0],xmm0[1]
52 ; SSE2-NEXT:    retq
53 ;
54 ; SSE41-LABEL: test4:
55 ; SSE41:       # BB#0:
56 ; SSE41-NEXT:    blendpd {{.*#+}} xmm0 = xmm1[0],xmm0[1]
57 ; SSE41-NEXT:    retq
58   %select = select <4 x i1><i1 false, i1 false, i1 true, i1 true>, <4 x float> %A, <4 x float> %B
59   ret <4 x float> %select
60 }