1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt -passes='default<O1>' -S < %s | FileCheck %s 3 4define i32 @PR38781(i32 noundef %a, i32 noundef %b) { 5; CHECK-LABEL: @PR38781( 6; CHECK-NEXT: [[TMP1:%.*]] = or i32 [[B:%.*]], [[A:%.*]] 7; CHECK-NEXT: [[TMP2:%.*]] = icmp sgt i32 [[TMP1]], -1 8; CHECK-NEXT: [[AND:%.*]] = zext i1 [[TMP2]] to i32 9; CHECK-NEXT: ret i32 [[AND]] 10; 11 %cmp = icmp sge i32 %a, 0 12 %conv = zext i1 %cmp to i32 13 %cmp1 = icmp sge i32 %b, 0 14 %conv2 = zext i1 %cmp1 to i32 15 %and = and i32 %conv, %conv2 16 ret i32 %and 17} 18 19define i1 @PR54692_a(i8 noundef signext %c) #0 { 20; CHECK-LABEL: @PR54692_a( 21; CHECK-NEXT: entry: 22; CHECK-NEXT: [[TMP0:%.*]] = icmp ult i8 [[C:%.*]], 32 23; CHECK-NEXT: [[CMP5:%.*]] = icmp eq i8 [[C]], 127 24; CHECK-NEXT: [[OR1:%.*]] = or i1 [[TMP0]], [[CMP5]] 25; CHECK-NEXT: ret i1 [[OR1]] 26; 27entry: 28 %conv = sext i8 %c to i32 29 %cmp = icmp sge i32 %conv, 0 30 br i1 %cmp, label %land.rhs, label %land.end 31 32land.rhs: 33 %conv1 = sext i8 %c to i32 34 %cmp2 = icmp sle i32 %conv1, 31 35 br label %land.end 36 37land.end: 38 %0 = phi i1 [ false, %entry ], [ %cmp2, %land.rhs ] 39 %conv3 = zext i1 %0 to i32 40 %conv4 = sext i8 %c to i32 41 %cmp5 = icmp eq i32 %conv4, 127 42 %conv6 = zext i1 %cmp5 to i32 43 %or = or i32 %conv3, %conv6 44 %tobool = icmp ne i32 %or, 0 45 ret i1 %tobool 46} 47 48define i1 @PR54692_b(i8 noundef signext %c) { 49; CHECK-LABEL: @PR54692_b( 50; CHECK-NEXT: entry: 51; CHECK-NEXT: [[TMP0:%.*]] = icmp ult i8 [[C:%.*]], 32 52; CHECK-NEXT: [[CMP6:%.*]] = icmp eq i8 [[C]], 127 53; CHECK-NEXT: [[OR2:%.*]] = or i1 [[TMP0]], [[CMP6]] 54; CHECK-NEXT: ret i1 [[OR2]] 55; 56entry: 57 %conv = sext i8 %c to i32 58 %cmp = icmp sge i32 %conv, 0 59 %conv1 = zext i1 %cmp to i32 60 %conv2 = sext i8 %c to i32 61 %cmp3 = icmp sle i32 %conv2, 31 62 %conv4 = zext i1 %cmp3 to i32 63 %and = and i32 %conv1, %conv4 64 %conv5 = sext i8 %c to i32 65 %cmp6 = icmp eq i32 %conv5, 127 66 %conv7 = zext i1 %cmp6 to i32 67 %or = or i32 %and, %conv7 68 %tobool = icmp ne i32 %or, 0 69 ret i1 %tobool 70} 71 72define i1 @PR54692_c(i8 noundef signext %c) { 73; CHECK-LABEL: @PR54692_c( 74; CHECK-NEXT: entry: 75; CHECK-NEXT: [[TMP0:%.*]] = icmp ult i8 [[C:%.*]], 32 76; CHECK-NEXT: [[CMP6:%.*]] = icmp eq i8 [[C]], 127 77; CHECK-NEXT: [[T0:%.*]] = or i1 [[TMP0]], [[CMP6]] 78; CHECK-NEXT: ret i1 [[T0]] 79; 80entry: 81 %conv = sext i8 %c to i32 82 %cmp = icmp sge i32 %conv, 0 83 %conv1 = zext i1 %cmp to i32 84 %conv2 = sext i8 %c to i32 85 %cmp3 = icmp sle i32 %conv2, 31 86 %conv4 = zext i1 %cmp3 to i32 87 %and = and i32 %conv1, %conv4 88 %tobool = icmp ne i32 %and, 0 89 br i1 %tobool, label %lor.end, label %lor.rhs 90 91lor.rhs: 92 %conv5 = sext i8 %c to i32 93 %cmp6 = icmp eq i32 %conv5, 127 94 br label %lor.end 95 96lor.end: 97 %t0 = phi i1 [ true, %entry ], [ %cmp6, %lor.rhs ] 98 ret i1 %t0 99} 100