475 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes=constraint-elimination -S %s | FileCheck %s3 4declare void @llvm.assume(i1)5 6define i1 @test_eq_1(i8 %a, i8 %b) {7; CHECK-LABEL: @test_eq_1(8; CHECK-NEXT: entry:9; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[A:%.*]], [[B:%.*]]10; CHECK-NEXT: br i1 [[CMP]], label [[THEN:%.*]], label [[ELSE:%.*]]11; CHECK: then:12; CHECK-NEXT: [[RES_1:%.*]] = xor i1 true, true13; CHECK-NEXT: [[RES_2:%.*]] = xor i1 [[RES_1]], true14; CHECK-NEXT: [[RES_3:%.*]] = xor i1 [[RES_2]], true15; CHECK-NEXT: [[RES_4:%.*]] = xor i1 [[RES_3]], false16; CHECK-NEXT: [[RES_5:%.*]] = xor i1 [[RES_4]], false17; CHECK-NEXT: [[C_1:%.*]] = icmp ult i8 [[B]], 9918; CHECK-NEXT: [[RES_6:%.*]] = xor i1 [[RES_5]], [[C_1]]19; CHECK-NEXT: ret i1 [[RES_6]]20; CHECK: else:21; CHECK-NEXT: [[F_3:%.*]] = icmp eq i8 [[A]], [[B]]22; CHECK-NEXT: [[F_4:%.*]] = icmp eq i8 [[B]], [[A]]23; CHECK-NEXT: [[RES_7:%.*]] = xor i1 [[F_3]], [[F_4]]24; CHECK-NEXT: [[C_2:%.*]] = icmp ult i8 [[B]], 9925; CHECK-NEXT: [[RES_8:%.*]] = xor i1 [[RES_7]], [[C_2]]26; CHECK-NEXT: [[C_3:%.*]] = icmp uge i8 [[A]], [[B]]27; CHECK-NEXT: [[RES_9:%.*]] = xor i1 [[RES_8]], [[C_3]]28; CHECK-NEXT: [[C_4:%.*]] = icmp ule i8 [[A]], [[B]]29; CHECK-NEXT: [[RES_10:%.*]] = xor i1 [[RES_9]], [[C_4]]30; CHECK-NEXT: [[C_5:%.*]] = icmp ugt i8 [[B]], [[A]]31; CHECK-NEXT: [[RES_11:%.*]] = xor i1 [[RES_10]], [[C_5]]32; CHECK-NEXT: [[C_6:%.*]] = icmp ult i8 [[B]], [[A]]33; CHECK-NEXT: [[RES_12:%.*]] = xor i1 [[RES_11]], [[C_6]]34; CHECK-NEXT: ret i1 [[RES_12]]35;36entry:37 %cmp = icmp eq i8 %a, %b38 br i1 %cmp, label %then, label %else39 40then:41 %t.1 = icmp uge i8 %a, %b42 %t.2 = icmp ule i8 %a, %b43 %res.1 = xor i1 %t.1, %t.244 45 %t.3 = icmp eq i8 %a, %b46 %res.2 = xor i1 %res.1, %t.347 48 %t.4 = icmp eq i8 %b, %a49 %res.3 = xor i1 %res.2, %t.450 51 %f.1 = icmp ugt i8 %b, %a52 %res.4 = xor i1 %res.3, %f.153 54 %f.2 = icmp ult i8 %b, %a55 %res.5 = xor i1 %res.4, %f.256 57 %c.1 = icmp ult i8 %b, 9958 %res.6 = xor i1 %res.5, %c.159 ret i1 %res.660 61else:62 %f.3 = icmp eq i8 %a, %b63 %f.4 = icmp eq i8 %b, %a64 %res.7 = xor i1 %f.3, %f.465 66 %c.2 = icmp ult i8 %b, 9967 %res.8 = xor i1 %res.7, %c.268 69 %c.3 = icmp uge i8 %a, %b70 %res.9 = xor i1 %res.8, %c.371 72 %c.4 = icmp ule i8 %a, %b73 %res.10 = xor i1 %res.9, %c.474 75 %c.5 = icmp ugt i8 %b, %a76 %res.11 = xor i1 %res.10, %c.577 78 %c.6 = icmp ult i8 %b, %a79 %res.12 = xor i1 %res.11, %c.680 ret i1 %res.1281}82 83define i1 @test_eq_2(i8 %a, i8 %b) {84; CHECK-LABEL: @test_eq_2(85; CHECK-NEXT: entry:86; CHECK-NEXT: [[PRE_1:%.*]] = icmp eq i8 [[A:%.*]], [[B:%.*]]87; CHECK-NEXT: br i1 [[PRE_1]], label [[THEN:%.*]], label [[ELSE:%.*]]88; CHECK: then:89; CHECK-NEXT: [[PRE_3:%.*]] = icmp ult i8 [[B]], 10090; CHECK-NEXT: br i1 [[PRE_3]], label [[THEN_THEN:%.*]], label [[THEN_ELSE:%.*]]91; CHECK: then.then:92; CHECK-NEXT: [[XOR_1:%.*]] = xor i1 true, true93; CHECK-NEXT: [[XOR_2:%.*]] = xor i1 [[XOR_1]], false94; CHECK-NEXT: [[XOR_3:%.*]] = xor i1 [[XOR_2]], false95; CHECK-NEXT: [[XOR_4:%.*]] = xor i1 [[XOR_3]], false96; CHECK-NEXT: [[C_1:%.*]] = icmp ult i8 [[A]], 9997; CHECK-NEXT: [[XOR_5:%.*]] = xor i1 [[XOR_4]], [[C_1]]98; CHECK-NEXT: [[C_2:%.*]] = icmp ugt i8 [[A]], 9899; CHECK-NEXT: [[XOR_6:%.*]] = xor i1 [[XOR_5]], [[C_1]]100; CHECK-NEXT: ret i1 [[XOR_6]]101; CHECK: then.else:102; CHECK-NEXT: [[XOR_7:%.*]] = xor i1 false, false103; CHECK-NEXT: [[XOR_8:%.*]] = xor i1 [[XOR_7]], true104; CHECK-NEXT: [[XOR_9:%.*]] = xor i1 [[XOR_8]], true105; CHECK-NEXT: [[XOR_10:%.*]] = xor i1 [[XOR_9]], true106; CHECK-NEXT: [[XOR_11:%.*]] = xor i1 [[XOR_10]], false107; CHECK-NEXT: [[XOR_12:%.*]] = xor i1 [[XOR_11]], true108; CHECK-NEXT: ret i1 [[XOR_12]]109; CHECK: else:110; CHECK-NEXT: [[CMP_2:%.*]] = icmp ult i8 [[A]], 100111; CHECK-NEXT: ret i1 [[CMP_2]]112;113entry:114 %pre.1 = icmp eq i8 %a, %b115 br i1 %pre.1, label %then, label %else116 117then:118 %pre.3 = icmp ult i8 %b, 100119 br i1 %pre.3, label %then.then, label %then.else120 121then.then:122 %t.1 = icmp ult i8 %a, 100123 %t.2 = icmp ult i8 %b, 100124 %xor.1 = xor i1 %t.1, %t.2125 126 %f.1 = icmp uge i8 %a, 100127 %xor.2 = xor i1 %xor.1, %f.1128 129 %f.2 = icmp uge i8 %b, 100130 %xor.3 = xor i1 %xor.2, %f.2131 132 %f.3.1 = icmp ugt i8 %a, 99133 %xor.4 = xor i1 %xor.3, %f.3.1134 135 %c.1 = icmp ult i8 %a, 99136 %xor.5 = xor i1 %xor.4, %c.1137 138 %c.2 = icmp ugt i8 %a, 98139 %xor.6 = xor i1 %xor.5, %c.1140 141 ret i1 %xor.6142 143then.else:144 %f.4 = icmp ult i8 %a, 100145 %f.5 = icmp ult i8 %b, 100146 %xor.7 = xor i1 %f.4, %f.5147 148 %t.3 = icmp uge i8 %a, 100149 %xor.8 = xor i1 %xor.7, %t.3150 151 %t.4 = icmp uge i8 %b, 100152 %xor.9 = xor i1 %xor.8, %t.4153 154 %t.5 = icmp ugt i8 %a, 99155 %xor.10 = xor i1 %xor.9, %t.5156 157 %c.3 = icmp ult i8 %a, 99158 %xor.11 = xor i1 %xor.10, %c.3159 160 %c.4 = icmp ugt i8 %a, 98161 %xor.12 = xor i1 %xor.11, %c.4162 163 ret i1 %xor.12164 165else:166 %cmp.2 = icmp ult i8 %a, 100167 ret i1 %cmp.2168}169 170; Test of explicitly using uge & ule instead of eq.171define i1 @test_eq_as_uge_ule_(i8 %a, i8 %b) {172; CHECK-LABEL: @test_eq_as_uge_ule_(173; CHECK-NEXT: entry:174; CHECK-NEXT: [[PRE_1:%.*]] = icmp uge i8 [[A:%.*]], [[B:%.*]]175; CHECK-NEXT: [[PRE_2:%.*]] = icmp ule i8 [[A]], [[B]]176; CHECK-NEXT: [[PRE_AND:%.*]] = and i1 [[PRE_1]], [[PRE_2]]177; CHECK-NEXT: br i1 [[PRE_AND]], label [[THEN:%.*]], label [[ELSE:%.*]]178; CHECK: then:179; CHECK-NEXT: [[PRE_3:%.*]] = icmp ult i8 [[B]], 100180; CHECK-NEXT: br i1 [[PRE_3]], label [[THEN_THEN:%.*]], label [[THEN_ELSE:%.*]]181; CHECK: then.then:182; CHECK-NEXT: [[XOR_1:%.*]] = xor i1 true, true183; CHECK-NEXT: [[XOR_2:%.*]] = xor i1 [[XOR_1]], false184; CHECK-NEXT: [[XOR_3:%.*]] = xor i1 [[XOR_2]], false185; CHECK-NEXT: [[XOR_4:%.*]] = xor i1 [[XOR_3]], false186; CHECK-NEXT: [[C_1:%.*]] = icmp ult i8 [[A]], 99187; CHECK-NEXT: [[XOR_5:%.*]] = xor i1 [[XOR_4]], [[C_1]]188; CHECK-NEXT: [[C_2:%.*]] = icmp ugt i8 [[A]], 98189; CHECK-NEXT: [[XOR_6:%.*]] = xor i1 [[XOR_5]], [[C_1]]190; CHECK-NEXT: ret i1 [[XOR_6]]191; CHECK: then.else:192; CHECK-NEXT: [[XOR_7:%.*]] = xor i1 false, false193; CHECK-NEXT: [[XOR_8:%.*]] = xor i1 [[XOR_7]], true194; CHECK-NEXT: [[XOR_9:%.*]] = xor i1 [[XOR_8]], true195; CHECK-NEXT: [[XOR_10:%.*]] = xor i1 [[XOR_9]], true196; CHECK-NEXT: [[XOR_11:%.*]] = xor i1 [[XOR_10]], false197; CHECK-NEXT: [[XOR_12:%.*]] = xor i1 [[XOR_11]], true198; CHECK-NEXT: ret i1 [[XOR_12]]199; CHECK: else:200; CHECK-NEXT: [[CMP_2:%.*]] = icmp ult i8 [[A]], 100201; CHECK-NEXT: ret i1 [[CMP_2]]202;203entry:204 %pre.1 = icmp uge i8 %a, %b205 %pre.2 = icmp ule i8 %a, %b206 %pre.and = and i1 %pre.1, %pre.2207 br i1 %pre.and, label %then, label %else208 209then:210 %pre.3 = icmp ult i8 %b, 100211 br i1 %pre.3, label %then.then, label %then.else212 213then.then:214 %t.1 = icmp ult i8 %a, 100215 %t.2 = icmp ult i8 %b, 100216 %xor.1 = xor i1 %t.1, %t.2217 218 %f.1 = icmp uge i8 %a, 100219 %xor.2 = xor i1 %xor.1, %f.1220 221 %f.2 = icmp uge i8 %b, 100222 %xor.3 = xor i1 %xor.2, %f.2223 224 %f.3.1 = icmp ugt i8 %a, 99225 %xor.4 = xor i1 %xor.3, %f.3.1226 227 %c.1 = icmp ult i8 %a, 99228 %xor.5 = xor i1 %xor.4, %c.1229 230 %c.2 = icmp ugt i8 %a, 98231 %xor.6 = xor i1 %xor.5, %c.1232 233 ret i1 %xor.6234 235then.else:236 %f.4 = icmp ult i8 %a, 100237 %f.5 = icmp ult i8 %b, 100238 %xor.7 = xor i1 %f.4, %f.5239 240 %t.3 = icmp uge i8 %a, 100241 %xor.8 = xor i1 %xor.7, %t.3242 243 %t.4 = icmp uge i8 %b, 100244 %xor.9 = xor i1 %xor.8, %t.4245 246 %t.5 = icmp ugt i8 %a, 99247 %xor.10 = xor i1 %xor.9, %t.5248 249 %c.3 = icmp ult i8 %a, 99250 %xor.11 = xor i1 %xor.10, %c.3251 252 %c.4 = icmp ugt i8 %a, 98253 %xor.12 = xor i1 %xor.11, %c.4254 255 ret i1 %xor.12256 257else:258 %cmp.2 = icmp ult i8 %a, 100259 ret i1 %cmp.2260}261 262 263define i1 @test_eq_ult_and(i8 %a, i8 %b) {264; CHECK-LABEL: @test_eq_ult_and(265; CHECK-NEXT: entry:266; CHECK-NEXT: [[PRE_1:%.*]] = icmp eq i8 [[A:%.*]], [[B:%.*]]267; CHECK-NEXT: [[PRE_2:%.*]] = icmp ult i8 [[B]], 100268; CHECK-NEXT: [[PRE_AND:%.*]] = and i1 [[PRE_1]], [[PRE_2]]269; CHECK-NEXT: br i1 [[PRE_AND]], label [[THEN:%.*]], label [[ELSE:%.*]]270; CHECK: then:271; CHECK-NEXT: [[XOR_1:%.*]] = xor i1 true, true272; CHECK-NEXT: [[XOR_2:%.*]] = xor i1 [[XOR_1]], false273; CHECK-NEXT: [[XOR_3:%.*]] = xor i1 [[XOR_2]], false274; CHECK-NEXT: [[XOR_4:%.*]] = xor i1 [[XOR_3]], false275; CHECK-NEXT: [[C_1:%.*]] = icmp ult i8 [[A]], 99276; CHECK-NEXT: [[XOR_5:%.*]] = xor i1 [[XOR_4]], [[C_1]]277; CHECK-NEXT: [[C_2:%.*]] = icmp ugt i8 [[A]], 98278; CHECK-NEXT: [[XOR_6:%.*]] = xor i1 [[XOR_5]], [[C_1]]279; CHECK-NEXT: ret i1 [[XOR_6]]280; CHECK: else:281; CHECK-NEXT: [[F_4:%.*]] = icmp ult i8 [[A]], 100282; CHECK-NEXT: [[F_5:%.*]] = icmp ult i8 [[B]], 100283; CHECK-NEXT: [[XOR_7:%.*]] = xor i1 [[F_4]], [[F_5]]284; CHECK-NEXT: [[T_3:%.*]] = icmp uge i8 [[A]], 100285; CHECK-NEXT: [[XOR_8:%.*]] = xor i1 [[XOR_7]], [[T_3]]286; CHECK-NEXT: [[T_4:%.*]] = icmp uge i8 [[B]], 100287; CHECK-NEXT: [[XOR_9:%.*]] = xor i1 [[XOR_8]], [[T_4]]288; CHECK-NEXT: [[T_5:%.*]] = icmp ugt i8 [[A]], 99289; CHECK-NEXT: [[XOR_10:%.*]] = xor i1 [[XOR_9]], [[T_5]]290; CHECK-NEXT: [[C_3:%.*]] = icmp ult i8 [[A]], 99291; CHECK-NEXT: [[XOR_11:%.*]] = xor i1 [[XOR_10]], [[C_3]]292; CHECK-NEXT: [[C_4:%.*]] = icmp ugt i8 [[A]], 98293; CHECK-NEXT: [[XOR_12:%.*]] = xor i1 [[XOR_11]], [[C_4]]294; CHECK-NEXT: ret i1 [[XOR_12]]295;296entry:297 %pre.1 = icmp eq i8 %a, %b298 %pre.2 = icmp ult i8 %b, 100299 %pre.and = and i1 %pre.1, %pre.2300 br i1 %pre.and, label %then, label %else301 302then:303 %t.1 = icmp ult i8 %a, 100304 %t.2 = icmp ult i8 %b, 100305 %xor.1 = xor i1 %t.1, %t.2306 307 %f.1 = icmp uge i8 %a, 100308 %xor.2 = xor i1 %xor.1, %f.1309 310 %f.2 = icmp uge i8 %b, 100311 %xor.3 = xor i1 %xor.2, %f.2312 313 %f.3.1 = icmp ugt i8 %a, 99314 %xor.4 = xor i1 %xor.3, %f.3.1315 316 %c.1 = icmp ult i8 %a, 99317 %xor.5 = xor i1 %xor.4, %c.1318 319 %c.2 = icmp ugt i8 %a, 98320 %xor.6 = xor i1 %xor.5, %c.1321 322 ret i1 %xor.6323 324else:325 %f.4 = icmp ult i8 %a, 100326 %f.5 = icmp ult i8 %b, 100327 %xor.7 = xor i1 %f.4, %f.5328 329 %t.3 = icmp uge i8 %a, 100330 %xor.8 = xor i1 %xor.7, %t.3331 332 %t.4 = icmp uge i8 %b, 100333 %xor.9 = xor i1 %xor.8, %t.4334 335 %t.5 = icmp ugt i8 %a, 99336 %xor.10 = xor i1 %xor.9, %t.5337 338 %c.3 = icmp ult i8 %a, 99339 %xor.11 = xor i1 %xor.10, %c.3340 341 %c.4 = icmp ugt i8 %a, 98342 %xor.12 = xor i1 %xor.11, %c.4343 344 ret i1 %xor.12345}346 347define i1 @assume_b_plus_1_ult_a(i64 %a, i64 %b) {348; CHECK-LABEL: @assume_b_plus_1_ult_a(349; CHECK-NEXT: [[TMP1:%.*]] = add nuw i64 [[B:%.*]], 1350; CHECK-NEXT: [[TMP2:%.*]] = icmp ult i64 [[TMP1]], [[A:%.*]]351; CHECK-NEXT: tail call void @llvm.assume(i1 [[TMP2]])352; CHECK-NEXT: ret i1 false353;354 %1 = add nuw i64 %b, 1355 %2 = icmp ult i64 %1, %a356 tail call void @llvm.assume(i1 %2)357 %3 = icmp eq i64 %a, %b358 ret i1 %3359}360 361define i1 @assume_a_plus_1_eq_b(i64 %a, i64 %b) {362; CHECK-LABEL: @assume_a_plus_1_eq_b(363; CHECK-NEXT: [[TMP1:%.*]] = add nuw i64 [[A:%.*]], 1364; CHECK-NEXT: [[TMP2:%.*]] = icmp eq i64 [[TMP1]], [[B:%.*]]365; CHECK-NEXT: tail call void @llvm.assume(i1 [[TMP2]])366; CHECK-NEXT: ret i1 false367;368 %1 = add nuw i64 %a, 1369 %2 = icmp eq i64 %1, %b370 tail call void @llvm.assume(i1 %2)371 %3 = icmp eq i64 %a, %b372 ret i1 %3373}374 375define i1 @assume_a_ge_b_and_b_ge_c(i64 %a, i64 %b, i64 %c) {376; CHECK-LABEL: @assume_a_ge_b_and_b_ge_c(377; CHECK-NEXT: [[TMP1:%.*]] = icmp uge i64 [[A:%.*]], [[B:%.*]]378; CHECK-NEXT: tail call void @llvm.assume(i1 [[TMP1]])379; CHECK-NEXT: [[TMP2:%.*]] = icmp uge i64 [[B]], [[C:%.*]]380; CHECK-NEXT: tail call void @llvm.assume(i1 [[TMP2]])381; CHECK-NEXT: [[TMP3:%.*]] = icmp eq i64 [[A]], [[C]]382; CHECK-NEXT: ret i1 [[TMP3]]383;384 %1 = icmp uge i64 %a, %b385 tail call void @llvm.assume(i1 %1)386 %2 = icmp uge i64 %b, %c387 tail call void @llvm.assume(i1 %2)388 %3 = icmp eq i64 %a, %c389 ret i1 %3390}391 392define i1 @test_transitivity_of_equality_and_plus_1(i64 %a, i64 %b, i64 %c) {393; CHECK-LABEL: @test_transitivity_of_equality_and_plus_1(394; CHECK-NEXT: entry:395; CHECK-NEXT: [[PRE_1:%.*]] = icmp eq i64 [[A:%.*]], [[B:%.*]]396; CHECK-NEXT: br i1 [[PRE_1]], label [[AB_EQUAL:%.*]], label [[NOT_EQ:%.*]]397; CHECK: ab_equal:398; CHECK-NEXT: [[BC_EQ:%.*]] = icmp eq i64 [[B]], [[C:%.*]]399; CHECK-NEXT: br i1 [[BC_EQ]], label [[BC_EQUAL:%.*]], label [[NOT_EQ]]400; CHECK: bc_equal:401; CHECK-NEXT: [[A_PLUS_1:%.*]] = add nuw i64 [[A]], 1402; CHECK-NEXT: [[C_PLUS_1:%.*]] = add nuw i64 [[C]], 1403; CHECK-NEXT: [[RESULT:%.*]] = and i1 true, true404; CHECK-NEXT: ret i1 [[RESULT]]405; CHECK: not_eq:406; CHECK-NEXT: ret i1 false407;408entry:409 %pre.1 = icmp eq i64 %a, %b410 br i1 %pre.1, label %ab_equal, label %not_eq411 412ab_equal:413 %bc_eq = icmp eq i64 %b, %c414 br i1 %bc_eq, label %bc_equal, label %not_eq415 416bc_equal:417 %ac_eq = icmp eq i64 %a, %c418 %a_plus_1 = add nuw i64 %a, 1419 %c_plus_1 = add nuw i64 %c, 1420 %ac_plus_1_eq = icmp eq i64 %a_plus_1, %c_plus_1421 %result = and i1 %ac_eq, %ac_plus_1_eq422 ret i1 %result423 424not_eq:425 ret i1 false426}427 428define i1 @test_eq_for_signed_cmp(i32 noundef %v0, i32 noundef %v1, i32 noundef %v2) {429; CHECK-LABEL: @test_eq_for_signed_cmp(430; CHECK-NEXT: entry:431; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[V2:%.*]], [[V0:%.*]]432; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i32 [[V0]], [[V1:%.*]]433; CHECK-NEXT: [[AND0:%.*]] = and i1 [[CMP1]], [[CMP]]434; CHECK-NEXT: [[CMP4:%.*]] = icmp sgt i32 [[V1]], [[V2]]435; CHECK-NEXT: ret i1 false436;437entry:438 %cmp = icmp eq i32 %v2, %v0439 %cmp1 = icmp sge i32 %v0, %v1440 %and0 = and i1 %cmp1, %cmp441 %cmp4 = icmp sgt i32 %v1, %v2442 %and1 = and i1 %cmp4, %and0443 ret i1 %and1444}445 446define i1 @test_eq_for_signed_cmp_with_decompsition(i32 noundef %v0, i32 noundef %v1, i32 noundef %v2, i32 noundef %addend0, i32 noundef %addend1) {447; CHECK-LABEL: @test_eq_for_signed_cmp_with_decompsition(448; CHECK-NEXT: entry:449; CHECK-NEXT: [[V0ADD:%.*]] = add nsw i32 [[V0:%.*]], [[ADDEND0:%.*]]450; CHECK-NEXT: [[V1ADD:%.*]] = add nsw i32 [[V1:%.*]], [[ADDEND1:%.*]]451; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[V2:%.*]], [[V0ADD]]452; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i32 [[V0ADD]], [[V1ADD]]453; CHECK-NEXT: [[CMP2:%.*]] = icmp sge i32 [[ADDEND0]], 0454; CHECK-NEXT: [[CMP3:%.*]] = icmp slt i32 [[ADDEND0]], [[ADDEND1]]455; CHECK-NEXT: [[AND0:%.*]] = and i1 [[CMP1]], [[CMP]]456; CHECK-NEXT: [[AND1:%.*]] = and i1 [[AND0]], [[CMP2]]457; CHECK-NEXT: [[AND2:%.*]] = and i1 [[AND1]], [[CMP3]]458; CHECK-NEXT: [[CMP4:%.*]] = icmp sgt i32 [[V1]], [[V2]]459; CHECK-NEXT: ret i1 false460;461entry:462 %v0add = add nsw i32 %v0, %addend0463 %v1add = add nsw i32 %v1, %addend1464 %cmp = icmp eq i32 %v2, %v0add465 %cmp1 = icmp sge i32 %v0add, %v1add466 %cmp2 = icmp sge i32 %addend0, 0467 %cmp3 = icmp slt i32 %addend0, %addend1468 %and0 = and i1 %cmp1, %cmp469 %and1 = and i1 %and0, %cmp2470 %and2 = and i1 %and1, %cmp3471 %cmp4 = icmp sgt i32 %v1, %v2472 %and3 = and i1 %cmp4, %and2473 ret i1 %and3474}475