blob: 842108433237928f52df04a7f3809c566c09e057 [file] [log] [blame]
Karl Schimpf1d6f0e42014-09-04 12:22:14 -07001; Tests if we can read select instructions.
2
Karl Schimpf2a5324a2014-09-25 09:37:49 -07003; RUN: %p2i -i %s --insts | FileCheck %s
Karl Schimpf6fcbddd2014-11-06 09:49:24 -08004; RUN: %if --need=allow_disable_ir_gen --command \
5; RUN: %p2i -i %s --args -notranslate -timing -no-ir-gen \
6; RUN: | %if --need=allow_disable_ir_gen --command \
7; RUN: FileCheck --check-prefix=NOIR %s
Karl Schimpf1d6f0e42014-09-04 12:22:14 -07008
9define void @Seli1(i32 %p) {
Karl Schimpfc132b762014-09-11 09:43:47 -070010entry:
Karl Schimpf1d6f0e42014-09-04 12:22:14 -070011 %vc = trunc i32 %p to i1
12 %vt = trunc i32 %p to i1
13 %ve = trunc i32 %p to i1
14 %r = select i1 %vc, i1 %vt, i1 %ve
15 ret void
16}
17
Karl Schimpfc132b762014-09-11 09:43:47 -070018; CHECK: define void @Seli1(i32 %p) {
19; CHECK-NEXT: entry:
20; CHECK-NEXT: %vc = trunc i32 %p to i1
21; CHECK-NEXT: %vt = trunc i32 %p to i1
22; CHECK-NEXT: %ve = trunc i32 %p to i1
23; CHECK-NEXT: %r = select i1 %vc, i1 %vt, i1 %ve
Karl Schimpf1d6f0e42014-09-04 12:22:14 -070024; CHECK-NEXT: ret void
25; CHECK-NEXT: }
26
27define void @Seli8(i32 %p) {
Karl Schimpfc132b762014-09-11 09:43:47 -070028entry:
Karl Schimpf1d6f0e42014-09-04 12:22:14 -070029 %vc = trunc i32 %p to i1
30 %vt = trunc i32 %p to i8
31 %ve = trunc i32 %p to i8
32 %r = select i1 %vc, i8 %vt, i8 %ve
33 ret void
34}
35
Karl Schimpfc132b762014-09-11 09:43:47 -070036; CHECK-NEXT: define void @Seli8(i32 %p) {
37; CHECK-NEXT: entry:
38; CHECK-NEXT: %vc = trunc i32 %p to i1
39; CHECK-NEXT: %vt = trunc i32 %p to i8
40; CHECK-NEXT: %ve = trunc i32 %p to i8
41; CHECK-NEXT: %r = select i1 %vc, i8 %vt, i8 %ve
Karl Schimpf1d6f0e42014-09-04 12:22:14 -070042; CHECK-NEXT: ret void
43; CHECK-NEXT: }
44
45define void @Seli16(i32 %p) {
Karl Schimpfc132b762014-09-11 09:43:47 -070046entry:
Karl Schimpf1d6f0e42014-09-04 12:22:14 -070047 %vc = trunc i32 %p to i1
48 %vt = trunc i32 %p to i16
49 %ve = trunc i32 %p to i16
50 %r = select i1 %vc, i16 %vt, i16 %ve
51 ret void
52}
53
Karl Schimpfc132b762014-09-11 09:43:47 -070054; CHECK-NEXT: define void @Seli16(i32 %p) {
55; CHECK-NEXT: entry:
56; CHECK-NEXT: %vc = trunc i32 %p to i1
57; CHECK-NEXT: %vt = trunc i32 %p to i16
58; CHECK-NEXT: %ve = trunc i32 %p to i16
59; CHECK-NEXT: %r = select i1 %vc, i16 %vt, i16 %ve
Karl Schimpf1d6f0e42014-09-04 12:22:14 -070060; CHECK-NEXT: ret void
61; CHECK-NEXT: }
62
63define i32 @Seli32(i32 %pc, i32 %pt, i32 %pe) {
Karl Schimpfc132b762014-09-11 09:43:47 -070064entry:
Karl Schimpf1d6f0e42014-09-04 12:22:14 -070065 %vc = trunc i32 %pc to i1
66 %r = select i1 %vc, i32 %pt, i32 %pe
67 ret i32 %r
68}
69
Karl Schimpfc132b762014-09-11 09:43:47 -070070; CHECK-NEXT: define i32 @Seli32(i32 %pc, i32 %pt, i32 %pe) {
71; CHECK-NEXT: entry:
72; CHECK-NEXT: %vc = trunc i32 %pc to i1
73; CHECK-NEXT: %r = select i1 %vc, i32 %pt, i32 %pe
74; CHECK-NEXT: ret i32 %r
Karl Schimpf1d6f0e42014-09-04 12:22:14 -070075; CHECK-NEXT: }
76
77define i64 @Seli64(i64 %pc, i64 %pt, i64 %pe) {
Karl Schimpfc132b762014-09-11 09:43:47 -070078entry:
Karl Schimpf1d6f0e42014-09-04 12:22:14 -070079 %vc = trunc i64 %pc to i1
80 %r = select i1 %vc, i64 %pt, i64 %pe
81 ret i64 %r
82}
83
Karl Schimpfc132b762014-09-11 09:43:47 -070084; CHECK-NEXT: define i64 @Seli64(i64 %pc, i64 %pt, i64 %pe) {
85; CHECK-NEXT: entry:
86; CHECK-NEXT: %vc = trunc i64 %pc to i1
87; CHECK-NEXT: %r = select i1 %vc, i64 %pt, i64 %pe
88; CHECK-NEXT: ret i64 %r
Karl Schimpf1d6f0e42014-09-04 12:22:14 -070089; CHECK-NEXT: }
90
91define float @SelFloat(i32 %pc, float %pt, float %pe) {
Karl Schimpfc132b762014-09-11 09:43:47 -070092entry:
Karl Schimpf1d6f0e42014-09-04 12:22:14 -070093 %vc = trunc i32 %pc to i1
94 %r = select i1 %vc, float %pt, float %pe
95 ret float %r
96}
97
Karl Schimpfc132b762014-09-11 09:43:47 -070098; CHECK-NEXT: define float @SelFloat(i32 %pc, float %pt, float %pe) {
99; CHECK-NEXT: entry:
100; CHECK-NEXT: %vc = trunc i32 %pc to i1
101; CHECK-NEXT: %r = select i1 %vc, float %pt, float %pe
102; CHECK-NEXT: ret float %r
Karl Schimpf1d6f0e42014-09-04 12:22:14 -0700103; CHECK-NEXT: }
104
105define double @SelDouble(i32 %pc, double %pt, double %pe) {
Karl Schimpfc132b762014-09-11 09:43:47 -0700106entry:
Karl Schimpf1d6f0e42014-09-04 12:22:14 -0700107 %vc = trunc i32 %pc to i1
108 %r = select i1 %vc, double %pt, double %pe
109 ret double %r
110}
111
Karl Schimpfc132b762014-09-11 09:43:47 -0700112; CHECK-NEXT: define double @SelDouble(i32 %pc, double %pt, double %pe) {
113; CHECK-NEXT: entry:
114; CHECK-NEXT: %vc = trunc i32 %pc to i1
115; CHECK-NEXT: %r = select i1 %vc, double %pt, double %pe
116; CHECK-NEXT: ret double %r
Karl Schimpf1d6f0e42014-09-04 12:22:14 -0700117; CHECK-NEXT: }
118
119define <16 x i1> @SelV16x1(i32 %pc, <16 x i1> %pt, <16 x i1> %pe) {
Karl Schimpfc132b762014-09-11 09:43:47 -0700120entry:
Karl Schimpf1d6f0e42014-09-04 12:22:14 -0700121 %vc = trunc i32 %pc to i1
122 %r = select i1 %vc, <16 x i1> %pt, <16 x i1> %pe
123 ret <16 x i1> %r
124}
125
Karl Schimpfc132b762014-09-11 09:43:47 -0700126; CHECK-NEXT: define <16 x i1> @SelV16x1(i32 %pc, <16 x i1> %pt, <16 x i1> %pe) {
127; CHECK-NEXT: entry:
128; CHECK-NEXT: %vc = trunc i32 %pc to i1
129; CHECK-NEXT: %r = select i1 %vc, <16 x i1> %pt, <16 x i1> %pe
130; CHECK-NEXT: ret <16 x i1> %r
Karl Schimpf1d6f0e42014-09-04 12:22:14 -0700131; CHECK-NEXT: }
132
133define <8 x i1> @SelV8x1(i32 %pc, <8 x i1> %pt, <8 x i1> %pe) {
Karl Schimpfc132b762014-09-11 09:43:47 -0700134entry:
Karl Schimpf1d6f0e42014-09-04 12:22:14 -0700135 %vc = trunc i32 %pc to i1
136 %r = select i1 %vc, <8 x i1> %pt, <8 x i1> %pe
137 ret <8 x i1> %r
138}
139
Karl Schimpfc132b762014-09-11 09:43:47 -0700140; CHECK-NEXT: define <8 x i1> @SelV8x1(i32 %pc, <8 x i1> %pt, <8 x i1> %pe) {
141; CHECK-NEXT: entry:
142; CHECK-NEXT: %vc = trunc i32 %pc to i1
143; CHECK-NEXT: %r = select i1 %vc, <8 x i1> %pt, <8 x i1> %pe
144; CHECK-NEXT: ret <8 x i1> %r
Karl Schimpf1d6f0e42014-09-04 12:22:14 -0700145; CHECK-NEXT: }
146
147define <4 x i1> @SelV4x1(i32 %pc, <4 x i1> %pt, <4 x i1> %pe) {
Karl Schimpfc132b762014-09-11 09:43:47 -0700148entry:
Karl Schimpf1d6f0e42014-09-04 12:22:14 -0700149 %vc = trunc i32 %pc to i1
150 %r = select i1 %vc, <4 x i1> %pt, <4 x i1> %pe
151 ret <4 x i1> %r
152}
153
Karl Schimpfc132b762014-09-11 09:43:47 -0700154; CHECK-NEXT: define <4 x i1> @SelV4x1(i32 %pc, <4 x i1> %pt, <4 x i1> %pe) {
155; CHECK-NEXT: entry:
156; CHECK-NEXT: %vc = trunc i32 %pc to i1
157; CHECK-NEXT: %r = select i1 %vc, <4 x i1> %pt, <4 x i1> %pe
158; CHECK-NEXT: ret <4 x i1> %r
Karl Schimpf1d6f0e42014-09-04 12:22:14 -0700159; CHECK-NEXT: }
160
161define <16 x i8> @SelV16x8(i32 %pc, <16 x i8> %pt, <16 x i8> %pe) {
Karl Schimpfc132b762014-09-11 09:43:47 -0700162entry:
Karl Schimpf1d6f0e42014-09-04 12:22:14 -0700163 %vc = trunc i32 %pc to i1
164 %r = select i1 %vc, <16 x i8> %pt, <16 x i8> %pe
165 ret <16 x i8> %r
166}
167
Karl Schimpfc132b762014-09-11 09:43:47 -0700168; CHECK-NEXT: define <16 x i8> @SelV16x8(i32 %pc, <16 x i8> %pt, <16 x i8> %pe) {
169; CHECK-NEXT: entry:
170; CHECK-NEXT: %vc = trunc i32 %pc to i1
171; CHECK-NEXT: %r = select i1 %vc, <16 x i8> %pt, <16 x i8> %pe
172; CHECK-NEXT: ret <16 x i8> %r
Karl Schimpf1d6f0e42014-09-04 12:22:14 -0700173; CHECK-NEXT: }
174
175define <8 x i16> @SelV8x16(i32 %pc, <8 x i16> %pt, <8 x i16> %pe) {
Karl Schimpfc132b762014-09-11 09:43:47 -0700176entry:
Karl Schimpf1d6f0e42014-09-04 12:22:14 -0700177 %vc = trunc i32 %pc to i1
178 %r = select i1 %vc, <8 x i16> %pt, <8 x i16> %pe
179 ret <8 x i16> %r
180}
181
Karl Schimpfc132b762014-09-11 09:43:47 -0700182; CHECK-NEXT: define <8 x i16> @SelV8x16(i32 %pc, <8 x i16> %pt, <8 x i16> %pe) {
183; CHECK-NEXT: entry:
184; CHECK-NEXT: %vc = trunc i32 %pc to i1
185; CHECK-NEXT: %r = select i1 %vc, <8 x i16> %pt, <8 x i16> %pe
186; CHECK-NEXT: ret <8 x i16> %r
Karl Schimpf1d6f0e42014-09-04 12:22:14 -0700187; CHECK-NEXT: }
188
189define <4 x i32> @SelV4x32(i32 %pc, <4 x i32> %pt, <4 x i32> %pe) {
Karl Schimpfc132b762014-09-11 09:43:47 -0700190entry:
Karl Schimpf1d6f0e42014-09-04 12:22:14 -0700191 %vc = trunc i32 %pc to i1
192 %r = select i1 %vc, <4 x i32> %pt, <4 x i32> %pe
193 ret <4 x i32> %r
194}
195
Karl Schimpfc132b762014-09-11 09:43:47 -0700196; CHECK-NEXT: define <4 x i32> @SelV4x32(i32 %pc, <4 x i32> %pt, <4 x i32> %pe) {
197; CHECK-NEXT: entry:
198; CHECK-NEXT: %vc = trunc i32 %pc to i1
199; CHECK-NEXT: %r = select i1 %vc, <4 x i32> %pt, <4 x i32> %pe
200; CHECK-NEXT: ret <4 x i32> %r
Karl Schimpf1d6f0e42014-09-04 12:22:14 -0700201; CHECK-NEXT: }
202
203define <4 x float> @SelV4xfloat(i32 %pc, <4 x float> %pt, <4 x float> %pe) {
Karl Schimpfc132b762014-09-11 09:43:47 -0700204entry:
Karl Schimpf1d6f0e42014-09-04 12:22:14 -0700205 %vc = trunc i32 %pc to i1
206 %r = select i1 %vc, <4 x float> %pt, <4 x float> %pe
207 ret <4 x float> %r
208}
209
Karl Schimpfc132b762014-09-11 09:43:47 -0700210; CHECK-NEXT: define <4 x float> @SelV4xfloat(i32 %pc, <4 x float> %pt, <4 x float> %pe) {
211; CHECK-NEXT: entry:
212; CHECK-NEXT: %vc = trunc i32 %pc to i1
213; CHECK-NEXT: %r = select i1 %vc, <4 x float> %pt, <4 x float> %pe
214; CHECK-NEXT: ret <4 x float> %r
Karl Schimpf1d6f0e42014-09-04 12:22:14 -0700215; CHECK-NEXT: }
216
217define <16 x i1> @SelV16x1Vcond(<16 x i1> %pc, <16 x i1> %pt, <16 x i1> %pe) {
Karl Schimpfc132b762014-09-11 09:43:47 -0700218entry:
Karl Schimpf1d6f0e42014-09-04 12:22:14 -0700219 %r = select <16 x i1> %pc, <16 x i1> %pt, <16 x i1> %pe
220 ret <16 x i1> %r
221}
222
Karl Schimpfc132b762014-09-11 09:43:47 -0700223; CHECK-NEXT: define <16 x i1> @SelV16x1Vcond(<16 x i1> %pc, <16 x i1> %pt, <16 x i1> %pe) {
224; CHECK-NEXT: entry:
225; CHECK-NEXT: %r = select <16 x i1> %pc, <16 x i1> %pt, <16 x i1> %pe
226; CHECK-NEXT: ret <16 x i1> %r
Karl Schimpf1d6f0e42014-09-04 12:22:14 -0700227; CHECK-NEXT: }
228
229define <8 x i1> @SelV8x1Vcond(<8 x i1> %pc, <8 x i1> %pt, <8 x i1> %pe) {
Karl Schimpfc132b762014-09-11 09:43:47 -0700230entry:
Karl Schimpf1d6f0e42014-09-04 12:22:14 -0700231 %r = select <8 x i1> %pc, <8 x i1> %pt, <8 x i1> %pe
232 ret <8 x i1> %r
233}
234
Karl Schimpfc132b762014-09-11 09:43:47 -0700235; CHECK-NEXT: define <8 x i1> @SelV8x1Vcond(<8 x i1> %pc, <8 x i1> %pt, <8 x i1> %pe) {
236; CHECK-NEXT: entry:
237; CHECK-NEXT: %r = select <8 x i1> %pc, <8 x i1> %pt, <8 x i1> %pe
238; CHECK-NEXT: ret <8 x i1> %r
Karl Schimpf1d6f0e42014-09-04 12:22:14 -0700239; CHECK-NEXT: }
240
241define <4 x i1> @SelV4x1Vcond(<4 x i1> %pc, <4 x i1> %pt, <4 x i1> %pe) {
Karl Schimpfc132b762014-09-11 09:43:47 -0700242entry:
Karl Schimpf1d6f0e42014-09-04 12:22:14 -0700243 %r = select <4 x i1> %pc, <4 x i1> %pt, <4 x i1> %pe
244 ret <4 x i1> %r
245}
246
Karl Schimpfc132b762014-09-11 09:43:47 -0700247; CHECK-NEXT: define <4 x i1> @SelV4x1Vcond(<4 x i1> %pc, <4 x i1> %pt, <4 x i1> %pe) {
248; CHECK-NEXT: entry:
249; CHECK-NEXT: %r = select <4 x i1> %pc, <4 x i1> %pt, <4 x i1> %pe
250; CHECK-NEXT: ret <4 x i1> %r
Karl Schimpf1d6f0e42014-09-04 12:22:14 -0700251; CHECK-NEXT: }
252
253define <16 x i8> @SelV16x8Vcond(<16 x i1> %pc, <16 x i8> %pt, <16 x i8> %pe) {
Karl Schimpfc132b762014-09-11 09:43:47 -0700254entry:
Karl Schimpf1d6f0e42014-09-04 12:22:14 -0700255 %r = select <16 x i1> %pc, <16 x i8> %pt, <16 x i8> %pe
256 ret <16 x i8> %r
257}
258
Karl Schimpfc132b762014-09-11 09:43:47 -0700259; CHECK-NEXT: define <16 x i8> @SelV16x8Vcond(<16 x i1> %pc, <16 x i8> %pt, <16 x i8> %pe) {
260; CHECK-NEXT: entry:
261; CHECK-NEXT: %r = select <16 x i1> %pc, <16 x i8> %pt, <16 x i8> %pe
262; CHECK-NEXT: ret <16 x i8> %r
Karl Schimpf1d6f0e42014-09-04 12:22:14 -0700263; CHECK-NEXT: }
264
265define <8 x i16> @SelV8x16Vcond(<8 x i1> %pc, <8 x i16> %pt, <8 x i16> %pe) {
Karl Schimpfc132b762014-09-11 09:43:47 -0700266entry:
Karl Schimpf1d6f0e42014-09-04 12:22:14 -0700267 %r = select <8 x i1> %pc, <8 x i16> %pt, <8 x i16> %pe
268 ret <8 x i16> %r
269}
270
Karl Schimpfc132b762014-09-11 09:43:47 -0700271; CHECK-NEXT: define <8 x i16> @SelV8x16Vcond(<8 x i1> %pc, <8 x i16> %pt, <8 x i16> %pe) {
272; CHECK-NEXT: entry:
273; CHECK-NEXT: %r = select <8 x i1> %pc, <8 x i16> %pt, <8 x i16> %pe
274; CHECK-NEXT: ret <8 x i16> %r
Karl Schimpf1d6f0e42014-09-04 12:22:14 -0700275; CHECK-NEXT: }
276
277define <4 x i32> @SelV4x32Vcond(<4 x i1> %pc, <4 x i32> %pt, <4 x i32> %pe) {
Karl Schimpfc132b762014-09-11 09:43:47 -0700278entry:
Karl Schimpf1d6f0e42014-09-04 12:22:14 -0700279 %r = select <4 x i1> %pc, <4 x i32> %pt, <4 x i32> %pe
280 ret <4 x i32> %r
281}
282
Karl Schimpfc132b762014-09-11 09:43:47 -0700283; CHECK-NEXT: define <4 x i32> @SelV4x32Vcond(<4 x i1> %pc, <4 x i32> %pt, <4 x i32> %pe) {
284; CHECK-NEXT: entry:
285; CHECK-NEXT: %r = select <4 x i1> %pc, <4 x i32> %pt, <4 x i32> %pe
286; CHECK-NEXT: ret <4 x i32> %r
Karl Schimpf1d6f0e42014-09-04 12:22:14 -0700287; CHECK-NEXT: }
288
289define <4 x float> @SelV4xfloatVcond(<4 x i1> %pc, <4 x float> %pt, <4 x float> %pe) {
Karl Schimpfc132b762014-09-11 09:43:47 -0700290entry:
Karl Schimpf1d6f0e42014-09-04 12:22:14 -0700291 %r = select <4 x i1> %pc, <4 x float> %pt, <4 x float> %pe
292 ret <4 x float> %r
293}
294
Karl Schimpfc132b762014-09-11 09:43:47 -0700295; CHECK-NEXT: define <4 x float> @SelV4xfloatVcond(<4 x i1> %pc, <4 x float> %pt, <4 x float> %pe) {
296; CHECK-NEXT: entry:
297; CHECK-NEXT: %r = select <4 x i1> %pc, <4 x float> %pt, <4 x float> %pe
298; CHECK-NEXT: ret <4 x float> %r
Karl Schimpf1d6f0e42014-09-04 12:22:14 -0700299; CHECK-NEXT: }
Karl Schimpf6fcbddd2014-11-06 09:49:24 -0800300
301; NOIR: Total across all functions