12322080bSFlorian Hahn; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2*8ebb3eacSBjorn Pettersson; RUN: opt -passes=constraint-elimination -S %s | FileCheck %s 32322080bSFlorian Hahn 42322080bSFlorian Hahndefine void @test.not.uge.ult(i8 %start, i8 %low, i8 %high) { 52322080bSFlorian Hahn; CHECK-LABEL: @test.not.uge.ult( 62322080bSFlorian Hahn; CHECK-NEXT: entry: 72322080bSFlorian Hahn; CHECK-NEXT: [[SUB_PTR_I:%.*]] = sub i8 [[START:%.*]], 3 82322080bSFlorian Hahn; CHECK-NEXT: [[C_1:%.*]] = icmp uge i8 [[SUB_PTR_I]], [[HIGH:%.*]] 92322080bSFlorian Hahn; CHECK-NEXT: br i1 [[C_1]], label [[IF_THEN:%.*]], label [[IF_END:%.*]] 102322080bSFlorian Hahn; CHECK: if.then: 112322080bSFlorian Hahn; CHECK-NEXT: ret void 122322080bSFlorian Hahn; CHECK: if.end: 132322080bSFlorian Hahn; CHECK-NEXT: [[T_0:%.*]] = icmp ult i8 [[START]], [[HIGH]] 142322080bSFlorian Hahn; CHECK-NEXT: call void @use(i1 [[T_0]]) 152322080bSFlorian Hahn; CHECK-NEXT: [[START_1:%.*]] = sub i8 [[START]], 1 162322080bSFlorian Hahn; CHECK-NEXT: [[T_1:%.*]] = icmp ult i8 [[START_1]], [[HIGH]] 172322080bSFlorian Hahn; CHECK-NEXT: call void @use(i1 [[T_1]]) 182322080bSFlorian Hahn; CHECK-NEXT: [[START_2:%.*]] = sub i8 [[START]], 2 192322080bSFlorian Hahn; CHECK-NEXT: [[T_2:%.*]] = icmp ult i8 [[START_2]], [[HIGH]] 202322080bSFlorian Hahn; CHECK-NEXT: call void @use(i1 [[T_2]]) 212322080bSFlorian Hahn; CHECK-NEXT: [[START_3:%.*]] = sub i8 [[START]], 3 222322080bSFlorian Hahn; CHECK-NEXT: [[T_3:%.*]] = icmp ult i8 [[START_3]], [[HIGH]] 232322080bSFlorian Hahn; CHECK-NEXT: call void @use(i1 [[T_3]]) 242322080bSFlorian Hahn; CHECK-NEXT: [[START_4:%.*]] = sub i8 [[START]], 4 252322080bSFlorian Hahn; CHECK-NEXT: [[C_4:%.*]] = icmp ult i8 [[START_4]], [[HIGH]] 262322080bSFlorian Hahn; CHECK-NEXT: call void @use(i1 [[C_4]]) 272322080bSFlorian Hahn; CHECK-NEXT: ret void 282322080bSFlorian Hahn; 292322080bSFlorian Hahnentry: 302322080bSFlorian Hahn %sub.ptr.i = sub i8 %start, 3 312322080bSFlorian Hahn %c.1 = icmp uge i8 %sub.ptr.i, %high 322322080bSFlorian Hahn br i1 %c.1, label %if.then, label %if.end 332322080bSFlorian Hahn 342322080bSFlorian Hahnif.then: ; preds = %entry 352322080bSFlorian Hahn ret void 362322080bSFlorian Hahn 372322080bSFlorian Hahnif.end: ; preds = %entry 382322080bSFlorian Hahn %t.0 = icmp ult i8 %start, %high 392322080bSFlorian Hahn call void @use(i1 %t.0) 402322080bSFlorian Hahn %start.1 = sub i8 %start, 1 412322080bSFlorian Hahn %t.1 = icmp ult i8 %start.1, %high 422322080bSFlorian Hahn call void @use(i1 %t.1) 432322080bSFlorian Hahn %start.2 = sub i8 %start, 2 442322080bSFlorian Hahn %t.2 = icmp ult i8 %start.2, %high 452322080bSFlorian Hahn call void @use(i1 %t.2) 462322080bSFlorian Hahn %start.3 = sub i8 %start, 3 472322080bSFlorian Hahn %t.3 = icmp ult i8 %start.3, %high 482322080bSFlorian Hahn call void @use(i1 %t.3) 492322080bSFlorian Hahn %start.4 = sub i8 %start, 4 502322080bSFlorian Hahn %c.4 = icmp ult i8 %start.4, %high 512322080bSFlorian Hahn call void @use(i1 %c.4) 522322080bSFlorian Hahn ret void 532322080bSFlorian Hahn} 542322080bSFlorian Hahn 552322080bSFlorian Hahndefine void @test.not.uge.ule(i8 %start, i8 %low, i8 %high) { 562322080bSFlorian Hahn; CHECK-LABEL: @test.not.uge.ule( 572322080bSFlorian Hahn; CHECK-NEXT: entry: 582322080bSFlorian Hahn; CHECK-NEXT: [[SUB_PTR_I:%.*]] = sub i8 [[START:%.*]], 3 592322080bSFlorian Hahn; CHECK-NEXT: [[C_1:%.*]] = icmp uge i8 [[SUB_PTR_I]], [[HIGH:%.*]] 602322080bSFlorian Hahn; CHECK-NEXT: br i1 [[C_1]], label [[IF_THEN:%.*]], label [[IF_END:%.*]] 612322080bSFlorian Hahn; CHECK: if.then: 622322080bSFlorian Hahn; CHECK-NEXT: ret void 632322080bSFlorian Hahn; CHECK: if.end: 642322080bSFlorian Hahn; CHECK-NEXT: [[T_0:%.*]] = icmp ule i8 [[START]], [[HIGH]] 652322080bSFlorian Hahn; CHECK-NEXT: call void @use(i1 [[T_0]]) 662322080bSFlorian Hahn; CHECK-NEXT: [[START_1:%.*]] = sub i8 [[START]], 1 672322080bSFlorian Hahn; CHECK-NEXT: [[T_1:%.*]] = icmp ule i8 [[START_1]], [[HIGH]] 682322080bSFlorian Hahn; CHECK-NEXT: call void @use(i1 [[T_1]]) 692322080bSFlorian Hahn; CHECK-NEXT: [[START_2:%.*]] = sub i8 [[START]], 2 702322080bSFlorian Hahn; CHECK-NEXT: [[T_2:%.*]] = icmp ule i8 [[START_2]], [[HIGH]] 712322080bSFlorian Hahn; CHECK-NEXT: call void @use(i1 [[T_2]]) 722322080bSFlorian Hahn; CHECK-NEXT: [[START_3:%.*]] = sub i8 [[START]], 3 732322080bSFlorian Hahn; CHECK-NEXT: [[T_3:%.*]] = icmp ule i8 [[START_3]], [[HIGH]] 742322080bSFlorian Hahn; CHECK-NEXT: call void @use(i1 [[T_3]]) 752322080bSFlorian Hahn; CHECK-NEXT: [[START_4:%.*]] = sub i8 [[START]], 4 762322080bSFlorian Hahn; CHECK-NEXT: [[T_4:%.*]] = icmp ule i8 [[START_4]], [[HIGH]] 772322080bSFlorian Hahn; CHECK-NEXT: call void @use(i1 [[T_4]]) 782322080bSFlorian Hahn; CHECK-NEXT: [[START_5:%.*]] = sub i8 [[START]], 5 792322080bSFlorian Hahn; CHECK-NEXT: [[C_5:%.*]] = icmp ule i8 [[START_5]], [[HIGH]] 802322080bSFlorian Hahn; CHECK-NEXT: call void @use(i1 [[C_5]]) 812322080bSFlorian Hahn; CHECK-NEXT: ret void 822322080bSFlorian Hahn; 832322080bSFlorian Hahnentry: 842322080bSFlorian Hahn %sub.ptr.i = sub i8 %start, 3 852322080bSFlorian Hahn %c.1 = icmp uge i8 %sub.ptr.i, %high 862322080bSFlorian Hahn br i1 %c.1, label %if.then, label %if.end 872322080bSFlorian Hahn 882322080bSFlorian Hahnif.then: ; preds = %entry 892322080bSFlorian Hahn ret void 902322080bSFlorian Hahn 912322080bSFlorian Hahnif.end: ; preds = %entry 922322080bSFlorian Hahn %t.0 = icmp ule i8 %start, %high 932322080bSFlorian Hahn call void @use(i1 %t.0) 942322080bSFlorian Hahn %start.1 = sub i8 %start, 1 952322080bSFlorian Hahn %t.1 = icmp ule i8 %start.1, %high 962322080bSFlorian Hahn call void @use(i1 %t.1) 972322080bSFlorian Hahn %start.2 = sub i8 %start, 2 982322080bSFlorian Hahn %t.2 = icmp ule i8 %start.2, %high 992322080bSFlorian Hahn call void @use(i1 %t.2) 1002322080bSFlorian Hahn %start.3 = sub i8 %start, 3 1012322080bSFlorian Hahn %t.3 = icmp ule i8 %start.3, %high 1022322080bSFlorian Hahn call void @use(i1 %t.3) 1032322080bSFlorian Hahn %start.4 = sub i8 %start, 4 1042322080bSFlorian Hahn %t.4 = icmp ule i8 %start.4, %high 1052322080bSFlorian Hahn call void @use(i1 %t.4) 1062322080bSFlorian Hahn 1072322080bSFlorian Hahn %start.5 = sub i8 %start, 5 1082322080bSFlorian Hahn %c.5 = icmp ule i8 %start.5, %high 1092322080bSFlorian Hahn call void @use(i1 %c.5) 1102322080bSFlorian Hahn 1112322080bSFlorian Hahn ret void 1122322080bSFlorian Hahn} 1132322080bSFlorian Hahn 1142322080bSFlorian Hahndefine void @test.not.uge.ugt(i8 %start, i8 %low, i8 %high) { 1152322080bSFlorian Hahn; CHECK-LABEL: @test.not.uge.ugt( 1162322080bSFlorian Hahn; CHECK-NEXT: entry: 1172322080bSFlorian Hahn; CHECK-NEXT: [[SUB_PTR_I:%.*]] = sub i8 [[START:%.*]], 3 1182322080bSFlorian Hahn; CHECK-NEXT: [[C_1:%.*]] = icmp uge i8 [[SUB_PTR_I]], [[HIGH:%.*]] 1192322080bSFlorian Hahn; CHECK-NEXT: br i1 [[C_1]], label [[IF_THEN:%.*]], label [[IF_END:%.*]] 1202322080bSFlorian Hahn; CHECK: if.then: 1212322080bSFlorian Hahn; CHECK-NEXT: ret void 1222322080bSFlorian Hahn; CHECK: if.end: 1232322080bSFlorian Hahn; CHECK-NEXT: [[F_0:%.*]] = icmp ugt i8 [[START]], [[HIGH]] 1242322080bSFlorian Hahn; CHECK-NEXT: call void @use(i1 [[F_0]]) 1252322080bSFlorian Hahn; CHECK-NEXT: [[START_1:%.*]] = sub i8 [[START]], 1 1262322080bSFlorian Hahn; CHECK-NEXT: [[F_1:%.*]] = icmp ugt i8 [[START_1]], [[HIGH]] 1272322080bSFlorian Hahn; CHECK-NEXT: call void @use(i1 [[F_1]]) 1282322080bSFlorian Hahn; CHECK-NEXT: [[START_2:%.*]] = sub i8 [[START]], 2 1292322080bSFlorian Hahn; CHECK-NEXT: [[F_2:%.*]] = icmp ugt i8 [[START_2]], [[HIGH]] 1302322080bSFlorian Hahn; CHECK-NEXT: call void @use(i1 [[F_2]]) 1312322080bSFlorian Hahn; CHECK-NEXT: [[START_3:%.*]] = sub i8 [[START]], 3 1322322080bSFlorian Hahn; CHECK-NEXT: [[F_3:%.*]] = icmp ugt i8 [[START_3]], [[HIGH]] 1332322080bSFlorian Hahn; CHECK-NEXT: call void @use(i1 [[F_3]]) 1342322080bSFlorian Hahn; CHECK-NEXT: [[START_4:%.*]] = sub i8 [[START]], 4 1352322080bSFlorian Hahn; CHECK-NEXT: [[F_4:%.*]] = icmp ugt i8 [[START_4]], [[HIGH]] 1362322080bSFlorian Hahn; CHECK-NEXT: call void @use(i1 [[F_4]]) 1372322080bSFlorian Hahn; CHECK-NEXT: [[START_5:%.*]] = sub i8 [[START]], 5 1382322080bSFlorian Hahn; CHECK-NEXT: [[C_5:%.*]] = icmp ugt i8 [[START_5]], [[HIGH]] 1392322080bSFlorian Hahn; CHECK-NEXT: call void @use(i1 [[C_5]]) 1402322080bSFlorian Hahn; CHECK-NEXT: ret void 1412322080bSFlorian Hahn; 1422322080bSFlorian Hahnentry: 1432322080bSFlorian Hahn %sub.ptr.i = sub i8 %start, 3 1442322080bSFlorian Hahn %c.1 = icmp uge i8 %sub.ptr.i, %high 1452322080bSFlorian Hahn br i1 %c.1, label %if.then, label %if.end 1462322080bSFlorian Hahn 1472322080bSFlorian Hahnif.then: ; preds = %entry 1482322080bSFlorian Hahn ret void 1492322080bSFlorian Hahn 1502322080bSFlorian Hahnif.end: ; preds = %entry 1512322080bSFlorian Hahn %f.0 = icmp ugt i8 %start, %high 1522322080bSFlorian Hahn call void @use(i1 %f.0) 1532322080bSFlorian Hahn 1542322080bSFlorian Hahn %start.1 = sub i8 %start, 1 1552322080bSFlorian Hahn %f.1 = icmp ugt i8 %start.1, %high 1562322080bSFlorian Hahn call void @use(i1 %f.1) 1572322080bSFlorian Hahn 1582322080bSFlorian Hahn %start.2 = sub i8 %start, 2 1592322080bSFlorian Hahn %f.2 = icmp ugt i8 %start.2, %high 1602322080bSFlorian Hahn call void @use(i1 %f.2) 1612322080bSFlorian Hahn 1622322080bSFlorian Hahn %start.3 = sub i8 %start, 3 1632322080bSFlorian Hahn %f.3 = icmp ugt i8 %start.3, %high 1642322080bSFlorian Hahn call void @use(i1 %f.3) 1652322080bSFlorian Hahn 1662322080bSFlorian Hahn %start.4 = sub i8 %start, 4 1672322080bSFlorian Hahn %f.4 = icmp ugt i8 %start.4, %high 1682322080bSFlorian Hahn call void @use(i1 %f.4) 1692322080bSFlorian Hahn 1702322080bSFlorian Hahn %start.5 = sub i8 %start, 5 1712322080bSFlorian Hahn %c.5 = icmp ugt i8 %start.5, %high 1722322080bSFlorian Hahn call void @use(i1 %c.5) 1732322080bSFlorian Hahn 1742322080bSFlorian Hahn ret void 1752322080bSFlorian Hahn} 1762322080bSFlorian Hahn 1772322080bSFlorian Hahndefine void @test.not.uge.uge(i8 %start, i8 %low, i8 %high) { 1782322080bSFlorian Hahn; CHECK-LABEL: @test.not.uge.uge( 1792322080bSFlorian Hahn; CHECK-NEXT: entry: 1802322080bSFlorian Hahn; CHECK-NEXT: [[SUB_PTR_I:%.*]] = sub i8 [[START:%.*]], 3 1812322080bSFlorian Hahn; CHECK-NEXT: [[C_1:%.*]] = icmp uge i8 [[SUB_PTR_I]], [[HIGH:%.*]] 1822322080bSFlorian Hahn; CHECK-NEXT: br i1 [[C_1]], label [[IF_THEN:%.*]], label [[IF_END:%.*]] 1832322080bSFlorian Hahn; CHECK: if.then: 1842322080bSFlorian Hahn; CHECK-NEXT: ret void 1852322080bSFlorian Hahn; CHECK: if.end: 1862322080bSFlorian Hahn; CHECK-NEXT: [[F_0:%.*]] = icmp ugt i8 [[START]], [[HIGH]] 1872322080bSFlorian Hahn; CHECK-NEXT: call void @use(i1 [[F_0]]) 1882322080bSFlorian Hahn; CHECK-NEXT: [[START_1:%.*]] = sub i8 [[START]], 1 1892322080bSFlorian Hahn; CHECK-NEXT: [[F_1:%.*]] = icmp uge i8 [[START_1]], [[HIGH]] 1902322080bSFlorian Hahn; CHECK-NEXT: call void @use(i1 [[F_1]]) 1912322080bSFlorian Hahn; CHECK-NEXT: [[START_2:%.*]] = sub i8 [[START]], 2 1922322080bSFlorian Hahn; CHECK-NEXT: [[F_2:%.*]] = icmp uge i8 [[START_2]], [[HIGH]] 1932322080bSFlorian Hahn; CHECK-NEXT: call void @use(i1 [[F_2]]) 1942322080bSFlorian Hahn; CHECK-NEXT: [[START_3:%.*]] = sub i8 [[START]], 3 1952322080bSFlorian Hahn; CHECK-NEXT: [[F_3:%.*]] = icmp uge i8 [[START_3]], [[HIGH]] 1962322080bSFlorian Hahn; CHECK-NEXT: call void @use(i1 [[F_3]]) 1972322080bSFlorian Hahn; CHECK-NEXT: [[START_4:%.*]] = sub i8 [[START]], 4 1982322080bSFlorian Hahn; CHECK-NEXT: [[C_4:%.*]] = icmp uge i8 [[START_4]], [[HIGH]] 1992322080bSFlorian Hahn; CHECK-NEXT: call void @use(i1 [[C_4]]) 2002322080bSFlorian Hahn; CHECK-NEXT: [[START_5:%.*]] = sub i8 [[START]], 5 2012322080bSFlorian Hahn; CHECK-NEXT: [[C_5:%.*]] = icmp uge i8 [[START_5]], [[HIGH]] 2022322080bSFlorian Hahn; CHECK-NEXT: call void @use(i1 [[C_5]]) 2032322080bSFlorian Hahn; CHECK-NEXT: ret void 2042322080bSFlorian Hahn; 2052322080bSFlorian Hahnentry: 2062322080bSFlorian Hahn %sub.ptr.i = sub i8 %start, 3 2072322080bSFlorian Hahn %c.1 = icmp uge i8 %sub.ptr.i, %high 2082322080bSFlorian Hahn br i1 %c.1, label %if.then, label %if.end 2092322080bSFlorian Hahn 2102322080bSFlorian Hahnif.then: ; preds = %entry 2112322080bSFlorian Hahn ret void 2122322080bSFlorian Hahn 2132322080bSFlorian Hahnif.end: ; preds = %entry 2142322080bSFlorian Hahn %f.0 = icmp ugt i8 %start, %high 2152322080bSFlorian Hahn call void @use(i1 %f.0) 2162322080bSFlorian Hahn 2172322080bSFlorian Hahn %start.1 = sub i8 %start, 1 2182322080bSFlorian Hahn %f.1 = icmp uge i8 %start.1, %high 2192322080bSFlorian Hahn call void @use(i1 %f.1) 2202322080bSFlorian Hahn 2212322080bSFlorian Hahn %start.2 = sub i8 %start, 2 2222322080bSFlorian Hahn %f.2 = icmp uge i8 %start.2, %high 2232322080bSFlorian Hahn call void @use(i1 %f.2) 2242322080bSFlorian Hahn 2252322080bSFlorian Hahn %start.3 = sub i8 %start, 3 2262322080bSFlorian Hahn %f.3 = icmp uge i8 %start.3, %high 2272322080bSFlorian Hahn call void @use(i1 %f.3) 2282322080bSFlorian Hahn 2292322080bSFlorian Hahn %start.4 = sub i8 %start, 4 2302322080bSFlorian Hahn %c.4 = icmp uge i8 %start.4, %high 2312322080bSFlorian Hahn call void @use(i1 %c.4) 2322322080bSFlorian Hahn 2332322080bSFlorian Hahn %start.5 = sub i8 %start, 5 2342322080bSFlorian Hahn %c.5 = icmp uge i8 %start.5, %high 2352322080bSFlorian Hahn call void @use(i1 %c.5) 2362322080bSFlorian Hahn 2372322080bSFlorian Hahn ret void 2382322080bSFlorian Hahn} 2392322080bSFlorian Hahn 2402322080bSFlorian Hahn 2412322080bSFlorian Hahndeclare void @use(i1) 242