@@ -240,3 +240,43 @@ define i32 @vec_to_scalar_select_vector(<2 x i1> %b) {
240
240
%c = call i32 @llvm.vector.reduce.add.v2i32 (<2 x i32 > %s )
241
241
ret i32 %c
242
242
}
243
+
244
+ define i8 @test_drop_noundef (i1 %cond , i8 %val ) {
245
+ ; CHECK-LABEL: @test_drop_noundef(
246
+ ; CHECK-NEXT: entry:
247
+ ; CHECK-NEXT: [[TMP0:%.*]] = call noundef i8 @llvm.smin.i8(i8 [[VAL:%.*]], i8 0)
248
+ ; CHECK-NEXT: [[RET:%.*]] = select i1 [[COND:%.*]], i8 -1, i8 [[TMP0]]
249
+ ; CHECK-NEXT: ret i8 [[RET]]
250
+ ;
251
+ entry:
252
+ %sel = select i1 %cond , i8 -1 , i8 %val
253
+ %ret = call noundef i8 @llvm.smin.i8 (i8 %sel , i8 0 )
254
+ ret i8 %ret
255
+ }
256
+
257
+ define i1 @pr85536 (i32 %a ) {
258
+ ; CHECK-LABEL: @pr85536(
259
+ ; CHECK-NEXT: entry:
260
+ ; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i32 [[A:%.*]], 31
261
+ ; CHECK-NEXT: [[SHL1:%.*]] = shl nsw i32 -1, [[A]]
262
+ ; CHECK-NEXT: [[ZEXT:%.*]] = zext i32 [[SHL1]] to i64
263
+ ; CHECK-NEXT: [[SHL2:%.*]] = shl i64 [[ZEXT]], 48
264
+ ; CHECK-NEXT: [[SHR:%.*]] = ashr exact i64 [[SHL2]], 48
265
+ ; CHECK-NEXT: [[TMP0:%.*]] = call noundef i64 @llvm.smin.i64(i64 [[SHR]], i64 0)
266
+ ; CHECK-NEXT: [[TMP1:%.*]] = and i64 [[TMP0]], 65535
267
+ ; CHECK-NEXT: [[RET1:%.*]] = icmp eq i64 [[TMP1]], 0
268
+ ; CHECK-NEXT: [[RET:%.*]] = and i1 [[CMP1]], [[RET1]]
269
+ ; CHECK-NEXT: ret i1 [[RET]]
270
+ ;
271
+ entry:
272
+ %cmp1 = icmp ugt i32 %a , 30
273
+ %shl1 = shl nsw i32 -1 , %a
274
+ %zext = zext i32 %shl1 to i64
275
+ %shl2 = shl i64 %zext , 48
276
+ %shr = ashr exact i64 %shl2 , 48
277
+ %sel = select i1 %cmp1 , i64 -1 , i64 %shr
278
+ %smin = call noundef i64 @llvm.smin.i64 (i64 %sel , i64 0 )
279
+ %masked = and i64 %smin , 65535
280
+ %ret = icmp eq i64 %masked , 0
281
+ ret i1 %ret
282
+ }
0 commit comments