@@ -6,7 +6,7 @@ define void @inboundsPossiblyNegative(ptr %in.ptr, i64 %in.idx1) {
66; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0:[0-9]+]] {
77; CHECK-NEXT: entry:
88; CHECK-NEXT: [[TMP0:%.*]] = getelementptr <2 x i8>, ptr [[IN_PTR]], i64 [[IN_IDX1]]
9- ; CHECK-NEXT: [[TMP1:%.*]] = getelementptr <2 x i8>, ptr [[TMP0]], i32 1
9+ ; CHECK-NEXT: [[TMP1:%.*]] = getelementptr <2 x i8>, ptr [[TMP0]], i64 1
1010; CHECK-NEXT: ret void
1111;
1212entry:
@@ -145,7 +145,7 @@ entry:
145145}
146146
147147define void @vectorType1 (ptr %in.ptr , i64 %in.idx1 ) {
148- ; CHECK-LABEL: define void @badVectorType (
148+ ; CHECK-LABEL: define void @vectorType1 (
149149; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
150150; CHECK-NEXT: entry:
151151; CHECK-NEXT: [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 2147483647
@@ -161,7 +161,7 @@ entry:
161161}
162162
163163define void @vectorType2 (ptr %in.ptr , i64 %in.idx1 ) {
164- ; CHECK-LABEL: define void @badVectorType2 (
164+ ; CHECK-LABEL: define void @vectorType2 (
165165; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
166166; CHECK-NEXT: entry:
167167; CHECK-NEXT: [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 2147483647
@@ -176,6 +176,87 @@ entry:
176176 ret void
177177}
178178
179+ define void @vectorType3 (ptr %in.ptr , i64 %in.idx1 ) {
180+ ; CHECK-LABEL: define void @vectorType3(
181+ ; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
182+ ; CHECK-NEXT: entry:
183+ ; CHECK-NEXT: [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 2147483647
184+ ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds ptr, ptr [[IN_PTR]], i64 [[IN_IDX1_NNEG]]
185+ ; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds <4 x ptr>, ptr [[TMP0]], i32 1
186+ ; CHECK-NEXT: ret void
187+ ;
188+ entry:
189+ %in.idx1.nneg = and i64 %in.idx1 , 2147483647
190+ %const1 = getelementptr inbounds <4 x ptr >, ptr %in.ptr , i32 1
191+ %idx1 = getelementptr inbounds ptr , ptr %const1 , i64 %in.idx1.nneg
192+ ret void
193+ }
194+
195+ define void @vectorType4 (ptr %in.ptr , i64 %in.idx1 ) {
196+ ; CHECK-LABEL: define void @vectorType4(
197+ ; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
198+ ; CHECK-NEXT: entry:
199+ ; CHECK-NEXT: [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 2147483647
200+ ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds <8 x ptr addrspace(1)>, ptr [[IN_PTR]], i64 [[IN_IDX1_NNEG]]
201+ ; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds <4 x ptr>, ptr [[TMP0]], i32 3
202+ ; CHECK-NEXT: ret void
203+ ;
204+ entry:
205+ %in.idx1.nneg = and i64 %in.idx1 , 2147483647
206+ %const1 = getelementptr inbounds <4 x ptr >, ptr %in.ptr , i32 3
207+ %idx1 = getelementptr inbounds <8 x ptr addrspace (1 )>, ptr %const1 , i64 %in.idx1.nneg
208+ ret void
209+ }
210+
211+
212+ define void @ptrType (ptr %in.ptr , i64 %in.idx1 ) {
213+ ; CHECK-LABEL: define void @ptrType(
214+ ; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
215+ ; CHECK-NEXT: entry:
216+ ; CHECK-NEXT: [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 2147483647
217+ ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds ptr, ptr [[IN_PTR]], i64 [[IN_IDX1_NNEG]]
218+ ; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds <4 x ptr>, ptr [[TMP0]], i32 1
219+ ; CHECK-NEXT: ret void
220+ ;
221+ entry:
222+ %in.idx1.nneg = and i64 %in.idx1 , 2147483647
223+ %const1 = getelementptr inbounds <4 x ptr >, ptr %in.ptr , i32 1
224+ %idx1 = getelementptr inbounds ptr , ptr %const1 , i64 %in.idx1.nneg
225+ ret void
226+ }
227+
228+ define void @ptrType2 (ptr %in.ptr , i64 %in.idx1 ) {
229+ ; CHECK-LABEL: define void @ptrType2(
230+ ; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
231+ ; CHECK-NEXT: entry:
232+ ; CHECK-NEXT: [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 2147483647
233+ ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds i64, ptr [[IN_PTR]], i64 [[IN_IDX1_NNEG]]
234+ ; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds ptr addrspace(3), ptr [[TMP0]], i32 3
235+ ; CHECK-NEXT: ret void
236+ ;
237+ entry:
238+ %in.idx1.nneg = and i64 %in.idx1 , 2147483647
239+ %const1 = getelementptr inbounds ptr addrspace (3 ), ptr %in.ptr , i32 3
240+ %idx1 = getelementptr inbounds i64 , ptr %const1 , i64 %in.idx1.nneg
241+ ret void
242+ }
243+
244+ define void @ptrType3 (ptr %in.ptr , i64 %in.idx1 ) {
245+ ; CHECK-LABEL: define void @ptrType3(
246+ ; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
247+ ; CHECK-NEXT: entry:
248+ ; CHECK-NEXT: [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 2147483647
249+ ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds i16, ptr [[IN_PTR]], i64 [[IN_IDX1_NNEG]]
250+ ; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds ptr addrspace(7), ptr [[TMP0]], i32 3
251+ ; CHECK-NEXT: ret void
252+ ;
253+ entry:
254+ %in.idx1.nneg = and i64 %in.idx1 , 2147483647
255+ %const1 = getelementptr inbounds ptr addrspace (7 ), ptr %in.ptr , i32 3
256+ %idx1 = getelementptr inbounds i16 , ptr %const1 , i64 %in.idx1.nneg
257+ ret void
258+ }
259+
179260define void @addrspace1 (ptr addrspace (1 ) %in.ptr , i64 %in.idx1 ) {
180261; CHECK-LABEL: define void @addrspace1(
181262; CHECK-SAME: ptr addrspace(1) [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
0 commit comments