74 lines · plain
1; RUN: llc -mtriple=aarch64-apple-ios -asm-verbose=false \2; RUN: -aarch64-enable-collect-loh=false -O1 -global-merge-group-by-use \3; RUN: -global-merge-ignore-single-use %s -o - | FileCheck %s4 5; Check that, at -O1, we only merge globals used in minsize functions.6; We assume that globals of the same size aren't reordered inside a set.7; We use -global-merge-ignore-single-use, and thus only expect one merged set.8 9@m1 = internal global i32 0, align 410@n1 = internal global i32 0, align 411 12; CHECK-LABEL: f1:13define void @f1(i32 %a1, i32 %a2) minsize nounwind {14; CHECK-NEXT: adrp x8, [[SET:__MergedGlobals]]@PAGE15; CHECK-NEXT: add x8, x8, [[SET]]@PAGEOFF16; CHECK-NEXT: stp w0, w1, [x8]17; CHECK-NEXT: ret18 store i32 %a1, ptr @m1, align 419 store i32 %a2, ptr @n1, align 420 ret void21}22 23@m2 = internal global i32 0, align 424@n2 = internal global i32 0, align 425 26; CHECK-LABEL: f2:27define void @f2(i32 %a1, i32 %a2) nounwind {28; CHECK-NEXT: adrp x8, _m2@PAGE29; CHECK-NEXT: adrp x9, _n2@PAGE30; CHECK-NEXT: str w0, [x8, _m2@PAGEOFF]31; CHECK-NEXT: str w1, [x9, _n2@PAGEOFF]32; CHECK-NEXT: ret33 store i32 %a1, ptr @m2, align 434 store i32 %a2, ptr @n2, align 435 ret void36}37 38; If we have use sets partially overlapping between a minsize and a non-minsize39; function, explicitly check that we only consider the globals used in the40; minsize function for merging.41 42@m3 = internal global i32 0, align 443@n3 = internal global i32 0, align 444 45; CHECK-LABEL: f3:46define void @f3(i32 %a1, i32 %a2) minsize nounwind {47; CHECK-NEXT: adrp x8, [[SET]]@PAGE+848; CHECK-NEXT: add x8, x8, [[SET]]@PAGEOFF+849; CHECK-NEXT: stp w0, w1, [x8]50; CHECK-NEXT: ret51 store i32 %a1, ptr @m3, align 452 store i32 %a2, ptr @n3, align 453 ret void54}55 56@n4 = internal global i32 0, align 457 58; CHECK-LABEL: f4:59define void @f4(i32 %a1, i32 %a2) nounwind {60; CHECK-NEXT: adrp x8, [[SET]]@PAGE+861; CHECK-NEXT: adrp x9, _n4@PAGE62; CHECK-NEXT: str w0, [x8, [[SET]]@PAGEOFF+8]63; CHECK-NEXT: str w1, [x9, _n4@PAGEOFF]64; CHECK-NEXT: ret65 store i32 %a1, ptr @m3, align 466 store i32 %a2, ptr @n4, align 467 ret void68}69 70; CHECK-DAG: .zerofill __DATA,__bss,[[SET]],16,271; CHECK-DAG: .zerofill __DATA,__bss,_m2,4,272; CHECK-DAG: .zerofill __DATA,__bss,_n2,4,273; CHECK-DAG: .zerofill __DATA,__bss,_n4,4,274