Skip to content

Commit fcde60c

Browse files
committed
Insert printf() call in CPA tests to prevent case from optimizing away
Test case was based on this snippet: #include <stdint.h> #include <stdio.h> uint8_t a[2][1][2] = {1, 1, 1, 1}; uint16_t b = 0; void main() { if (a[1][b][b + 1]) printf("hello\n"); } In this patch we add the printf() call to avoid the test case from being optimized away.
1 parent ca45208 commit fcde60c

File tree

2 files changed

+141
-34
lines changed

2 files changed

+141
-34
lines changed

llvm/test/CodeGen/AArch64/cpa-globalisel.ll

Lines changed: 70 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -639,10 +639,14 @@ entry:
639639

640640
@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
641641
@b = hidden global i16 0, align 2
642+
@.str = private unnamed_addr constant [7 x i8] c"hello\0A\00", align 1
642643

643644
define hidden void @multidim() {
644645
; CHECK-CPA-O0-LABEL: multidim:
645646
; CHECK-CPA-O0: // %bb.0: // %entry
647+
; CHECK-CPA-O0-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
648+
; CHECK-CPA-O0-NEXT: .cfi_def_cfa_offset 16
649+
; CHECK-CPA-O0-NEXT: .cfi_offset w30, -16
646650
; CHECK-CPA-O0-NEXT: adrp x8, b
647651
; CHECK-CPA-O0-NEXT: ldrh w9, [x8, :lo12:b]
648652
; CHECK-CPA-O0-NEXT: mov w10, w9
@@ -661,17 +665,42 @@ define hidden void @multidim() {
661665
; CHECK-CPA-O0-NEXT: ldrb w8, [x8]
662666
; CHECK-CPA-O0-NEXT: cbz w8, .LBB14_2
663667
; CHECK-CPA-O0-NEXT: b .LBB14_1
664-
; CHECK-CPA-O0-NEXT: .LBB14_1: // %if.then
668+
; CHECK-CPA-O0-NEXT: .LBB14_1:
669+
; CHECK-CPA-O0-NEXT: adrp x0, .L.str
670+
; CHECK-CPA-O0-NEXT: add x0, x0, :lo12:.L.str
671+
; CHECK-CPA-O0-NEXT: bl printf
665672
; CHECK-CPA-O0-NEXT: b .LBB14_2
666-
; CHECK-CPA-O0-NEXT: .LBB14_2: // %if.end
673+
; CHECK-CPA-O0-NEXT: .LBB14_2:
674+
; CHECK-CPA-O0-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
667675
; CHECK-CPA-O0-NEXT: ret
668676
;
669677
; CHECK-CPA-O3-LABEL: multidim:
670678
; CHECK-CPA-O3: // %bb.0: // %entry
679+
; CHECK-CPA-O3-NEXT: adrp x8, b
680+
; CHECK-CPA-O3-NEXT: adrp x10, a+2
681+
; CHECK-CPA-O3-NEXT: add x10, x10, :lo12:a+2
682+
; CHECK-CPA-O3-NEXT: ldrh w9, [x8, :lo12:b]
683+
; CHECK-CPA-O3-NEXT: ldrh w8, [x8, :lo12:b]
684+
; CHECK-CPA-O3-NEXT: addpt x9, x10, x9, lsl #1
685+
; CHECK-CPA-O3-NEXT: addpt x8, x9, x8
686+
; CHECK-CPA-O3-NEXT: ldrb w8, [x8, #1]
687+
; CHECK-CPA-O3-NEXT: cbz w8, .LBB14_2
688+
; CHECK-CPA-O3-NEXT: // %bb.1:
689+
; CHECK-CPA-O3-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
690+
; CHECK-CPA-O3-NEXT: .cfi_def_cfa_offset 16
691+
; CHECK-CPA-O3-NEXT: .cfi_offset w30, -16
692+
; CHECK-CPA-O3-NEXT: adrp x0, .L.str
693+
; CHECK-CPA-O3-NEXT: add x0, x0, :lo12:.L.str
694+
; CHECK-CPA-O3-NEXT: bl printf
695+
; CHECK-CPA-O3-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
696+
; CHECK-CPA-O3-NEXT: .LBB14_2:
671697
; CHECK-CPA-O3-NEXT: ret
672698
;
673699
; CHECK-NOCPA-O0-LABEL: multidim:
674700
; CHECK-NOCPA-O0: // %bb.0: // %entry
701+
; CHECK-NOCPA-O0-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
702+
; CHECK-NOCPA-O0-NEXT: .cfi_def_cfa_offset 16
703+
; CHECK-NOCPA-O0-NEXT: .cfi_offset w30, -16
675704
; CHECK-NOCPA-O0-NEXT: adrp x8, b
676705
; CHECK-NOCPA-O0-NEXT: ldrh w9, [x8, :lo12:b]
677706
; CHECK-NOCPA-O0-NEXT: mov w10, w9
@@ -685,35 +714,59 @@ define hidden void @multidim() {
685714
; CHECK-NOCPA-O0-NEXT: ldrb w8, [x8]
686715
; CHECK-NOCPA-O0-NEXT: cbz w8, .LBB14_2
687716
; CHECK-NOCPA-O0-NEXT: b .LBB14_1
688-
; CHECK-NOCPA-O0-NEXT: .LBB14_1: // %if.then
717+
; CHECK-NOCPA-O0-NEXT: .LBB14_1:
718+
; CHECK-NOCPA-O0-NEXT: adrp x0, .L.str
719+
; CHECK-NOCPA-O0-NEXT: add x0, x0, :lo12:.L.str
720+
; CHECK-NOCPA-O0-NEXT: bl printf
689721
; CHECK-NOCPA-O0-NEXT: b .LBB14_2
690-
; CHECK-NOCPA-O0-NEXT: .LBB14_2: // %if.end
722+
; CHECK-NOCPA-O0-NEXT: .LBB14_2:
723+
; CHECK-NOCPA-O0-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
691724
; CHECK-NOCPA-O0-NEXT: ret
692725
;
693726
; CHECK-NOCPA-O3-LABEL: multidim:
694727
; CHECK-NOCPA-O3: // %bb.0: // %entry
728+
; CHECK-NOCPA-O3-NEXT: adrp x8, b
729+
; CHECK-NOCPA-O3-NEXT: adrp x10, a+2
730+
; CHECK-NOCPA-O3-NEXT: add x10, x10, :lo12:a+2
731+
; CHECK-NOCPA-O3-NEXT: ldrh w9, [x8, :lo12:b]
732+
; CHECK-NOCPA-O3-NEXT: ldrh w8, [x8, :lo12:b]
733+
; CHECK-NOCPA-O3-NEXT: add x9, x10, x9, lsl #1
734+
; CHECK-NOCPA-O3-NEXT: add x8, x9, x8
735+
; CHECK-NOCPA-O3-NEXT: ldrb w8, [x8, #1]
736+
; CHECK-NOCPA-O3-NEXT: cbz w8, .LBB14_2
737+
; CHECK-NOCPA-O3-NEXT: // %bb.1:
738+
; CHECK-NOCPA-O3-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
739+
; CHECK-NOCPA-O3-NEXT: .cfi_def_cfa_offset 16
740+
; CHECK-NOCPA-O3-NEXT: .cfi_offset w30, -16
741+
; CHECK-NOCPA-O3-NEXT: adrp x0, .L.str
742+
; CHECK-NOCPA-O3-NEXT: add x0, x0, :lo12:.L.str
743+
; CHECK-NOCPA-O3-NEXT: bl printf
744+
; CHECK-NOCPA-O3-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
745+
; CHECK-NOCPA-O3-NEXT: .LBB14_2:
695746
; CHECK-NOCPA-O3-NEXT: ret
696747
entry:
697-
%0 = load i16, ptr @b, align 2
698-
%idxprom = zext i16 %0 to i64
699-
%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
700748
%1 = load i16, ptr @b, align 2
701-
%conv = zext i16 %1 to i32
702-
%add = add nsw i32 %conv, 1
703-
%idxprom1 = sext i32 %add to i64
704-
%arrayidx2 = getelementptr inbounds [2 x i8], ptr %arrayidx, i64 0, i64 %idxprom1
705-
%2 = load i8, ptr %arrayidx2, align 1
706-
%tobool = icmp ne i8 %2, 0
707-
br i1 %tobool, label %if.then, label %if.end
749+
%2 = zext i16 %1 to i64
750+
%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
751+
%4 = load i16, ptr @b, align 2
752+
%5 = zext i16 %4 to i32
753+
%6 = add nsw i32 %5, 1
754+
%7 = sext i32 %6 to i64
755+
%8 = getelementptr inbounds [2 x i8], ptr %3, i64 0, i64 %7
756+
%9 = load i8, ptr %8, align 1
757+
%10 = icmp ne i8 %9, 0
758+
br i1 %10, label %11, label %13
708759

709-
if.then:
710-
br label %if.end
760+
11:
761+
%12 = call i32 (ptr, ...) @printf(ptr noundef @.str)
762+
br label %13
711763

712-
if.end:
764+
13:
713765
ret void
714766
}
715767

716768
declare void @llvm.memcpy.p0.p0.i64(ptr, ptr, i64, i1)
769+
declare i32 @printf(ptr noundef, ...) #1
717770

718771
!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}
719772
!7 = !{!8, !8, i64 0}

llvm/test/CodeGen/AArch64/cpa-selectiondag.ll

Lines changed: 71 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -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

664665
define 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
715767
entry:
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

735788
declare 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

Comments
 (0)