| ; RUN: llc -mtriple=aarch64-pc-windows-msvc < %s | FileCheck %s --check-prefix=CHECK |
| |
| define dso_local void @normal_call() local_unnamed_addr section "nc_sect" { |
| entry: |
| call void @a() |
| call void @a() |
| ret void |
| } |
| ; CHECK-LABEL: normal_call: |
| ; CHECK: adrp [[ADRPREG:x[0-9]+]], __imp_a |
| ; CHECK-NEXT: ldr [[LDRREG:x[0-9]+]], [[[ADRPREG]], :lo12:__imp_a] |
| ; CHECK-NEXT: .Limpcall0: |
| ; CHECK-NEXT: blr [[LDRREG]] |
| ; CHECK-NEXT: .Limpcall1: |
| ; CHECK-NEXT: blr [[LDRREG]] |
| |
| define dso_local void @tail_call() local_unnamed_addr section "tc_sect" { |
| entry: |
| tail call void @b() |
| ret void |
| } |
| ; CHECK-LABEL: tail_call: |
| ; CHECK: adrp [[ADRPREG:x[0-9]+]], __imp_b |
| ; CHECK-NEXT: ldr [[LDRREG:x[0-9]+]], [[[ADRPREG]], :lo12:__imp_b] |
| ; CHECK-NEXT: .Limpcall2: |
| ; CHECK-NEXT: br [[LDRREG]] |
| |
| declare dllimport void @a() local_unnamed_addr |
| declare dllimport void @b() local_unnamed_addr |
| |
| ; CHECK-LABEL .section .impcall,"yi" |
| ; CHECK-NEXT .asciz "Imp_Call_V1" |
| ; CHECK-NEXT .word 32 |
| ; CHECK-NEXT .secnum nc_sect |
| ; CHECK-NEXT .word 19 |
| ; CHECK-NEXT .secoffset .Limpcall0 |
| ; CHECK-NEXT .symidx __imp_a |
| ; CHECK-NEXT .word 19 |
| ; CHECK-NEXT .secoffset .Limpcall1 |
| ; CHECK-NEXT .symidx __imp_a |
| ; CHECK-NEXT .word 20 |
| ; CHECK-NEXT .secnum tc_sect |
| ; CHECK-NEXT .word 19 |
| ; CHECK-NEXT .secoffset .Limpcall2 |
| ; CHECK-NEXT .symidx __imp_b |
| |
| !llvm.module.flags = !{!0} |
| !0 = !{i32 1, !"import-call-optimization", i32 1} |