brintos

brintos / llvm-project-archived public Read only

0
0
Text · 14.6 KiB · 511a08f Raw
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