Skip to content

Commit a8ee263

Browse files
committed
Add Tests
Change-Id: I301582a8a06dbef0184b9fcfa22cb7992e5bb9e2
1 parent a4c1767 commit a8ee263

File tree

1 file changed

+177
-35
lines changed

1 file changed

+177
-35
lines changed
Lines changed: 177 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,27 @@
11
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 3
22
; RUN: opt -mtriple=amdgcn-amd-amdhsa -mcpu=gfx90a -S -passes=separate-const-offset-from-gep < %s | FileCheck %s
33

4-
define void @inboundsPossiblyNegative(ptr %in.ptr, i32 %in.idx1) {
4+
define void @inboundsPossiblyNegative(ptr %in.ptr, i64 %in.idx1) {
55
; CHECK-LABEL: define void @inboundsPossiblyNegative(
6-
; CHECK-SAME: ptr [[IN_PTR:%.*]], i32 [[IN_IDX1:%.*]]) #[[ATTR0:[0-9]+]] {
6+
; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0:[0-9]+]] {
77
; CHECK-NEXT: entry:
8-
; CHECK-NEXT: [[IDXPROM:%.*]] = sext i32 [[IN_IDX1]] to i64
9-
; CHECK-NEXT: [[TMP0:%.*]] = getelementptr <2 x i8>, ptr [[IN_PTR]], i64 [[IDXPROM]]
8+
; CHECK-NEXT: [[TMP0:%.*]] = getelementptr <2 x i8>, ptr [[IN_PTR]], i64 [[IN_IDX1]]
109
; CHECK-NEXT: [[TMP1:%.*]] = getelementptr <2 x i8>, ptr [[TMP0]], i32 1
1110
; CHECK-NEXT: ret void
1211
;
1312
entry:
14-
%const1 = getelementptr inbounds <2 x i8>, ptr %in.ptr, i32 1
15-
%idx1 = getelementptr inbounds <2 x i8>, ptr %const1, i32 %in.idx1
13+
%const1 = getelementptr inbounds <2 x i8>, ptr %in.ptr, i64 1
14+
%idx1 = getelementptr inbounds <2 x i8>, ptr %const1, i64 %in.idx1
1615
ret void
1716
}
1817

19-
define void @inboundsNonNegative(ptr %in.ptr, i32 %in.idx1) {
20-
; CHECK-LABEL: define void @inboundsNonNegative(
18+
define void @inboundsNonNegative_nonCanonical(ptr %in.ptr, i32 %in.idx1) {
19+
; CHECK-LABEL: define void @inboundsNonNegative_nonCanonical(
2120
; CHECK-SAME: ptr [[IN_PTR:%.*]], i32 [[IN_IDX1:%.*]]) #[[ATTR0]] {
2221
; CHECK-NEXT: entry:
23-
; CHECK-NEXT: [[IN_IDX1_NNEG:%.*]] = and i32 [[IN_IDX1]], 2147483647
24-
; CHECK-NEXT: [[IDXPROM:%.*]] = sext i32 [[IN_IDX1_NNEG]] to i64
25-
; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds <2 x i8>, ptr [[IN_PTR]], i64 [[IDXPROM]]
22+
; CHECK-NEXT: [[IN_IDX1_NNEG1:%.*]] = and i32 [[IN_IDX1]], 2147483647
23+
; CHECK-NEXT: [[IN_IDX1_NNEG:%.*]] = sext i32 [[IN_IDX1_NNEG1]] to i64
24+
; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds <2 x i8>, ptr [[IN_PTR]], i64 [[IN_IDX1_NNEG]]
2625
; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds <2 x i8>, ptr [[TMP0]], i32 1
2726
; CHECK-NEXT: ret void
2827
;
@@ -33,53 +32,196 @@ entry:
3332
ret void
3433
}
3534

36-
define void @inboundsNonchained(ptr %in.ptr, i32 %in.idx1) {
35+
define void @inboundsNonNegative(ptr %in.ptr, i64 %in.idx1) {
36+
; CHECK-LABEL: define void @inboundsNonNegative(
37+
; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
38+
; CHECK-NEXT: entry:
39+
; CHECK-NEXT: [[IDXPROM:%.*]] = and i64 [[IN_IDX1]], 9223372036854775807
40+
; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds <2 x i8>, ptr [[IN_PTR]], i64 [[IDXPROM]]
41+
; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds <2 x i8>, ptr [[TMP0]], i64 1
42+
; CHECK-NEXT: ret void
43+
;
44+
entry:
45+
%in.idx1.nneg = and i64 %in.idx1, 9223372036854775807
46+
%const1 = getelementptr inbounds <2 x i8>, ptr %in.ptr, i64 1
47+
%idx1 = getelementptr inbounds <2 x i8>, ptr %const1, i64 %in.idx1.nneg
48+
ret void
49+
}
50+
51+
define void @inboundsNonchained(ptr %in.ptr, i64 %in.idx1) {
3752
; CHECK-LABEL: define void @inboundsNonchained(
38-
; CHECK-SAME: ptr [[IN_PTR:%.*]], i32 [[IN_IDX1:%.*]]) #[[ATTR0]] {
53+
; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
3954
; CHECK-NEXT: entry:
40-
; CHECK-NEXT: [[IN_IDX1_NNEG:%.*]] = and i32 [[IN_IDX1]], 2147483647
41-
; CHECK-NEXT: [[IDXPROM:%.*]] = sext i32 [[IN_IDX1_NNEG]] to i64
55+
; CHECK-NEXT: [[IDXPROM:%.*]] = and i64 [[IN_IDX1]], 9223372036854775807
4256
; CHECK-NEXT: [[TMP0:%.*]] = getelementptr <2 x i8>, ptr [[IN_PTR]], i64 [[IDXPROM]]
43-
; CHECK-NEXT: [[TMP1:%.*]] = getelementptr <2 x i8>, ptr [[TMP0]], i32 1
57+
; CHECK-NEXT: [[TMP1:%.*]] = getelementptr <2 x i8>, ptr [[TMP0]], i64 1
4458
; CHECK-NEXT: ret void
4559
;
4660
entry:
47-
%in.idx1.nneg = and i32 %in.idx1, 2147483647
48-
%const1 = getelementptr inbounds <2 x i8>, ptr %in.ptr, i32 1
49-
%idx1 = getelementptr <2 x i8>, ptr %const1, i32 %in.idx1.nneg
61+
%in.idx1.nneg = and i64 %in.idx1, 9223372036854775807
62+
%const1 = getelementptr inbounds <2 x i8>, ptr %in.ptr, i64 1
63+
%idx1 = getelementptr <2 x i8>, ptr %const1, i64 %in.idx1.nneg
5064
ret void
5165
}
5266

53-
define void @inboundsNonNegativeType_i16i8(ptr %in.ptr, i32 %in.idx1) {
67+
define void @inboundsNonNegativeType_i16i8(ptr %in.ptr, i64 %in.idx1) {
5468
; CHECK-LABEL: define void @inboundsNonNegativeType_i16i8(
55-
; CHECK-SAME: ptr [[IN_PTR:%.*]], i32 [[IN_IDX1:%.*]]) #[[ATTR0]] {
69+
; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
5670
; CHECK-NEXT: entry:
57-
; CHECK-NEXT: [[IN_IDX1_NNEG:%.*]] = and i32 [[IN_IDX1]], 2147483647
58-
; CHECK-NEXT: [[IDXPROM:%.*]] = sext i32 [[IN_IDX1_NNEG]] to i64
71+
; CHECK-NEXT: [[IDXPROM:%.*]] = and i64 [[IN_IDX1]], 9223372036854775807
5972
; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[IN_PTR]], i64 [[IDXPROM]]
60-
; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds i16, ptr [[TMP0]], i32 1024
73+
; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds i16, ptr [[TMP0]], i64 1024
6174
; CHECK-NEXT: ret void
6275
;
6376
entry:
64-
%in.idx1.nneg = and i32 %in.idx1, 2147483647
65-
%const1 = getelementptr inbounds i16, ptr %in.ptr, i32 1024
66-
%idx1 = getelementptr inbounds i8, ptr %const1, i32 %in.idx1.nneg
77+
%in.idx1.nneg = and i64 %in.idx1, 9223372036854775807
78+
%const1 = getelementptr inbounds i16, ptr %in.ptr, i64 1024
79+
%idx1 = getelementptr inbounds i8, ptr %const1, i64 %in.idx1.nneg
6780
ret void
6881
}
6982

70-
define void @inboundsNonNegative_i8i16(ptr %in.ptr, i32 %in.idx1) {
83+
define void @inboundsNonNegative_i8i16(ptr %in.ptr, i64 %in.idx1) {
7184
; CHECK-LABEL: define void @inboundsNonNegative_i8i16(
72-
; CHECK-SAME: ptr [[IN_PTR:%.*]], i32 [[IN_IDX1:%.*]]) #[[ATTR0]] {
85+
; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
7386
; CHECK-NEXT: entry:
74-
; CHECK-NEXT: [[IN_IDX1_NNEG:%.*]] = and i32 [[IN_IDX1]], 2147483647
75-
; CHECK-NEXT: [[IDXPROM:%.*]] = sext i32 [[IN_IDX1_NNEG]] to i64
87+
; CHECK-NEXT: [[IDXPROM:%.*]] = and i64 [[IN_IDX1]], 9223372036854775807
7688
; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds i16, ptr [[IN_PTR]], i64 [[IDXPROM]]
77-
; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds i8, ptr [[TMP0]], i32 1024
89+
; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds i8, ptr [[TMP0]], i64 1024
7890
; CHECK-NEXT: ret void
7991
;
8092
entry:
81-
%in.idx1.nneg = and i32 %in.idx1, 2147483647
82-
%const1 = getelementptr inbounds i8, ptr %in.ptr, i32 1024
83-
%idx1 = getelementptr inbounds i16, ptr %const1, i32 %in.idx1.nneg
93+
%in.idx1.nneg = and i64 %in.idx1, 9223372036854775807
94+
%const1 = getelementptr inbounds i8, ptr %in.ptr, i64 1024
95+
%idx1 = getelementptr inbounds i16, ptr %const1, i64 %in.idx1.nneg
96+
ret void
97+
}
98+
99+
define void @inboundsNonchained_first(ptr %in.ptr, i64 %in.idx1) {
100+
; CHECK-LABEL: define void @inboundsNonchained_first(
101+
; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
102+
; CHECK-NEXT: entry:
103+
; CHECK-NEXT: [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 9223372036854775807
104+
; CHECK-NEXT: [[TMP0:%.*]] = getelementptr i32, ptr [[IN_PTR]], i64 [[IN_IDX1_NNEG]]
105+
; CHECK-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr [[TMP0]], i64 1024
106+
; CHECK-NEXT: ret void
107+
;
108+
entry:
109+
%in.idx1.nneg = and i64 %in.idx1, 9223372036854775807
110+
%const1 = getelementptr inbounds i8, ptr %in.ptr, i64 1024
111+
%idx1 = getelementptr i32, ptr %const1, i64 %in.idx1.nneg
112+
ret void
113+
}
114+
115+
define void @inboundsNonchained_second(ptr %in.ptr, i64 %in.idx1) {
116+
; CHECK-LABEL: define void @inboundsNonchained_second(
117+
; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
118+
; CHECK-NEXT: entry:
119+
; CHECK-NEXT: [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 9223372036854775807
120+
; CHECK-NEXT: [[TMP0:%.*]] = getelementptr i64, ptr [[IN_PTR]], i64 [[IN_IDX1_NNEG]]
121+
; CHECK-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr [[TMP0]], i64 1024
122+
; CHECK-NEXT: ret void
123+
;
124+
entry:
125+
%in.idx1.nneg = and i64 %in.idx1, 9223372036854775807
126+
%const1 = getelementptr i8, ptr %in.ptr, i64 1024
127+
%idx1 = getelementptr inbounds i64, ptr %const1, i64 %in.idx1.nneg
128+
ret void
129+
}
130+
131+
define void @notInbounds(ptr %in.ptr, i64 %in.idx1) {
132+
; CHECK-LABEL: define void @notInbounds(
133+
; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
134+
; CHECK-NEXT: entry:
135+
; CHECK-NEXT: [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 9223372036854775807
136+
; CHECK-NEXT: [[TMP0:%.*]] = getelementptr i128, ptr [[IN_PTR]], i64 [[IN_IDX1_NNEG]]
137+
; CHECK-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr [[TMP0]], i64 1024
138+
; CHECK-NEXT: ret void
139+
;
140+
entry:
141+
%in.idx1.nneg = and i64 %in.idx1, 9223372036854775807
142+
%const1 = getelementptr i8, ptr %in.ptr, i64 1024
143+
%idx1 = getelementptr i128, ptr %const1, i64 %in.idx1.nneg
144+
ret void
145+
}
146+
147+
define void @vectorType1(ptr %in.ptr, i64 %in.idx1) {
148+
; CHECK-LABEL: define void @badVectorType(
149+
; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
150+
; CHECK-NEXT: entry:
151+
; CHECK-NEXT: [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 2147483647
152+
; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds <2 x i8>, ptr [[IN_PTR]], i64 [[IN_IDX1_NNEG]]
153+
; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds <4 x i8>, ptr [[TMP0]], i32 3
154+
; CHECK-NEXT: ret void
155+
;
156+
entry:
157+
%in.idx1.nneg = and i64 %in.idx1, 2147483647
158+
%const1 = getelementptr inbounds <4 x i8>, ptr %in.ptr, i32 3
159+
%idx1 = getelementptr inbounds <2 x i8>, ptr %const1, i64 %in.idx1.nneg
160+
ret void
161+
}
162+
163+
define void @vectorType2(ptr %in.ptr, i64 %in.idx1) {
164+
; CHECK-LABEL: define void @badVectorType2(
165+
; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
166+
; CHECK-NEXT: entry:
167+
; CHECK-NEXT: [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 2147483647
168+
; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds <4 x half>, ptr [[IN_PTR]], i64 [[IN_IDX1_NNEG]]
169+
; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds <4 x i8>, ptr [[TMP0]], i32 1
170+
; CHECK-NEXT: ret void
171+
;
172+
entry:
173+
%in.idx1.nneg = and i64 %in.idx1, 2147483647
174+
%const1 = getelementptr inbounds <4 x i8>, ptr %in.ptr, i32 1
175+
%idx1 = getelementptr inbounds <4 x half>, ptr %const1, i64 %in.idx1.nneg
176+
ret void
177+
}
178+
179+
define void @addrspace1(ptr addrspace(1) %in.ptr, i64 %in.idx1) {
180+
; CHECK-LABEL: define void @addrspace1(
181+
; CHECK-SAME: ptr addrspace(1) [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
182+
; CHECK-NEXT: entry:
183+
; CHECK-NEXT: [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 9223372036854775807
184+
; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds i128, ptr addrspace(1) [[IN_PTR]], i64 [[IN_IDX1_NNEG]]
185+
; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds i8, ptr addrspace(1) [[TMP0]], i64 1024
186+
; CHECK-NEXT: ret void
187+
;
188+
entry:
189+
%in.idx1.nneg = and i64 %in.idx1, 9223372036854775807
190+
%const1 = getelementptr inbounds i8, ptr addrspace(1) %in.ptr, i64 1024
191+
%idx1 = getelementptr inbounds i128, ptr addrspace(1) %const1, i64 %in.idx1.nneg
192+
ret void
193+
}
194+
195+
define void @addrspace3(ptr addrspace(3) %in.ptr, i64 %in.idx1) {
196+
; CHECK-LABEL: define void @addrspace3(
197+
; CHECK-SAME: ptr addrspace(3) [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
198+
; CHECK-NEXT: entry:
199+
; CHECK-NEXT: [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 9223372036854775807
200+
; CHECK-NEXT: [[IDXPROM:%.*]] = trunc i64 [[IN_IDX1_NNEG]] to i32
201+
; CHECK-NEXT: [[TMP0:%.*]] = getelementptr i128, ptr addrspace(3) [[IN_PTR]], i32 [[IDXPROM]]
202+
; CHECK-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr addrspace(3) [[TMP0]], i64 1024
203+
; CHECK-NEXT: ret void
204+
;
205+
entry:
206+
%in.idx1.nneg = and i64 %in.idx1, 9223372036854775807
207+
%const1 = getelementptr inbounds i8, ptr addrspace(3) %in.ptr, i64 1024
208+
%idx1 = getelementptr inbounds i128, ptr addrspace(3) %const1, i64 %in.idx1.nneg
209+
ret void
210+
}
211+
212+
define void @addrspace7(ptr addrspace(7) %in.ptr, i64 %in.idx1) {
213+
; CHECK-LABEL: define void @addrspace7(
214+
; CHECK-SAME: ptr addrspace(7) [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
215+
; CHECK-NEXT: entry:
216+
; CHECK-NEXT: [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 9223372036854775807
217+
; CHECK-NEXT: [[IDXPROM:%.*]] = trunc i64 [[IN_IDX1_NNEG]] to i32
218+
; CHECK-NEXT: [[TMP0:%.*]] = getelementptr i128, ptr addrspace(7) [[IN_PTR]], i32 [[IDXPROM]]
219+
; CHECK-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr addrspace(7) [[TMP0]], i64 1024
220+
; CHECK-NEXT: ret void
221+
;
222+
entry:
223+
%in.idx1.nneg = and i64 %in.idx1, 9223372036854775807
224+
%const1 = getelementptr inbounds i8, ptr addrspace(7) %in.ptr, i64 1024
225+
%idx1 = getelementptr inbounds i128, ptr addrspace(7) %const1, i64 %in.idx1.nneg
84226
ret void
85227
}

0 commit comments

Comments
 (0)