293 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: [[ADD_PTR_I:%.*]] = add i8 [[START:%.*]], 38; CHECK-NEXT: [[C_1:%.*]] = icmp uge i8 [[ADD_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:%.*]] = add 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:%.*]] = add 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:%.*]] = add 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:%.*]] = add 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 %add.ptr.i = add i8 %start, 331 %c.1 = icmp uge i8 %add.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 = add i8 %start, 141 %t.1 = icmp ult i8 %start.1, %high42 call void @use(i1 %t.1)43 %start.2 = add i8 %start, 244 %t.2 = icmp ult i8 %start.2, %high45 call void @use(i1 %t.2)46 %start.3 = add i8 %start, 347 %t.3 = icmp ult i8 %start.3, %high48 call void @use(i1 %t.3)49 %start.4 = add 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.sge.ult(i8 %start, i8 %low, i8 %high) {56; CHECK-LABEL: @test.not.sge.ult(57; CHECK-NEXT: entry:58; CHECK-NEXT: [[ADD_PTR_I:%.*]] = add i8 [[START:%.*]], 359; CHECK-NEXT: [[C_1:%.*]] = icmp sge i8 [[ADD_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 slt i8 [[START]], [[HIGH]]65; CHECK-NEXT: call void @use(i1 [[T_0]])66; CHECK-NEXT: [[START_1:%.*]] = add i8 [[START]], 167; CHECK-NEXT: [[T_1:%.*]] = icmp slt i8 [[START_1]], [[HIGH]]68; CHECK-NEXT: call void @use(i1 [[T_1]])69; CHECK-NEXT: [[START_2:%.*]] = add i8 [[START]], 270; CHECK-NEXT: [[T_2:%.*]] = icmp slt i8 [[START_2]], [[HIGH]]71; CHECK-NEXT: call void @use(i1 [[T_2]])72; CHECK-NEXT: [[START_3:%.*]] = add i8 [[START]], 373; CHECK-NEXT: [[T_3:%.*]] = icmp slt i8 [[START_3]], [[HIGH]]74; CHECK-NEXT: call void @use(i1 [[T_3]])75; CHECK-NEXT: [[START_4:%.*]] = add i8 [[START]], 476; CHECK-NEXT: [[C_4:%.*]] = icmp slt i8 [[START_4]], [[HIGH]]77; CHECK-NEXT: call void @use(i1 [[C_4]])78; CHECK-NEXT: ret void79;80entry:81 %add.ptr.i = add i8 %start, 382 %c.1 = icmp sge i8 %add.ptr.i, %high83 br i1 %c.1, label %if.then, label %if.end84 85if.then: ; preds = %entry86 ret void87 88if.end: ; preds = %entry89 %t.0 = icmp slt i8 %start, %high90 call void @use(i1 %t.0)91 %start.1 = add i8 %start, 192 %t.1 = icmp slt i8 %start.1, %high93 call void @use(i1 %t.1)94 %start.2 = add i8 %start, 295 %t.2 = icmp slt i8 %start.2, %high96 call void @use(i1 %t.2)97 %start.3 = add i8 %start, 398 %t.3 = icmp slt i8 %start.3, %high99 call void @use(i1 %t.3)100 %start.4 = add i8 %start, 4101 %c.4 = icmp slt i8 %start.4, %high102 call void @use(i1 %c.4)103 ret void104}105 106define void @test.not.uge.ule(i8 %start, i8 %low, i8 %high) {107; CHECK-LABEL: @test.not.uge.ule(108; CHECK-NEXT: entry:109; CHECK-NEXT: [[ADD_PTR_I:%.*]] = add i8 [[START:%.*]], 3110; CHECK-NEXT: [[C_1:%.*]] = icmp uge i8 [[ADD_PTR_I]], [[HIGH:%.*]]111; CHECK-NEXT: br i1 [[C_1]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]112; CHECK: if.then:113; CHECK-NEXT: ret void114; CHECK: if.end:115; CHECK-NEXT: [[T_0:%.*]] = icmp ule i8 [[START]], [[HIGH]]116; CHECK-NEXT: call void @use(i1 [[T_0]])117; CHECK-NEXT: [[START_1:%.*]] = add i8 [[START]], 1118; CHECK-NEXT: [[T_1:%.*]] = icmp ule i8 [[START_1]], [[HIGH]]119; CHECK-NEXT: call void @use(i1 [[T_1]])120; CHECK-NEXT: [[START_2:%.*]] = add i8 [[START]], 2121; CHECK-NEXT: [[T_2:%.*]] = icmp ule i8 [[START_2]], [[HIGH]]122; CHECK-NEXT: call void @use(i1 [[T_2]])123; CHECK-NEXT: [[START_3:%.*]] = add i8 [[START]], 3124; CHECK-NEXT: [[T_3:%.*]] = icmp ule i8 [[START_3]], [[HIGH]]125; CHECK-NEXT: call void @use(i1 [[T_3]])126; CHECK-NEXT: [[START_4:%.*]] = add i8 [[START]], 4127; CHECK-NEXT: [[T_4:%.*]] = icmp ule i8 [[START_4]], [[HIGH]]128; CHECK-NEXT: call void @use(i1 [[T_4]])129; CHECK-NEXT: [[START_5:%.*]] = add i8 [[START]], 5130; CHECK-NEXT: [[C_5:%.*]] = icmp ule i8 [[START_5]], [[HIGH]]131; CHECK-NEXT: call void @use(i1 [[C_5]])132; CHECK-NEXT: ret void133;134entry:135 %add.ptr.i = add i8 %start, 3136 %c.1 = icmp uge i8 %add.ptr.i, %high137 br i1 %c.1, label %if.then, label %if.end138 139if.then: ; preds = %entry140 ret void141 142if.end: ; preds = %entry143 %t.0 = icmp ule i8 %start, %high144 call void @use(i1 %t.0)145 %start.1 = add i8 %start, 1146 %t.1 = icmp ule i8 %start.1, %high147 call void @use(i1 %t.1)148 %start.2 = add i8 %start, 2149 %t.2 = icmp ule i8 %start.2, %high150 call void @use(i1 %t.2)151 %start.3 = add i8 %start, 3152 %t.3 = icmp ule i8 %start.3, %high153 call void @use(i1 %t.3)154 %start.4 = add i8 %start, 4155 %t.4 = icmp ule i8 %start.4, %high156 call void @use(i1 %t.4)157 158 %start.5 = add i8 %start, 5159 %c.5 = icmp ule i8 %start.5, %high160 call void @use(i1 %c.5)161 162 ret void163}164 165define void @test.not.uge.ugt(i8 %start, i8 %low, i8 %high) {166; CHECK-LABEL: @test.not.uge.ugt(167; CHECK-NEXT: entry:168; CHECK-NEXT: [[ADD_PTR_I:%.*]] = add i8 [[START:%.*]], 3169; CHECK-NEXT: [[C_1:%.*]] = icmp uge i8 [[ADD_PTR_I]], [[HIGH:%.*]]170; CHECK-NEXT: br i1 [[C_1]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]171; CHECK: if.then:172; CHECK-NEXT: ret void173; CHECK: if.end:174; CHECK-NEXT: [[F_0:%.*]] = icmp ugt i8 [[START]], [[HIGH]]175; CHECK-NEXT: call void @use(i1 [[F_0]])176; CHECK-NEXT: [[START_1:%.*]] = add i8 [[START]], 1177; CHECK-NEXT: [[F_1:%.*]] = icmp ugt i8 [[START_1]], [[HIGH]]178; CHECK-NEXT: call void @use(i1 [[F_1]])179; CHECK-NEXT: [[START_2:%.*]] = add i8 [[START]], 2180; CHECK-NEXT: [[F_2:%.*]] = icmp ugt i8 [[START_2]], [[HIGH]]181; CHECK-NEXT: call void @use(i1 [[F_2]])182; CHECK-NEXT: [[START_3:%.*]] = add i8 [[START]], 3183; CHECK-NEXT: [[F_3:%.*]] = icmp ugt i8 [[START_3]], [[HIGH]]184; CHECK-NEXT: call void @use(i1 [[F_3]])185; CHECK-NEXT: [[START_4:%.*]] = add i8 [[START]], 4186; CHECK-NEXT: [[F_4:%.*]] = icmp ugt i8 [[START_4]], [[HIGH]]187; CHECK-NEXT: call void @use(i1 [[F_4]])188; CHECK-NEXT: [[START_5:%.*]] = add i8 [[START]], 5189; CHECK-NEXT: [[C_5:%.*]] = icmp ugt i8 [[START_5]], [[HIGH]]190; CHECK-NEXT: call void @use(i1 [[C_5]])191; CHECK-NEXT: ret void192;193entry:194 %add.ptr.i = add i8 %start, 3195 %c.1 = icmp uge i8 %add.ptr.i, %high196 br i1 %c.1, label %if.then, label %if.end197 198if.then: ; preds = %entry199 ret void200 201if.end: ; preds = %entry202 %f.0 = icmp ugt i8 %start, %high203 call void @use(i1 %f.0)204 205 %start.1 = add i8 %start, 1206 %f.1 = icmp ugt i8 %start.1, %high207 call void @use(i1 %f.1)208 209 %start.2 = add i8 %start, 2210 %f.2 = icmp ugt i8 %start.2, %high211 call void @use(i1 %f.2)212 213 %start.3 = add i8 %start, 3214 %f.3 = icmp ugt i8 %start.3, %high215 call void @use(i1 %f.3)216 217 %start.4 = add i8 %start, 4218 %f.4 = icmp ugt i8 %start.4, %high219 call void @use(i1 %f.4)220 221 %start.5 = add i8 %start, 5222 %c.5 = icmp ugt i8 %start.5, %high223 call void @use(i1 %c.5)224 225 ret void226}227 228define void @test.not.uge.uge(i8 %start, i8 %low, i8 %high) {229; CHECK-LABEL: @test.not.uge.uge(230; CHECK-NEXT: entry:231; CHECK-NEXT: [[ADD_PTR_I:%.*]] = add i8 [[START:%.*]], 3232; CHECK-NEXT: [[C_1:%.*]] = icmp uge i8 [[ADD_PTR_I]], [[HIGH:%.*]]233; CHECK-NEXT: br i1 [[C_1]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]234; CHECK: if.then:235; CHECK-NEXT: ret void236; CHECK: if.end:237; CHECK-NEXT: [[F_0:%.*]] = icmp ugt i8 [[START]], [[HIGH]]238; CHECK-NEXT: call void @use(i1 [[F_0]])239; CHECK-NEXT: [[START_1:%.*]] = add i8 [[START]], 1240; CHECK-NEXT: [[F_1:%.*]] = icmp uge i8 [[START_1]], [[HIGH]]241; CHECK-NEXT: call void @use(i1 [[F_1]])242; CHECK-NEXT: [[START_2:%.*]] = add i8 [[START]], 2243; CHECK-NEXT: [[F_2:%.*]] = icmp uge i8 [[START_2]], [[HIGH]]244; CHECK-NEXT: call void @use(i1 [[F_2]])245; CHECK-NEXT: [[START_3:%.*]] = add i8 [[START]], 3246; CHECK-NEXT: [[F_3:%.*]] = icmp uge i8 [[START_3]], [[HIGH]]247; CHECK-NEXT: call void @use(i1 [[F_3]])248; CHECK-NEXT: [[START_4:%.*]] = add i8 [[START]], 4249; CHECK-NEXT: [[C_4:%.*]] = icmp uge i8 [[START_4]], [[HIGH]]250; CHECK-NEXT: call void @use(i1 [[C_4]])251; CHECK-NEXT: [[START_5:%.*]] = add i8 [[START]], 5252; CHECK-NEXT: [[C_5:%.*]] = icmp uge i8 [[START_5]], [[HIGH]]253; CHECK-NEXT: call void @use(i1 [[C_5]])254; CHECK-NEXT: ret void255;256entry:257 %add.ptr.i = add i8 %start, 3258 %c.1 = icmp uge i8 %add.ptr.i, %high259 br i1 %c.1, label %if.then, label %if.end260 261if.then: ; preds = %entry262 ret void263 264if.end: ; preds = %entry265 %f.0 = icmp ugt i8 %start, %high266 call void @use(i1 %f.0)267 268 %start.1 = add i8 %start, 1269 %f.1 = icmp uge i8 %start.1, %high270 call void @use(i1 %f.1)271 272 %start.2 = add i8 %start, 2273 %f.2 = icmp uge i8 %start.2, %high274 call void @use(i1 %f.2)275 276 %start.3 = add i8 %start, 3277 %f.3 = icmp uge i8 %start.3, %high278 call void @use(i1 %f.3)279 280 %start.4 = add i8 %start, 4281 %c.4 = icmp uge i8 %start.4, %high282 call void @use(i1 %c.4)283 284 %start.5 = add i8 %start, 5285 %c.5 = icmp uge i8 %start.5, %high286 call void @use(i1 %c.5)287 288 ret void289}290 291 292declare void @use(i1)293