1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt < %s -passes=instcombine -S | FileCheck %s 3 4; %cmp should not vanish 5define i1 @f(i32 %i1) { 6; CHECK-LABEL: @f( 7; CHECK-NEXT: entry: 8; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[I1:%.*]], 0 9; CHECK-NEXT: [[SHR:%.*]] = lshr i32 7, [[I1]] 10; CHECK-NEXT: [[CMP4:%.*]] = icmp sgt i32 [[I1]], [[SHR]] 11; CHECK-NEXT: [[I2:%.*]] = select i1 [[CMP]], i1 true, i1 [[CMP4]] 12; CHECK-NEXT: ret i1 [[I2]] 13; 14entry: 15 %cmp = icmp slt i32 %i1, 0 16 %shr = ashr i32 7, %i1 17 %cmp4 = icmp sgt i32 %i1, %shr 18 %i2 = select i1 %cmp, i1 true, i1 %cmp4 19 ret i1 %i2 20} 21 22; %cmp should not vanish 23define i32 @f2(i32 signext %g, i32 zeroext %h) { 24; CHECK-LABEL: @f2( 25; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[G:%.*]], 0 26; CHECK-NEXT: [[SHR:%.*]] = lshr i32 7, [[H:%.*]] 27; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i32 [[G]], [[SHR]] 28; CHECK-NEXT: [[DOT0:%.*]] = select i1 [[CMP]], i1 true, i1 [[CMP1]] 29; CHECK-NEXT: [[LOR_EXT:%.*]] = zext i1 [[DOT0]] to i32 30; CHECK-NEXT: ret i32 [[LOR_EXT]] 31; 32 %cmp = icmp slt i32 %g, 0 33 %shr = ashr i32 7, %h 34 %cmp1 = icmp sgt i32 %g, %shr 35 %.0 = select i1 %cmp, i1 true, i1 %cmp1 36 %lor.ext = zext i1 %.0 to i32 37 ret i32 %lor.ext 38} 39