brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.0 KiB · ab2b432 Raw
102 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=aarch64-apple-ios \3; RUN:   -aarch64-enable-collect-loh=false -aarch64-enable-global-merge \4; RUN:   -global-merge-group-by-use -global-merge-ignore-single-use=false %s \5; RUN:   -o - | FileCheck %s6 7; We assume that globals of the same size aren't reordered inside a set.8 9; Check that we create two MergedGlobal instances for two functions using10; disjoint sets of globals11 12@m1 = internal global i32 0, align 413@n1 = internal global i32 0, align 414 15define void @f1(i32 %a1, i32 %a2) #0 {16; CHECK-LABEL: f1:17; CHECK:       ; %bb.0:18; CHECK-NEXT:    adrp x8, __MergedGlobals.2@PAGE19; CHECK-NEXT:    add x8, x8, __MergedGlobals.2@PAGEOFF20; CHECK-NEXT:    stp w0, w1, [x8]21; CHECK-NEXT:    ret22  store i32 %a1, ptr @m1, align 423  store i32 %a2, ptr @n1, align 424  ret void25}26 27@m2 = internal global i32 0, align 428@n2 = internal global i32 0, align 429@o2 = internal global i32 0, align 430 31define void @f2(i32 %a1, i32 %a2, i32 %a3) #0 {32; CHECK-LABEL: f2:33; CHECK:       ; %bb.0:34; CHECK-NEXT:    adrp x8, __MergedGlobals.1@PAGE35; CHECK-NEXT:    add x8, x8, __MergedGlobals.1@PAGEOFF36; CHECK-NEXT:    stp w0, w1, [x8]37; CHECK-NEXT:    str w2, [x8, #8]38; CHECK-NEXT:    ret39  store i32 %a1, ptr @m2, align 440  store i32 %a2, ptr @n2, align 441  store i32 %a3, ptr @o2, align 442  ret void43}44 45; Sanity-check (don't worry about cost models) that we pick the biggest subset46; of all global used "together" directly or indirectly.  Here, that means47; merging n3, m4, and n4 together, but ignoring m3.48 49@m3 = internal global i32 0, align 450@n3 = internal global i32 0, align 451 52define void @f3(i32 %a1, i32 %a2) #0 {53; CHECK-LABEL: f3:54; CHECK:       ; %bb.0:55; CHECK-NEXT:    adrp x8, _m3@PAGE56; CHECK-NEXT:    adrp x9, __MergedGlobals@PAGE57; CHECK-NEXT:    str w0, [x8, _m3@PAGEOFF]58; CHECK-NEXT:    str w1, [x9, __MergedGlobals@PAGEOFF]59; CHECK-NEXT:    ret60  store i32 %a1, ptr @m3, align 461  store i32 %a2, ptr @n3, align 462  ret void63}64 65@m4 = internal global i32 0, align 466@n4 = internal global i32 0, align 467 68define void @f4(i32 %a1, i32 %a2, i32 %a3) #0 {69; CHECK-LABEL: f4:70; CHECK:       ; %bb.0:71; CHECK-NEXT:    adrp x8, __MergedGlobals@PAGE72; CHECK-NEXT:    add x8, x8, __MergedGlobals@PAGEOFF73; CHECK-NEXT:    stp w0, w1, [x8, #4]74; CHECK-NEXT:    str w2, [x8]75; CHECK-NEXT:    ret76  store i32 %a1, ptr @m4, align 477  store i32 %a2, ptr @n4, align 478  store i32 %a3, ptr @n3, align 479  ret void80}81 82; Finally, check that we don't do anything with one-element global sets.83@o5 = internal global i32 0, align 484 85define void @f5(i32 %a1) #0 {86; CHECK-LABEL: f5:87; CHECK:       ; %bb.0:88; CHECK-NEXT:    adrp x8, _o5@PAGE89; CHECK-NEXT:    str w0, [x8, _o5@PAGEOFF]90; CHECK-NEXT:    ret91  store i32 %a1, ptr @o5, align 492  ret void93}94 95; CHECK-DAG: .zerofill __DATA,__bss,_o5,4,296 97; CHECK-DAG: .zerofill __DATA,__bss,__MergedGlobals.2,8,298; CHECK-DAG: .zerofill __DATA,__bss,__MergedGlobals.1,12,299; CHECK-DAG: .zerofill __DATA,__bss,__MergedGlobals,12,2100 101attributes #0 = { nounwind }102