1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4 2; RUN: llc -mtriple=aarch64-apple-ios %s -o - -aarch64-macho-enable-nonlazybind | FileCheck %s --check-prefix=MACHO 3; RUN: llc -mtriple=aarch64-apple-ios %s -o - | FileCheck %s --check-prefix=MACHO-NORMAL 4; RUN: llc -mtriple=aarch64 -fast-isel %s -o - | FileCheck %s --check-prefixes=ELF,ELF-FI 5; RUN: llc -mtriple=aarch64 -global-isel %s -o - | FileCheck %s --check-prefixes=ELF,ELF-GI 6; RUN: llc -mtriple=aarch64 %s -o - | FileCheck %s --check-prefixes=ELF,ELF-SDAG 7 8declare void @external() nonlazybind 9 10define void @test_laziness(ptr %a) nounwind { 11; 12; MACHO-LABEL: test_laziness: 13; MACHO: ; %bb.0: 14; MACHO-NEXT: stp x20, x19, [sp, #-32]! ; 16-byte Folded Spill 15; MACHO-NEXT: stp x29, x30, [sp, #16] ; 16-byte Folded Spill 16; MACHO-NEXT: Lloh0: 17; MACHO-NEXT: adrp x8, _external@GOTPAGE 18; MACHO-NEXT: mov x19, x0 19; MACHO-NEXT: Lloh1: 20; MACHO-NEXT: ldr x8, [x8, _external@GOTPAGEOFF] 21; MACHO-NEXT: blr x8 22; MACHO-NEXT: Lloh2: 23; MACHO-NEXT: adrp x8, _memset@GOTPAGE 24; MACHO-NEXT: mov x0, x19 25; MACHO-NEXT: mov w1, #1 ; =0x1 26; MACHO-NEXT: Lloh3: 27; MACHO-NEXT: ldr x8, [x8, _memset@GOTPAGEOFF] 28; MACHO-NEXT: mov w2, #1000 ; =0x3e8 29; MACHO-NEXT: blr x8 30; MACHO-NEXT: ldp x29, x30, [sp, #16] ; 16-byte Folded Reload 31; MACHO-NEXT: ldp x20, x19, [sp], #32 ; 16-byte Folded Reload 32; MACHO-NEXT: ret 33; MACHO-NEXT: .loh AdrpLdrGot Lloh2, Lloh3 34; MACHO-NEXT: .loh AdrpLdrGot Lloh0, Lloh1 35; 36; MACHO-NORMAL-LABEL: test_laziness: 37; MACHO-NORMAL: ; %bb.0: 38; MACHO-NORMAL-NEXT: stp x20, x19, [sp, #-32]! ; 16-byte Folded Spill 39; MACHO-NORMAL-NEXT: stp x29, x30, [sp, #16] ; 16-byte Folded Spill 40; MACHO-NORMAL-NEXT: mov x19, x0 41; MACHO-NORMAL-NEXT: bl _external 42; MACHO-NORMAL-NEXT: Lloh0: 43; MACHO-NORMAL-NEXT: adrp x8, _memset@GOTPAGE 44; MACHO-NORMAL-NEXT: mov x0, x19 45; MACHO-NORMAL-NEXT: mov w1, #1 ; =0x1 46; MACHO-NORMAL-NEXT: Lloh1: 47; MACHO-NORMAL-NEXT: ldr x8, [x8, _memset@GOTPAGEOFF] 48; MACHO-NORMAL-NEXT: mov w2, #1000 ; =0x3e8 49; MACHO-NORMAL-NEXT: blr x8 50; MACHO-NORMAL-NEXT: ldp x29, x30, [sp, #16] ; 16-byte Folded Reload 51; MACHO-NORMAL-NEXT: ldp x20, x19, [sp], #32 ; 16-byte Folded Reload 52; MACHO-NORMAL-NEXT: ret 53; MACHO-NORMAL-NEXT: .loh AdrpLdrGot Lloh0, Lloh1 54; 55; ELF-LABEL: test_laziness: 56; ELF: // %bb.0: 57; ELF-NEXT: stp x30, x19, [sp, #-16]! // 16-byte Folded Spill 58; ELF-NEXT: adrp x8, :got:external 59; ELF-NEXT: mov x19, x0 60; ELF-NEXT: ldr x8, [x8, :got_lo12:external] 61; ELF-NEXT: blr x8 62; ELF-NEXT: adrp x8, :got:memset 63; ELF-NEXT: mov x0, x19 64; ELF-NEXT: mov w1, #1 // =0x1 65; ELF-NEXT: ldr x8, [x8, :got_lo12:memset] 66; ELF-NEXT: mov w2, #1000 // =0x3e8 67; ELF-NEXT: blr x8 68; ELF-NEXT: ldp x30, x19, [sp], #16 // 16-byte Folded Reload 69; ELF-NEXT: ret 70 call void @external() 71 call void @llvm.memset.p0.i64(ptr align 1 %a, i8 1, i64 1000, i1 false) 72 ret void 73} 74 75define void @test_laziness_tail() nounwind { 76; MACHO-LABEL: test_laziness_tail: 77; MACHO: ; %bb.0: 78; MACHO-NEXT: Lloh4: 79; MACHO-NEXT: adrp x0, _external@GOTPAGE 80; MACHO-NEXT: Lloh5: 81; MACHO-NEXT: ldr x0, [x0, _external@GOTPAGEOFF] 82; MACHO-NEXT: br x0 83; MACHO-NEXT: .loh AdrpLdrGot Lloh4, Lloh5 84; 85; MACHO-NORMAL-LABEL: test_laziness_tail: 86; MACHO-NORMAL: ; %bb.0: 87; MACHO-NORMAL-NEXT: b _external 88; 89; ELF-LABEL: test_laziness_tail: 90; ELF: // %bb.0: 91; ELF-NEXT: adrp x0, :got:external 92; ELF-NEXT: ldr x0, [x0, :got_lo12:external] 93; ELF-NEXT: br x0 94 tail call void @external() 95 ret void 96} 97 98declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) 99 100!llvm.module.flags = !{!0} 101!0 = !{i32 7, !"RtLibUseGOT", i32 1} 102;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line: 103; ELF-FI: {{.*}} 104; ELF-GI: {{.*}} 105; ELF-SDAG: {{.*}} 106