@@ -660,10 +660,14 @@ entry:
660660
661661@a = hidden global [2 x [1 x [2 x i8 ]]] [[1 x [2 x i8 ]] [[2 x i8 ] c "\01\01 " ], [1 x [2 x i8 ]] [[2 x i8 ] c "\01\01 " ]], align 1
662662@b = hidden global i16 0 , align 2
663+ @.str = private unnamed_addr constant [7 x i8 ] c "hello\0A\00 " , align 1
663664
664665define hidden void @multidim () {
665666; CHECK-CPA-O0-LABEL: multidim:
666667; CHECK-CPA-O0: // %bb.0: // %entry
668+ ; CHECK-CPA-O0-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
669+ ; CHECK-CPA-O0-NEXT: .cfi_def_cfa_offset 16
670+ ; CHECK-CPA-O0-NEXT: .cfi_offset w30, -16
667671; CHECK-CPA-O0-NEXT: adrp x8, b
668672; CHECK-CPA-O0-NEXT: ldrh w9, [x8, :lo12:b]
669673; CHECK-CPA-O0-NEXT: mov w8, w9
@@ -681,17 +685,44 @@ define hidden void @multidim() {
681685; CHECK-CPA-O0-NEXT: ldrb w8, [x8]
682686; CHECK-CPA-O0-NEXT: cbz w8, .LBB14_2
683687; CHECK-CPA-O0-NEXT: b .LBB14_1
684- ; CHECK-CPA-O0-NEXT: .LBB14_1: // %if.then
688+ ; CHECK-CPA-O0-NEXT: .LBB14_1:
689+ ; CHECK-CPA-O0-NEXT: adrp x0, .L.str
690+ ; CHECK-CPA-O0-NEXT: add x0, x0, :lo12:.L.str
691+ ; CHECK-CPA-O0-NEXT: bl printf
685692; CHECK-CPA-O0-NEXT: b .LBB14_2
686- ; CHECK-CPA-O0-NEXT: .LBB14_2: // %if.end
693+ ; CHECK-CPA-O0-NEXT: .LBB14_2:
694+ ; CHECK-CPA-O0-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
687695; CHECK-CPA-O0-NEXT: ret
688696;
689697; CHECK-CPA-O3-LABEL: multidim:
690698; CHECK-CPA-O3: // %bb.0: // %entry
699+ ; CHECK-CPA-O3-NEXT: adrp x8, b
700+ ; CHECK-CPA-O3-NEXT: mov w9, #2 // =0x2
701+ ; CHECK-CPA-O3-NEXT: adrp x10, a
702+ ; CHECK-CPA-O3-NEXT: add x10, x10, :lo12:a
703+ ; CHECK-CPA-O3-NEXT: ldrh w8, [x8, :lo12:b]
704+ ; CHECK-CPA-O3-NEXT: addpt x9, x10, x9
705+ ; CHECK-CPA-O3-NEXT: addpt x9, x9, x8, lsl #1
706+ ; CHECK-CPA-O3-NEXT: add x8, x8, #1
707+ ; CHECK-CPA-O3-NEXT: addpt x8, x9, x8
708+ ; CHECK-CPA-O3-NEXT: ldrb w8, [x8]
709+ ; CHECK-CPA-O3-NEXT: cbz w8, .LBB14_2
710+ ; CHECK-CPA-O3-NEXT: // %bb.1:
711+ ; CHECK-CPA-O3-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
712+ ; CHECK-CPA-O3-NEXT: .cfi_def_cfa_offset 16
713+ ; CHECK-CPA-O3-NEXT: .cfi_offset w30, -16
714+ ; CHECK-CPA-O3-NEXT: adrp x0, .L.str
715+ ; CHECK-CPA-O3-NEXT: add x0, x0, :lo12:.L.str
716+ ; CHECK-CPA-O3-NEXT: bl printf
717+ ; CHECK-CPA-O3-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
718+ ; CHECK-CPA-O3-NEXT: .LBB14_2:
691719; CHECK-CPA-O3-NEXT: ret
692720;
693721; CHECK-NOCPA-O0-LABEL: multidim:
694722; CHECK-NOCPA-O0: // %bb.0: // %entry
723+ ; CHECK-NOCPA-O0-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
724+ ; CHECK-NOCPA-O0-NEXT: .cfi_def_cfa_offset 16
725+ ; CHECK-NOCPA-O0-NEXT: .cfi_offset w30, -16
695726; CHECK-NOCPA-O0-NEXT: adrp x8, b
696727; CHECK-NOCPA-O0-NEXT: ldrh w9, [x8, :lo12:b]
697728; CHECK-NOCPA-O0-NEXT: adrp x8, a
@@ -704,35 +735,58 @@ define hidden void @multidim() {
704735; CHECK-NOCPA-O0-NEXT: ldrb w8, [x8, #2]
705736; CHECK-NOCPA-O0-NEXT: cbz w8, .LBB14_2
706737; CHECK-NOCPA-O0-NEXT: b .LBB14_1
707- ; CHECK-NOCPA-O0-NEXT: .LBB14_1: // %if.then
738+ ; CHECK-NOCPA-O0-NEXT: .LBB14_1:
739+ ; CHECK-NOCPA-O0-NEXT: adrp x0, .L.str
740+ ; CHECK-NOCPA-O0-NEXT: add x0, x0, :lo12:.L.str
741+ ; CHECK-NOCPA-O0-NEXT: bl printf
708742; CHECK-NOCPA-O0-NEXT: b .LBB14_2
709- ; CHECK-NOCPA-O0-NEXT: .LBB14_2: // %if.end
743+ ; CHECK-NOCPA-O0-NEXT: .LBB14_2:
744+ ; CHECK-NOCPA-O0-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
710745; CHECK-NOCPA-O0-NEXT: ret
711746;
712747; CHECK-NOCPA-O3-LABEL: multidim:
713748; CHECK-NOCPA-O3: // %bb.0: // %entry
749+ ; CHECK-NOCPA-O3-NEXT: adrp x8, b
750+ ; CHECK-NOCPA-O3-NEXT: adrp x9, a
751+ ; CHECK-NOCPA-O3-NEXT: add x9, x9, :lo12:a
752+ ; CHECK-NOCPA-O3-NEXT: ldrh w8, [x8, :lo12:b]
753+ ; CHECK-NOCPA-O3-NEXT: add x9, x9, x8, lsl #1
754+ ; CHECK-NOCPA-O3-NEXT: add x8, x9, x8
755+ ; CHECK-NOCPA-O3-NEXT: ldrb w8, [x8, #3]
756+ ; CHECK-NOCPA-O3-NEXT: cbz w8, .LBB14_2
757+ ; CHECK-NOCPA-O3-NEXT: // %bb.1:
758+ ; CHECK-NOCPA-O3-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
759+ ; CHECK-NOCPA-O3-NEXT: .cfi_def_cfa_offset 16
760+ ; CHECK-NOCPA-O3-NEXT: .cfi_offset w30, -16
761+ ; CHECK-NOCPA-O3-NEXT: adrp x0, .L.str
762+ ; CHECK-NOCPA-O3-NEXT: add x0, x0, :lo12:.L.str
763+ ; CHECK-NOCPA-O3-NEXT: bl printf
764+ ; CHECK-NOCPA-O3-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
765+ ; CHECK-NOCPA-O3-NEXT: .LBB14_2:
714766; CHECK-NOCPA-O3-NEXT: ret
715767entry:
716- %0 = load i16 , ptr @b , align 2
717- %idxprom = zext i16 %0 to i64
718- %arrayidx = getelementptr inbounds [1 x [2 x i8 ]], ptr getelementptr inbounds ([2 x [1 x [2 x i8 ]]], ptr @a , i64 0 , i64 1 ), i64 0 , i64 %idxprom
719768 %1 = load i16 , ptr @b , align 2
720- %conv = zext i16 %1 to i32
721- %add = add nsw i32 %conv , 1
722- %idxprom1 = sext i32 %add to i64
723- %arrayidx2 = getelementptr inbounds [2 x i8 ], ptr %arrayidx , i64 0 , i64 %idxprom1
724- %2 = load i8 , ptr %arrayidx2 , align 1
725- %tobool = icmp ne i8 %2 , 0
726- br i1 %tobool , label %if.then , label %if.end
769+ %2 = zext i16 %1 to i64
770+ %3 = getelementptr inbounds nuw [1 x [2 x i8 ]], ptr getelementptr inbounds ([2 x [1 x [2 x i8 ]]], ptr @a , i64 0 , i64 1 ), i64 0 , i64 %2
771+ %4 = load i16 , ptr @b , align 2
772+ %5 = zext i16 %4 to i32
773+ %6 = add nsw i32 %5 , 1
774+ %7 = sext i32 %6 to i64
775+ %8 = getelementptr inbounds [2 x i8 ], ptr %3 , i64 0 , i64 %7
776+ %9 = load i8 , ptr %8 , align 1
777+ %10 = icmp ne i8 %9 , 0
778+ br i1 %10 , label %11 , label %13
727779
728- if.then:
729- br label %if.end
780+ 11 :
781+ %12 = call i32 (ptr , ...) @printf (ptr noundef @.str )
782+ br label %13
730783
731- if.end :
784+ 13 :
732785 ret void
733786}
734787
735788declare void @llvm.memcpy.p0.p0.i64 (ptr , ptr , i64 , i1 )
789+ declare i32 @printf (ptr noundef, ...) #1
736790
737791!6 = !{i64 0 , i64 8 , !7 , i64 8 , i64 8 , !7 , i64 16 , i64 8 , !7 , i64 24 , i64 8 , !7 , i64 32 , i64 8 , !7 , i64 40 , i64 8 , !7 }
738792!7 = !{!8 , !8 , i64 0 }
0 commit comments