@@ -271,14 +271,13 @@ const int* foo10() {
271271// CHECK-NEXT: [[ARR_2:%.*]] = alloca [4 x i32], align 16
272272// CHECK-NEXT: store i32 [[A:%.*]], ptr [[A_ADDR]], align 4
273273// CHECK-NEXT: store i32 [[B:%.*]], ptr [[B_ADDR]], align 4
274- // CHECK-NEXT: [[ARRINIT_BEGIN:%.*]] = getelementptr inbounds [4 x i32], ptr [[ARR_2]], i64 0, i64 0
275274// CHECK-NEXT: [[TMP_0:%.*]] = load i32, ptr [[A_ADDR]], align 4
276- // CHECK-NEXT: store i32 [[TMP_0]], ptr [[ARRINIT_BEGIN ]], align 4
277- // CHECK-NEXT: [[ARRINIT_ELEM:%.*]] = getelementptr inbounds i32, ptr [[ARRINIT_BEGIN ]], i64 1
275+ // CHECK-NEXT: store i32 [[TMP_0]], ptr [[ARR_2 ]], align 4
276+ // CHECK-NEXT: [[ARRINIT_ELEM:%.*]] = getelementptr inbounds i32, ptr [[ARR_2 ]], i64 1
278277// CHECK-NEXT: [[TMP_1:%.*]] = load i32, ptr [[B_ADDR]], align 4
279278// CHECK-NEXT: store i32 [[TMP_1]], ptr [[ARRINIT_ELEM]], align 4
280- // CHECK-NEXT: [[ARRINIT_START:%.*]] = getelementptr inbounds i32, ptr [[ARRINIT_ELEM ]], i64 1
281- // CHECK-NEXT: [[ARRINIT_END:%.*]] = getelementptr inbounds i32, ptr [[ARRINIT_BEGIN ]], i64 4
279+ // CHECK-NEXT: [[ARRINIT_START:%.*]] = getelementptr inbounds i32, ptr [[ARR_2 ]], i64 2
280+ // CHECK-NEXT: [[ARRINIT_END:%.*]] = getelementptr inbounds i32, ptr [[ARR_2 ]], i64 4
282281// CHECK-NEXT: br label [[ARRINIT_BODY:%.*]]
283282// CHECK: [[ARRINIT_CUR:%.*]] = phi ptr [ [[ARRINIT_START]], %entry ], [ [[ARRINIT_NEXT:%.*]], [[ARRINIT_BODY]] ]
284283// CHECK-NEXT: store i32 0, ptr [[ARRINIT_CUR]], align 4
@@ -297,10 +296,9 @@ void foo11(int a, int b) {
297296// CHECK-NEXT: [[ARR_3:%.*]] = alloca [2 x i32], align 4
298297// CHECK-NEXT: store i32 [[A:%.*]], ptr [[A_ADDR]], align 4
299298// CHECK-NEXT: store i32 [[B:%.*]], ptr [[B_ADDR]], align 4
300- // CHECK-NEXT: [[ARRINIT_BEGIN:%.*]] = getelementptr inbounds [2 x i32], ptr [[ARR_3]], i64 0, i64 0
301299// CHECK-NEXT: [[TMP_0:%.*]] = load i32, ptr [[A_ADDR]], align 4
302- // CHECK-NEXT: store i32 [[TMP_0]], ptr [[ARRINIT_BEGIN ]], align 4
303- // CHECK-NEXT: [[ARRINIT_ELEMENT:%.*]] = getelementptr inbounds i32, ptr [[ARRINIT_BEGIN ]], i64 1
300+ // CHECK-NEXT: store i32 [[TMP_0]], ptr [[ARR_3 ]], align 4
301+ // CHECK-NEXT: [[ARRINIT_ELEMENT:%.*]] = getelementptr inbounds i32, ptr [[ARR_3 ]], i64 1
304302// CHECK-NEXT: [[TMP_1:%.*]] = load i32, ptr [[B_ADDR]], align 4
305303// CHECK-NEXT: store i32 [[TMP_1]], ptr [[ARRINIT_ELEMENT]], align 4
306304// CHECK-NEXT: ret void
@@ -336,8 +334,7 @@ const int* foo15() {
336334// CHECK-NEXT: entry:
337335// CHECK-NEXT: [[ARR_6:%.*arr6.*]] = alloca ptr, align 8
338336// CHECK-NEXT: [[REF_TMP:%.*]] = alloca [1 x i32], align 4
339- // CHECK-NEXT: [[ARRINIT_BEGIN:%.*]] = getelementptr inbounds [1 x i32], ptr [[REF_TMP]], i64 0, i64 0
340- // CHECK-NEXT: store i32 3, ptr [[ARRINIT_BEGIN]], align 4
337+ // CHECK-NEXT: store i32 3, ptr [[REF_TMP]], align 4
341338// CHECK-NEXT: store ptr [[REF_TMP]], ptr [[ARR_6]], align 8
342339// CHECK-NEXT: ret void
343340void foo16 () {
@@ -348,10 +345,9 @@ void foo16() {
348345// CHECK-NEXT: entry:
349346// CHECK-NEXT: [[ARR_7:%.*arr7.*]] = alloca ptr, align 8
350347// CHECK-NEXT: [[REF_TMP:%.*]] = alloca [2 x i32], align 4
351- // CHECK-NEXT: [[ARRINIT_BEGIN:%.*]] = getelementptr inbounds [2 x i32], ptr [[REF_TMP]], i64 0, i64 0
352- // CHECK-NEXT: store i32 4, ptr [[ARRINIT_BEGIN]], align 4
353- // CHECK-NEXT: [[ARRINIT_START:%.*]] = getelementptr inbounds i32, ptr [[ARRINIT_BEGIN]], i64 1
354- // CHECK-NEXT: [[ARRINIT_END:%.*]] = getelementptr inbounds i32, ptr [[ARRINIT_BEGIN]], i64 2
348+ // CHECK-NEXT: store i32 4, ptr [[REF_TMP]], align 4
349+ // CHECK-NEXT: [[ARRINIT_START:%.*]] = getelementptr inbounds i32, ptr [[REF_TMP]], i64 1
350+ // CHECK-NEXT: [[ARRINIT_END:%.*]] = getelementptr inbounds i32, ptr [[REF_TMP]], i64 2
355351// CHECK-NEXT: br label [[ARRINIT_BODY]]
356352// CHECK: [[ARRINIT_CUR:%.*]] = phi ptr [ [[ARRINIT_START]], %entry ], [ [[ARRINIT_NEXT:%.*]], [[ARRINIT_BODY]] ]
357353// CHECK-NEXT: store i32 0, ptr [[ARRINIT_CUR]], align 4
@@ -533,14 +529,12 @@ namespace gh68198 {
533529 // CHECK-NEXT: entry
534530 // CHECK-NEXT: [[ARR_10:%.*arr9.*]] = alloca ptr, align 8
535531 // CHECK-NEXT: [[CALL_PTR]] = call noalias noundef nonnull ptr @_Znam(i64 noundef 16)
536- // CHECK-NEXT: [[ARRAYINIT_BEGIN:%.*]] = getelementptr inbounds [2 x i32], ptr [[CALL]], i64 0, i64 0
537- // CHECK-NEXT: store i32 1, ptr [[ARRAYINIT_BEGIN]], align 4
538- // CHECK-NEXT: [[ARRAYINIT_ELEMENT:%.*]] = getelementptr inbounds i32, ptr [[ARRAYINIT_BEGIN]], i64 1
532+ // CHECK-NEXT: store i32 1, ptr [[CALL]], align 4
533+ // CHECK-NEXT: [[ARRAYINIT_ELEMENT:%.*]] = getelementptr inbounds i32, ptr [[CALL]], i64 1
539534 // CHECK-NEXT: store i32 2, ptr [[ARRAYINIT_ELEMENT]], align 4
540535 // CHECK-NEXT: [[ARRAY_EXP_NEXT:%.*]] = getelementptr inbounds [2 x i32], ptr %call, i64 1
541- // CHECK-NEXT: [[ARRAYINIT_BEGIN1:%.*]] = getelementptr inbounds [2 x i32], ptr [[ARRAY_EXP_NEXT]], i64 0, i64 0
542- // CHECK-NEXT: store i32 3, ptr [[ARRAYINIT_BEGIN1]], align 4
543- // CHECK-NEXT: [[ARRAYINIT_ELEMENT2:%.*]] = getelementptr inbounds i32, ptr [[ARRAYINIT_BEGIN1]], i64 1
536+ // CHECK-NEXT: store i32 3, ptr [[ARRAY_EXP_NEXT]], align 4
537+ // CHECK-NEXT: [[ARRAYINIT_ELEMENT2:%.*]] = getelementptr inbounds i32, ptr [[ARRAY_EXP_NEXT]], i64 1
544538 // CHECK-NEXT: store i32 4, ptr [[ARRAYINIT_ELEMENT2]], align 4
545539 // CHECK-NEXT: [[ARRAY_EXP_NEXT3:%.*]] = getelementptr inbounds [2 x i32], ptr [[ARRAY_EXP_NEXT]], i64 1
546540 // CHECK-NEXT: store ptr [[CALL_PTR]], ptr [[ARR_10]], align 8
@@ -553,14 +547,12 @@ namespace gh68198 {
553547 // CHECK-NEXT: entry
554548 // CHECK-NEXT: [[ARR_10:%.*arr10.*]] = alloca ptr, align 8
555549 // CHECK-NEXT: [[CALL_PTR]] = call noalias noundef nonnull ptr @_Znam(i64 noundef 32)
556- // CHECK-NEXT: [[ARRAYINIT_BEGIN:%.*]] = getelementptr inbounds [2 x i32], ptr [[CALL]], i64 0, i64 0
557- // CHECK-NEXT: store i32 5, ptr [[ARRAYINIT_BEGIN]], align 4
558- // CHECK-NEXT: [[ARRAYINIT_ELEMENT:%.*]] = getelementptr inbounds i32, ptr [[ARRAYINIT_BEGIN]], i64 1
550+ // CHECK-NEXT: store i32 5, ptr [[CALL]], align 4
551+ // CHECK-NEXT: [[ARRAYINIT_ELEMENT:%.*]] = getelementptr inbounds i32, ptr [[CALL]], i64 1
559552 // CHECK-NEXT: store i32 6, ptr [[ARRAYINIT_ELEMENT]], align 4
560553 // CHECK-NEXT: [[ARRAY_EXP_NEXT:%.*]] = getelementptr inbounds [2 x i32], ptr %call, i64 1
561- // CHECK-NEXT: [[ARRAYINIT_BEGIN1:%.*]] = getelementptr inbounds [2 x i32], ptr [[ARRAY_EXP_NEXT]], i64 0, i64 0
562- // CHECK-NEXT: store i32 7, ptr [[ARRAYINIT_BEGIN1]], align 4
563- // CHECK-NEXT: [[ARRAYINIT_ELEMENT2:%.*]] = getelementptr inbounds i32, ptr [[ARRAYINIT_BEGIN1]], i64 1
554+ // CHECK-NEXT: store i32 7, ptr [[ARRAY_EXP_NEXT]], align 4
555+ // CHECK-NEXT: [[ARRAYINIT_ELEMENT2:%.*]] = getelementptr inbounds i32, ptr [[ARRAY_EXP_NEXT]], i64 1
564556 // CHECK-NEXT: store i32 8, ptr [[ARRAYINIT_ELEMENT2]], align 4
565557 // CHECK-NEXT: [[ARRAY_EXP_NEXT3:%.*]] = getelementptr inbounds [2 x i32], ptr [[ARRAY_EXP_NEXT]], i64 1
566558 // CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 4 [[ARRAY_EXP_NEXT3]], i8 0, i64 16, i1 false)
0 commit comments