Skip to content

Commit 2f40705

Browse files
committed
[InstCombine] Add pre-commit tests. NFC.
1 parent 1228bec commit 2f40705

File tree

1 file changed

+90
-0
lines changed

1 file changed

+90
-0
lines changed

llvm/test/Transforms/InstCombine/getelementptr.ll

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1537,4 +1537,94 @@ define ptr @gep_ashr_without_exact(ptr %p, i64 %off) {
15371537
ret ptr %ptr
15381538
}
15391539

1540+
define i1 @test_only_used_by_icmp(ptr %a, ptr %b, ptr %c) {
1541+
; CHECK-LABEL: @test_only_used_by_icmp(
1542+
; CHECK-NEXT: [[PA:%.*]] = ptrtoint ptr [[A:%.*]] to i64
1543+
; CHECK-NEXT: [[PB:%.*]] = ptrtoint ptr [[B:%.*]] to i64
1544+
; CHECK-NEXT: [[SUB:%.*]] = sub i64 [[PB]], [[PA]]
1545+
; CHECK-NEXT: [[GEP:%.*]] = getelementptr i8, ptr [[A]], i64 [[SUB]]
1546+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq ptr [[GEP]], [[C:%.*]]
1547+
; CHECK-NEXT: ret i1 [[CMP]]
1548+
;
1549+
%pa = ptrtoint ptr %a to i64
1550+
%pb = ptrtoint ptr %b to i64
1551+
%sub = sub i64 %pb, %pa
1552+
%gep = getelementptr i8, ptr %a, i64 %sub
1553+
%cmp = icmp eq ptr %gep, %c
1554+
ret i1 %cmp
1555+
}
1556+
1557+
define i64 @test_only_used_by_ptrtoint(ptr %a, ptr %b) {
1558+
; CHECK-LABEL: @test_only_used_by_ptrtoint(
1559+
; CHECK-NEXT: [[PA:%.*]] = ptrtoint ptr [[A:%.*]] to i64
1560+
; CHECK-NEXT: [[PB:%.*]] = ptrtoint ptr [[B:%.*]] to i64
1561+
; CHECK-NEXT: [[SUB:%.*]] = sub i64 [[PB]], [[PA]]
1562+
; CHECK-NEXT: [[GEP:%.*]] = getelementptr i8, ptr [[A]], i64 [[SUB]]
1563+
; CHECK-NEXT: [[VAL:%.*]] = ptrtoint ptr [[GEP]] to i64
1564+
; CHECK-NEXT: ret i64 [[VAL]]
1565+
;
1566+
%pa = ptrtoint ptr %a to i64
1567+
%pb = ptrtoint ptr %b to i64
1568+
%sub = sub i64 %pb, %pa
1569+
%gep = getelementptr i8, ptr %a, i64 %sub
1570+
%val = ptrtoint ptr %gep to i64
1571+
ret i64 %val
1572+
}
1573+
1574+
define i64 @test_used_by_both(ptr %a, ptr %b, ptr %c) {
1575+
; CHECK-LABEL: @test_used_by_both(
1576+
; CHECK-NEXT: [[PA:%.*]] = ptrtoint ptr [[A:%.*]] to i64
1577+
; CHECK-NEXT: [[PB:%.*]] = ptrtoint ptr [[B:%.*]] to i64
1578+
; CHECK-NEXT: [[SUB:%.*]] = sub i64 [[PB]], [[PA]]
1579+
; CHECK-NEXT: [[GEP:%.*]] = getelementptr i8, ptr [[A]], i64 [[SUB]]
1580+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq ptr [[GEP]], [[C:%.*]]
1581+
; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
1582+
; CHECK: if.then:
1583+
; CHECK-NEXT: [[VAL:%.*]] = ptrtoint ptr [[GEP]] to i64
1584+
; CHECK-NEXT: ret i64 [[VAL]]
1585+
; CHECK: if.else:
1586+
; CHECK-NEXT: ret i64 0
1587+
;
1588+
%pa = ptrtoint ptr %a to i64
1589+
%pb = ptrtoint ptr %b to i64
1590+
%sub = sub i64 %pb, %pa
1591+
%gep = getelementptr i8, ptr %a, i64 %sub
1592+
%cmp = icmp eq ptr %gep, %c
1593+
br i1 %cmp, label %if.then, label %if.else
1594+
if.then:
1595+
%val = ptrtoint ptr %gep to i64
1596+
ret i64 %val
1597+
if.else:
1598+
ret i64 0
1599+
}
1600+
1601+
; Negative tests
1602+
1603+
define i64 @test_used_by_both_invalid(ptr %a, ptr %b, ptr %c) {
1604+
; CHECK-LABEL: @test_used_by_both_invalid(
1605+
; CHECK-NEXT: [[PA:%.*]] = ptrtoint ptr [[A:%.*]] to i64
1606+
; CHECK-NEXT: [[PB:%.*]] = ptrtoint ptr [[B:%.*]] to i64
1607+
; CHECK-NEXT: [[SUB:%.*]] = sub i64 [[PB]], [[PA]]
1608+
; CHECK-NEXT: [[GEP:%.*]] = getelementptr i8, ptr [[A]], i64 [[SUB]]
1609+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq ptr [[GEP]], [[C:%.*]]
1610+
; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
1611+
; CHECK: if.then:
1612+
; CHECK-NEXT: [[VAL:%.*]] = load i64, ptr [[GEP]], align 8
1613+
; CHECK-NEXT: ret i64 [[VAL]]
1614+
; CHECK: if.else:
1615+
; CHECK-NEXT: ret i64 0
1616+
;
1617+
%pa = ptrtoint ptr %a to i64
1618+
%pb = ptrtoint ptr %b to i64
1619+
%sub = sub i64 %pb, %pa
1620+
%gep = getelementptr i8, ptr %a, i64 %sub
1621+
%cmp = icmp eq ptr %gep, %c
1622+
br i1 %cmp, label %if.then, label %if.else
1623+
if.then:
1624+
%val = load i64, ptr %gep, align 8
1625+
ret i64 %val
1626+
if.else:
1627+
ret i64 0
1628+
}
1629+
15401630
!0 = !{!"branch_weights", i32 2, i32 10}

0 commit comments

Comments
 (0)