Skip to content

Commit ec2c770

Browse files
committed
[InstCombine] Add unsigned variants of gep exact div tests (NFC)
1 parent 3be9132 commit ec2c770

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed

llvm/test/Transforms/InstCombine/getelementptr.ll

+56
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ define void @test_overaligned_vec(i8 %B) {
116116
; CHECK-LABEL: @test_overaligned_vec(
117117
; CHECK-NEXT: store i8 [[B:%.*]], ptr getelementptr inbounds ([10 x i8], ptr @Global, i64 0, i64 2), align 1
118118
; CHECK-NEXT: ret void
119+
;
119120
%A = getelementptr <2 x half>, ptr @Global, i64 0, i64 1
120121
store i8 %B, ptr %A
121122
ret void
@@ -1474,6 +1475,17 @@ define ptr @gep_sdiv(ptr %p, i64 %off) {
14741475
ret ptr %ptr
14751476
}
14761477

1478+
define ptr @gep_udiv(ptr %p, i64 %off) {
1479+
; CHECK-LABEL: @gep_udiv(
1480+
; CHECK-NEXT: [[INDEX:%.*]] = udiv exact i64 [[OFF:%.*]], 7
1481+
; CHECK-NEXT: [[PTR:%.*]] = getelementptr [[STRUCT_C:%.*]], ptr [[P:%.*]], i64 [[INDEX]]
1482+
; CHECK-NEXT: ret ptr [[PTR]]
1483+
;
1484+
%index = udiv exact i64 %off, 7
1485+
%ptr = getelementptr %struct.C, ptr %p, i64 %index
1486+
ret ptr %ptr
1487+
}
1488+
14771489
define <2 x ptr> @gep_sdiv_vec(<2 x ptr> %p, <2 x i64> %off) {
14781490
; CHECK-LABEL: @gep_sdiv_vec(
14791491
; CHECK-NEXT: [[PTR:%.*]] = getelementptr i8, <2 x ptr> [[P:%.*]], <2 x i64> [[OFF:%.*]]
@@ -1504,6 +1516,17 @@ define ptr @gep_ashr(ptr %p, i64 %off) {
15041516
ret ptr %ptr
15051517
}
15061518

1519+
define ptr @gep_lshr(ptr %p, i64 %off) {
1520+
; CHECK-LABEL: @gep_lshr(
1521+
; CHECK-NEXT: [[INDEX:%.*]] = lshr exact i64 [[OFF:%.*]], 2
1522+
; CHECK-NEXT: [[PTR:%.*]] = getelementptr i32, ptr [[P:%.*]], i64 [[INDEX]]
1523+
; CHECK-NEXT: ret ptr [[PTR]]
1524+
;
1525+
%index = lshr exact i64 %off, 2
1526+
%ptr = getelementptr i32, ptr %p, i64 %index
1527+
ret ptr %ptr
1528+
}
1529+
15071530
; Negative tests
15081531

15091532
define ptr @gep_i8(ptr %p, i64 %off) {
@@ -1526,6 +1549,17 @@ define ptr @gep_sdiv_mismatched_size(ptr %p, i64 %off) {
15261549
ret ptr %ptr
15271550
}
15281551

1552+
define ptr @gep_udiv_mismatched_size(ptr %p, i64 %off) {
1553+
; CHECK-LABEL: @gep_udiv_mismatched_size(
1554+
; CHECK-NEXT: [[INDEX:%.*]] = udiv exact i64 [[OFF:%.*]], 20
1555+
; CHECK-NEXT: [[PTR:%.*]] = getelementptr [[STRUCT_C:%.*]], ptr [[P:%.*]], i64 [[INDEX]]
1556+
; CHECK-NEXT: ret ptr [[PTR]]
1557+
;
1558+
%index = udiv exact i64 %off, 20
1559+
%ptr = getelementptr %struct.C, ptr %p, i64 %index
1560+
ret ptr %ptr
1561+
}
1562+
15291563
define ptr @gep_sdiv_without_exact(ptr %p, i64 %off) {
15301564
; CHECK-LABEL: @gep_sdiv_without_exact(
15311565
; CHECK-NEXT: [[INDEX:%.*]] = sdiv i64 [[OFF:%.*]], 7
@@ -1537,6 +1571,17 @@ define ptr @gep_sdiv_without_exact(ptr %p, i64 %off) {
15371571
ret ptr %ptr
15381572
}
15391573

1574+
define ptr @gep_udiv_without_exact(ptr %p, i64 %off) {
1575+
; CHECK-LABEL: @gep_udiv_without_exact(
1576+
; CHECK-NEXT: [[INDEX:%.*]] = udiv i64 [[OFF:%.*]], 7
1577+
; CHECK-NEXT: [[PTR:%.*]] = getelementptr [[STRUCT_C:%.*]], ptr [[P:%.*]], i64 [[INDEX]]
1578+
; CHECK-NEXT: ret ptr [[PTR]]
1579+
;
1580+
%index = udiv i64 %off, 7
1581+
%ptr = getelementptr %struct.C, ptr %p, i64 %index
1582+
ret ptr %ptr
1583+
}
1584+
15401585
define ptr @gep_ashr_without_exact(ptr %p, i64 %off) {
15411586
; CHECK-LABEL: @gep_ashr_without_exact(
15421587
; CHECK-NEXT: [[INDEX:%.*]] = ashr i64 [[OFF:%.*]], 2
@@ -1548,6 +1593,17 @@ define ptr @gep_ashr_without_exact(ptr %p, i64 %off) {
15481593
ret ptr %ptr
15491594
}
15501595

1596+
define ptr @gep_lshr_without_exact(ptr %p, i64 %off) {
1597+
; CHECK-LABEL: @gep_lshr_without_exact(
1598+
; CHECK-NEXT: [[INDEX:%.*]] = lshr i64 [[OFF:%.*]], 2
1599+
; CHECK-NEXT: [[PTR:%.*]] = getelementptr i32, ptr [[P:%.*]], i64 [[INDEX]]
1600+
; CHECK-NEXT: ret ptr [[PTR]]
1601+
;
1602+
%index = lshr i64 %off, 2
1603+
%ptr = getelementptr i32, ptr %p, i64 %index
1604+
ret ptr %ptr
1605+
}
1606+
15511607
define i1 @test_only_used_by_icmp(ptr %a, ptr %b, ptr %c) {
15521608
; CHECK-LABEL: @test_only_used_by_icmp(
15531609
; CHECK-NEXT: [[CMP:%.*]] = icmp eq ptr [[B:%.*]], [[C:%.*]]

0 commit comments

Comments
 (0)