@@ -240,3 +240,43 @@ define i32 @vec_to_scalar_select_vector(<2 x i1> %b) {
240240 %c = call i32 @llvm.vector.reduce.add.v2i32 (<2 x i32 > %s )
241241 ret i32 %c
242242}
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