blob: af8c310618948d3477937f3e1db3a873ef312c5d [file] [log] [blame]
Andrea Di Biagio46dcddb2013-12-27 20:20:28 +00001; RUN: llc -march=x86-64 -mcpu=corei7 -mattr=-sse4.1 < %s | FileCheck %s
2
3; Verify that we don't emit packed vector shifts instructions if the
4; condition used by the vector select is a vector of constants.
5
6
7define <4 x float> @test1(<4 x float> %a, <4 x float> %b) {
8 %1 = select <4 x i1> <i1 true, i1 false, i1 true, i1 false>, <4 x float> %a, <4 x float> %b
9 ret <4 x float> %1
10}
11; CHECK-LABEL: test1
12; CHECK-NOT: psllw
13; CHECK-NOT: psraw
14; CHECK: ret
15
16
17define <4 x float> @test2(<4 x float> %a, <4 x float> %b) {
18 %1 = select <4 x i1> <i1 true, i1 true, i1 false, i1 false>, <4 x float> %a, <4 x float> %b
19 ret <4 x float> %1
20}
21; CHECK-LABEL: test2
22; CHECK-NOT: psllw
23; CHECK-NOT: psraw
24; CHECK: ret
25
26
27define <4 x float> @test3(<4 x float> %a, <4 x float> %b) {
28 %1 = select <4 x i1> <i1 false, i1 false, i1 true, i1 true>, <4 x float> %a, <4 x float> %b
29 ret <4 x float> %1
30}
31; CHECK-LABEL: test3
32; CHECK-NOT: psllw
33; CHECK-NOT: psraw
34; CHECK: ret
35
36
37define <4 x float> @test4(<4 x float> %a, <4 x float> %b) {
38 %1 = select <4 x i1> <i1 false, i1 false, i1 false, i1 false>, <4 x float> %a, <4 x float> %b
39 ret <4 x float> %1
40}
41; CHECK-LABEL: test4
42; CHECK-NOT: psllw
43; CHECK-NOT: psraw
44; CHECK: movaps %xmm1, %xmm0
45; CHECK: ret
46
47
48define <4 x float> @test5(<4 x float> %a, <4 x float> %b) {
49 %1 = select <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x float> %a, <4 x float> %b
50 ret <4 x float> %1
51}
52; CHECK-LABEL: test5
53; CHECK-NOT: psllw
54; CHECK-NOT: psraw
55; CHECK: ret
56
57
58define <8 x i16> @test6(<8 x i16> %a, <8 x i16> %b) {
59 %1 = select <8 x i1> <i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false>, <8 x i16> %a, <8 x i16> %a
60 ret <8 x i16> %1
61}
62; CHECK-LABEL: test6
63; CHECK-NOT: psllw
64; CHECK-NOT: psraw
65; CHECK: ret
66
67
68define <8 x i16> @test7(<8 x i16> %a, <8 x i16> %b) {
69 %1 = select <8 x i1> <i1 true, i1 true, i1 true, i1 true, i1 false, i1 false, i1 false, i1 false>, <8 x i16> %a, <8 x i16> %b
70 ret <8 x i16> %1
71}
72; CHECK-LABEL: test7
73; CHECK-NOT: psllw
74; CHECK-NOT: psraw
75; CHECK: ret
76
77
78define <8 x i16> @test8(<8 x i16> %a, <8 x i16> %b) {
79 %1 = select <8 x i1> <i1 false, i1 false, i1 false, i1 false, i1 true, i1 true, i1 true, i1 true>, <8 x i16> %a, <8 x i16> %b
80 ret <8 x i16> %1
81}
82; CHECK-LABEL: test8
83; CHECK-NOT: psllw
84; CHECK-NOT: psraw
85; CHECK: ret
86
87define <8 x i16> @test9(<8 x i16> %a, <8 x i16> %b) {
88 %1 = select <8 x i1> <i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false>, <8 x i16> %a, <8 x i16> %b
89 ret <8 x i16> %1
90}
91; CHECK-LABEL: test9
92; CHECK-NOT: psllw
93; CHECK-NOT: psraw
94; CHECK: movaps %xmm1, %xmm0
95; CHECK-NEXT: ret
96
97define <8 x i16> @test10(<8 x i16> %a, <8 x i16> %b) {
98 %1 = select <8 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>, <8 x i16> %a, <8 x i16> %b
99 ret <8 x i16> %1
100}
101; CHECK-LABEL: test10
102; CHECK-NOT: psllw
103; CHECK-NOT: psraw
104; CHECK: ret
105
106define <8 x i16> @test11(<8 x i16> %a, <8 x i16> %b) {
107 %1 = select <8 x i1> <i1 false, i1 true, i1 true, i1 false, i1 undef, i1 true, i1 true, i1 undef>, <8 x i16> %a, <8 x i16> %b
108 ret <8 x i16> %1
109}
110; CHECK-LABEL: test11
111; CHECK-NOT: psllw
112; CHECK-NOT: psraw
113; CHECK: ret
114
115define <8 x i16> @test12(<8 x i16> %a, <8 x i16> %b) {
116 %1 = select <8 x i1> <i1 false, i1 false, i1 undef, i1 false, i1 false, i1 false, i1 false, i1 undef>, <8 x i16> %a, <8 x i16> %b
117 ret <8 x i16> %1
118}
119; CHECK-LABEL: test12
120; CHECK-NOT: psllw
121; CHECK-NOT: psraw
122; CHECK: ret
123
124define <8 x i16> @test13(<8 x i16> %a, <8 x i16> %b) {
125 %1 = select <8 x i1> <i1 undef, i1 undef, i1 undef, i1 undef, i1 undef, i1 undef, i1 undef, i1 undef>, <8 x i16> %a, <8 x i16> %b
126 ret <8 x i16> %1
127}
128; CHECK-LABEL: test13
129; CHECK-NOT: psllw
130; CHECK-NOT: psraw
131; CHECK: ret
132
133