242 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes=constraint-elimination -S %s | FileCheck %s3 4define void @test.not.uge.ult(i8 %start, i8 %low, i8 %high) {5; CHECK-LABEL: @test.not.uge.ult(6; CHECK-NEXT: entry:7; CHECK-NEXT: [[SUB_PTR_I:%.*]] = sub i8 [[START:%.*]], 38; CHECK-NEXT: [[C_1:%.*]] = icmp uge i8 [[SUB_PTR_I]], [[HIGH:%.*]]9; CHECK-NEXT: br i1 [[C_1]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]10; CHECK: if.then:11; CHECK-NEXT: ret void12; CHECK: if.end:13; CHECK-NEXT: [[T_0:%.*]] = icmp ult i8 [[START]], [[HIGH]]14; CHECK-NEXT: call void @use(i1 [[T_0]])15; CHECK-NEXT: [[START_1:%.*]] = sub i8 [[START]], 116; CHECK-NEXT: [[T_1:%.*]] = icmp ult i8 [[START_1]], [[HIGH]]17; CHECK-NEXT: call void @use(i1 [[T_1]])18; CHECK-NEXT: [[START_2:%.*]] = sub i8 [[START]], 219; CHECK-NEXT: [[T_2:%.*]] = icmp ult i8 [[START_2]], [[HIGH]]20; CHECK-NEXT: call void @use(i1 [[T_2]])21; CHECK-NEXT: [[START_3:%.*]] = sub i8 [[START]], 322; CHECK-NEXT: [[T_3:%.*]] = icmp ult i8 [[START_3]], [[HIGH]]23; CHECK-NEXT: call void @use(i1 [[T_3]])24; CHECK-NEXT: [[START_4:%.*]] = sub i8 [[START]], 425; CHECK-NEXT: [[C_4:%.*]] = icmp ult i8 [[START_4]], [[HIGH]]26; CHECK-NEXT: call void @use(i1 [[C_4]])27; CHECK-NEXT: ret void28;29entry:30 %sub.ptr.i = sub i8 %start, 331 %c.1 = icmp uge i8 %sub.ptr.i, %high32 br i1 %c.1, label %if.then, label %if.end33 34if.then: ; preds = %entry35 ret void36 37if.end: ; preds = %entry38 %t.0 = icmp ult i8 %start, %high39 call void @use(i1 %t.0)40 %start.1 = sub i8 %start, 141 %t.1 = icmp ult i8 %start.1, %high42 call void @use(i1 %t.1)43 %start.2 = sub i8 %start, 244 %t.2 = icmp ult i8 %start.2, %high45 call void @use(i1 %t.2)46 %start.3 = sub i8 %start, 347 %t.3 = icmp ult i8 %start.3, %high48 call void @use(i1 %t.3)49 %start.4 = sub i8 %start, 450 %c.4 = icmp ult i8 %start.4, %high51 call void @use(i1 %c.4)52 ret void53}54 55define void @test.not.uge.ule(i8 %start, i8 %low, i8 %high) {56; CHECK-LABEL: @test.not.uge.ule(57; CHECK-NEXT: entry:58; CHECK-NEXT: [[SUB_PTR_I:%.*]] = sub i8 [[START:%.*]], 359; CHECK-NEXT: [[C_1:%.*]] = icmp uge i8 [[SUB_PTR_I]], [[HIGH:%.*]]60; CHECK-NEXT: br i1 [[C_1]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]61; CHECK: if.then:62; CHECK-NEXT: ret void63; CHECK: if.end:64; CHECK-NEXT: [[T_0:%.*]] = icmp ule i8 [[START]], [[HIGH]]65; CHECK-NEXT: call void @use(i1 [[T_0]])66; CHECK-NEXT: [[START_1:%.*]] = sub i8 [[START]], 167; CHECK-NEXT: [[T_1:%.*]] = icmp ule i8 [[START_1]], [[HIGH]]68; CHECK-NEXT: call void @use(i1 [[T_1]])69; CHECK-NEXT: [[START_2:%.*]] = sub i8 [[START]], 270; CHECK-NEXT: [[T_2:%.*]] = icmp ule i8 [[START_2]], [[HIGH]]71; CHECK-NEXT: call void @use(i1 [[T_2]])72; CHECK-NEXT: [[START_3:%.*]] = sub i8 [[START]], 373; CHECK-NEXT: [[T_3:%.*]] = icmp ule i8 [[START_3]], [[HIGH]]74; CHECK-NEXT: call void @use(i1 [[T_3]])75; CHECK-NEXT: [[START_4:%.*]] = sub i8 [[START]], 476; CHECK-NEXT: [[T_4:%.*]] = icmp ule i8 [[START_4]], [[HIGH]]77; CHECK-NEXT: call void @use(i1 [[T_4]])78; CHECK-NEXT: [[START_5:%.*]] = sub i8 [[START]], 579; CHECK-NEXT: [[C_5:%.*]] = icmp ule i8 [[START_5]], [[HIGH]]80; CHECK-NEXT: call void @use(i1 [[C_5]])81; CHECK-NEXT: ret void82;83entry:84 %sub.ptr.i = sub i8 %start, 385 %c.1 = icmp uge i8 %sub.ptr.i, %high86 br i1 %c.1, label %if.then, label %if.end87 88if.then: ; preds = %entry89 ret void90 91if.end: ; preds = %entry92 %t.0 = icmp ule i8 %start, %high93 call void @use(i1 %t.0)94 %start.1 = sub i8 %start, 195 %t.1 = icmp ule i8 %start.1, %high96 call void @use(i1 %t.1)97 %start.2 = sub i8 %start, 298 %t.2 = icmp ule i8 %start.2, %high99 call void @use(i1 %t.2)100 %start.3 = sub i8 %start, 3101 %t.3 = icmp ule i8 %start.3, %high102 call void @use(i1 %t.3)103 %start.4 = sub i8 %start, 4104 %t.4 = icmp ule i8 %start.4, %high105 call void @use(i1 %t.4)106 107 %start.5 = sub i8 %start, 5108 %c.5 = icmp ule i8 %start.5, %high109 call void @use(i1 %c.5)110 111 ret void112}113 114define void @test.not.uge.ugt(i8 %start, i8 %low, i8 %high) {115; CHECK-LABEL: @test.not.uge.ugt(116; CHECK-NEXT: entry:117; CHECK-NEXT: [[SUB_PTR_I:%.*]] = sub i8 [[START:%.*]], 3118; CHECK-NEXT: [[C_1:%.*]] = icmp uge i8 [[SUB_PTR_I]], [[HIGH:%.*]]119; CHECK-NEXT: br i1 [[C_1]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]120; CHECK: if.then:121; CHECK-NEXT: ret void122; CHECK: if.end:123; CHECK-NEXT: [[F_0:%.*]] = icmp ugt i8 [[START]], [[HIGH]]124; CHECK-NEXT: call void @use(i1 [[F_0]])125; CHECK-NEXT: [[START_1:%.*]] = sub i8 [[START]], 1126; CHECK-NEXT: [[F_1:%.*]] = icmp ugt i8 [[START_1]], [[HIGH]]127; CHECK-NEXT: call void @use(i1 [[F_1]])128; CHECK-NEXT: [[START_2:%.*]] = sub i8 [[START]], 2129; CHECK-NEXT: [[F_2:%.*]] = icmp ugt i8 [[START_2]], [[HIGH]]130; CHECK-NEXT: call void @use(i1 [[F_2]])131; CHECK-NEXT: [[START_3:%.*]] = sub i8 [[START]], 3132; CHECK-NEXT: [[F_3:%.*]] = icmp ugt i8 [[START_3]], [[HIGH]]133; CHECK-NEXT: call void @use(i1 [[F_3]])134; CHECK-NEXT: [[START_4:%.*]] = sub i8 [[START]], 4135; CHECK-NEXT: [[F_4:%.*]] = icmp ugt i8 [[START_4]], [[HIGH]]136; CHECK-NEXT: call void @use(i1 [[F_4]])137; CHECK-NEXT: [[START_5:%.*]] = sub i8 [[START]], 5138; CHECK-NEXT: [[C_5:%.*]] = icmp ugt i8 [[START_5]], [[HIGH]]139; CHECK-NEXT: call void @use(i1 [[C_5]])140; CHECK-NEXT: ret void141;142entry:143 %sub.ptr.i = sub i8 %start, 3144 %c.1 = icmp uge i8 %sub.ptr.i, %high145 br i1 %c.1, label %if.then, label %if.end146 147if.then: ; preds = %entry148 ret void149 150if.end: ; preds = %entry151 %f.0 = icmp ugt i8 %start, %high152 call void @use(i1 %f.0)153 154 %start.1 = sub i8 %start, 1155 %f.1 = icmp ugt i8 %start.1, %high156 call void @use(i1 %f.1)157 158 %start.2 = sub i8 %start, 2159 %f.2 = icmp ugt i8 %start.2, %high160 call void @use(i1 %f.2)161 162 %start.3 = sub i8 %start, 3163 %f.3 = icmp ugt i8 %start.3, %high164 call void @use(i1 %f.3)165 166 %start.4 = sub i8 %start, 4167 %f.4 = icmp ugt i8 %start.4, %high168 call void @use(i1 %f.4)169 170 %start.5 = sub i8 %start, 5171 %c.5 = icmp ugt i8 %start.5, %high172 call void @use(i1 %c.5)173 174 ret void175}176 177define void @test.not.uge.uge(i8 %start, i8 %low, i8 %high) {178; CHECK-LABEL: @test.not.uge.uge(179; CHECK-NEXT: entry:180; CHECK-NEXT: [[SUB_PTR_I:%.*]] = sub i8 [[START:%.*]], 3181; CHECK-NEXT: [[C_1:%.*]] = icmp uge i8 [[SUB_PTR_I]], [[HIGH:%.*]]182; CHECK-NEXT: br i1 [[C_1]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]183; CHECK: if.then:184; CHECK-NEXT: ret void185; CHECK: if.end:186; CHECK-NEXT: [[F_0:%.*]] = icmp ugt i8 [[START]], [[HIGH]]187; CHECK-NEXT: call void @use(i1 [[F_0]])188; CHECK-NEXT: [[START_1:%.*]] = sub i8 [[START]], 1189; CHECK-NEXT: [[F_1:%.*]] = icmp uge i8 [[START_1]], [[HIGH]]190; CHECK-NEXT: call void @use(i1 [[F_1]])191; CHECK-NEXT: [[START_2:%.*]] = sub i8 [[START]], 2192; CHECK-NEXT: [[F_2:%.*]] = icmp uge i8 [[START_2]], [[HIGH]]193; CHECK-NEXT: call void @use(i1 [[F_2]])194; CHECK-NEXT: [[START_3:%.*]] = sub i8 [[START]], 3195; CHECK-NEXT: [[F_3:%.*]] = icmp uge i8 [[START_3]], [[HIGH]]196; CHECK-NEXT: call void @use(i1 [[F_3]])197; CHECK-NEXT: [[START_4:%.*]] = sub i8 [[START]], 4198; CHECK-NEXT: [[C_4:%.*]] = icmp uge i8 [[START_4]], [[HIGH]]199; CHECK-NEXT: call void @use(i1 [[C_4]])200; CHECK-NEXT: [[START_5:%.*]] = sub i8 [[START]], 5201; CHECK-NEXT: [[C_5:%.*]] = icmp uge i8 [[START_5]], [[HIGH]]202; CHECK-NEXT: call void @use(i1 [[C_5]])203; CHECK-NEXT: ret void204;205entry:206 %sub.ptr.i = sub i8 %start, 3207 %c.1 = icmp uge i8 %sub.ptr.i, %high208 br i1 %c.1, label %if.then, label %if.end209 210if.then: ; preds = %entry211 ret void212 213if.end: ; preds = %entry214 %f.0 = icmp ugt i8 %start, %high215 call void @use(i1 %f.0)216 217 %start.1 = sub i8 %start, 1218 %f.1 = icmp uge i8 %start.1, %high219 call void @use(i1 %f.1)220 221 %start.2 = sub i8 %start, 2222 %f.2 = icmp uge i8 %start.2, %high223 call void @use(i1 %f.2)224 225 %start.3 = sub i8 %start, 3226 %f.3 = icmp uge i8 %start.3, %high227 call void @use(i1 %f.3)228 229 %start.4 = sub i8 %start, 4230 %c.4 = icmp uge i8 %start.4, %high231 call void @use(i1 %c.4)232 233 %start.5 = sub i8 %start, 5234 %c.5 = icmp uge i8 %start.5, %high235 call void @use(i1 %c.5)236 237 ret void238}239 240 241declare void @use(i1)242