@@ -198,3 +198,94 @@ define <2 x i32> @scalar_select_of_vectors_zext(<2 x i1> %cca, i1 %ccb) {
198
198
%r = select i1 %ccb , <2 x i32 > %ccax , <2 x i32 > <i32 0 , i32 0 >
199
199
ret <2 x i32 > %r
200
200
}
201
+
202
+ define i32 @sext_true_val_must_be_all_ones (i1 %x ) {
203
+ ; CHECK-LABEL: @sext_true_val_must_be_all_ones(
204
+ ; CHECK-NEXT: [[EXT:%.*]] = sext i1 %x to i32
205
+ ; CHECK-NEXT: [[SEL:%.*]] = select i1 %x, i32 [[EXT]], i32 42, !prof !0
206
+ ; CHECK-NEXT: ret i32 [[SEL]]
207
+ ;
208
+ %ext = sext i1 %x to i32
209
+ %sel = select i1 %x , i32 %ext , i32 42 , !prof !0
210
+ ret i32 %sel
211
+ }
212
+
213
+ define <2 x i32 > @sext_true_val_must_be_all_ones_vec (<2 x i1 > %x ) {
214
+ ; CHECK-LABEL: @sext_true_val_must_be_all_ones_vec(
215
+ ; CHECK-NEXT: [[EXT:%.*]] = sext <2 x i1> %x to <2 x i32>
216
+ ; CHECK-NEXT: [[SEL:%.*]] = select <2 x i1> %x, <2 x i32> [[EXT]], <2 x i32> <i32 42, i32 12>, !prof !0
217
+ ; CHECK-NEXT: ret <2 x i32> [[SEL]]
218
+ ;
219
+ %ext = sext <2 x i1 > %x to <2 x i32 >
220
+ %sel = select <2 x i1 > %x , <2 x i32 > %ext , <2 x i32 > <i32 42 , i32 12 >, !prof !0
221
+ ret <2 x i32 > %sel
222
+ }
223
+
224
+ define i32 @zext_true_val_must_be_one (i1 %x ) {
225
+ ; CHECK-LABEL: @zext_true_val_must_be_one(
226
+ ; CHECK-NEXT: [[EXT:%.*]] = zext i1 %x to i32
227
+ ; CHECK-NEXT: [[SEL:%.*]] = select i1 %x, i32 [[EXT]], i32 42, !prof !0
228
+ ; CHECK-NEXT: ret i32 [[SEL]]
229
+ ;
230
+ %ext = zext i1 %x to i32
231
+ %sel = select i1 %x , i32 %ext , i32 42 , !prof !0
232
+ ret i32 %sel
233
+ }
234
+
235
+ define <2 x i32 > @zext_true_val_must_be_one_vec (<2 x i1 > %x ) {
236
+ ; CHECK-LABEL: @zext_true_val_must_be_one_vec(
237
+ ; CHECK-NEXT: [[EXT:%.*]] = zext <2 x i1> %x to <2 x i32>
238
+ ; CHECK-NEXT: [[SEL:%.*]] = select <2 x i1> %x, <2 x i32> [[EXT]], <2 x i32> <i32 42, i32 12>, !prof !0
239
+ ; CHECK-NEXT: ret <2 x i32> [[SEL]]
240
+ ;
241
+ %ext = zext <2 x i1 > %x to <2 x i32 >
242
+ %sel = select <2 x i1 > %x , <2 x i32 > %ext , <2 x i32 > <i32 42 , i32 12 >, !prof !0
243
+ ret <2 x i32 > %sel
244
+ }
245
+
246
+ define i32 @sext_false_val_must_be_zero (i1 %x ) {
247
+ ; CHECK-LABEL: @sext_false_val_must_be_zero(
248
+ ; CHECK-NEXT: [[EXT:%.*]] = sext i1 %x to i32
249
+ ; CHECK-NEXT: [[SEL:%.*]] = select i1 %x, i32 42, i32 [[EXT]], !prof !0
250
+ ; CHECK-NEXT: ret i32 [[SEL]]
251
+ ;
252
+ %ext = sext i1 %x to i32
253
+ %sel = select i1 %x , i32 42 , i32 %ext , !prof !0
254
+ ret i32 %sel
255
+ }
256
+
257
+ define <2 x i32 > @sext_false_val_must_be_zero_vec (<2 x i1 > %x ) {
258
+ ; CHECK-LABEL: @sext_false_val_must_be_zero_vec(
259
+ ; CHECK-NEXT: [[EXT:%.*]] = sext <2 x i1> %x to <2 x i32>
260
+ ; CHECK-NEXT: [[SEL:%.*]] = select <2 x i1> %x, <2 x i32> <i32 42, i32 12>, <2 x i32> [[EXT]], !prof !0
261
+ ; CHECK-NEXT: ret <2 x i32> [[SEL]]
262
+ ;
263
+ %ext = sext <2 x i1 > %x to <2 x i32 >
264
+ %sel = select <2 x i1 > %x , <2 x i32 > <i32 42 , i32 12 >, <2 x i32 > %ext , !prof !0
265
+ ret <2 x i32 > %sel
266
+ }
267
+
268
+ define i32 @zext_false_val_must_be_zero (i1 %x ) {
269
+ ; CHECK-LABEL: @zext_false_val_must_be_zero(
270
+ ; CHECK-NEXT: [[EXT:%.*]] = zext i1 %x to i32
271
+ ; CHECK-NEXT: [[SEL:%.*]] = select i1 %x, i32 42, i32 [[EXT]], !prof !0
272
+ ; CHECK-NEXT: ret i32 [[SEL]]
273
+ ;
274
+ %ext = zext i1 %x to i32
275
+ %sel = select i1 %x , i32 42 , i32 %ext , !prof !0
276
+ ret i32 %sel
277
+ }
278
+
279
+ define <2 x i32 > @zext_false_val_must_be_zero_vec (<2 x i1 > %x ) {
280
+ ; CHECK-LABEL: @zext_false_val_must_be_zero_vec(
281
+ ; CHECK-NEXT: [[EXT:%.*]] = zext <2 x i1> %x to <2 x i32>
282
+ ; CHECK-NEXT: [[SEL:%.*]] = select <2 x i1> %x, <2 x i32> <i32 42, i32 12>, <2 x i32> [[EXT]], !prof !0
283
+ ; CHECK-NEXT: ret <2 x i32> [[SEL]]
284
+ ;
285
+ %ext = zext <2 x i1 > %x to <2 x i32 >
286
+ %sel = select <2 x i1 > %x , <2 x i32 > <i32 42 , i32 12 >, <2 x i32 > %ext , !prof !0
287
+ ret <2 x i32 > %sel
288
+ }
289
+
290
+ !0 = !{!"branch_weights" , i32 3 , i32 5 }
291
+
0 commit comments