xref: /llvm-project/llvm/test/Transforms/ConstraintElimination/sub.ll (revision 8ebb3eac02a926ffa4298c12834c57aefb2e8579)
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