@@ -284,3 +284,29 @@ entry:
284
284
%idx3 = getelementptr i8 , ptr addrspace (3 ) %const3 , i64 %in.idx2
285
285
ret void
286
286
}
287
+
288
+ define void @multiple_index_maybe_neg (ptr %in.ptr , i64 %in.idx1 ) {
289
+ ; CHECK-LABEL: define void @multiple_index_maybe_neg(
290
+ ; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
291
+ ; CHECK-NEXT: [[CONST1:%.*]] = getelementptr inbounds [2 x <2 x i8>], ptr [[IN_PTR]], i64 0, i64 1
292
+ ; CHECK-NEXT: [[IDX1:%.*]] = getelementptr inbounds [2 x <2 x i8>], ptr [[CONST1]], i64 0, i64 [[IN_IDX1]]
293
+ ; CHECK-NEXT: ret void
294
+ ;
295
+ %const1 = getelementptr inbounds [2 x <2 x i8 >], ptr %in.ptr , i64 0 , i64 1
296
+ %idx1 = getelementptr inbounds [2 x <2 x i8 >], ptr %const1 , i64 0 , i64 %in.idx1
297
+ ret void
298
+ }
299
+
300
+ define void @multiple_index_nonneg (ptr %in.ptr , i64 %in.idx1 ) {
301
+ ; CHECK-LABEL: define void @multiple_index_nonneg(
302
+ ; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
303
+ ; CHECK-NEXT: [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 9223372036854775807
304
+ ; CHECK-NEXT: [[CONST1:%.*]] = getelementptr inbounds [2 x <2 x i8>], ptr [[IN_PTR]], i64 0, i64 1
305
+ ; CHECK-NEXT: [[IDX1:%.*]] = getelementptr inbounds [2 x <2 x i8>], ptr [[CONST1]], i64 0, i64 [[IN_IDX1_NNEG]]
306
+ ; CHECK-NEXT: ret void
307
+ ;
308
+ %in.idx1.nneg = and i64 %in.idx1 , 9223372036854775807
309
+ %const1 = getelementptr inbounds [2 x <2 x i8 >], ptr %in.ptr , i64 0 , i64 1
310
+ %idx1 = getelementptr inbounds [2 x <2 x i8 >], ptr %const1 , i64 0 , i64 %in.idx1.nneg
311
+ ret void
312
+ }
0 commit comments