xref: /llvm-project/llvm/test/CodeGen/AArch64/win-import-call-optimization.ll (revision 283dca56f8dddbf2f144730a01675c94b04f57cb)
1; RUN: llc -mtriple=aarch64-pc-windows-msvc -aarch64-win-import-call-optimization < %s | FileCheck %s --check-prefix=CHECK-ENABLED
2; RUN: llc -mtriple=aarch64-pc-windows-msvc < %s | FileCheck %s --check-prefix=CHECK-DISABLED
3
4; CHECK-DISABLED-NOT: .section        .impcall
5
6define dso_local void @normal_call() local_unnamed_addr section "nc_sect" {
7entry:
8  call void @a()
9  call void @a()
10  ret void
11}
12; CHECK-ENABLED-LABEL:  normal_call:
13; CHECK-ENABLED:        adrp    [[ADRPREG:x[0-9]+]], __imp_a
14; CHECK-ENABLED-NEXT:   ldr     [[LDRREG:x[0-9]+]], [[[ADRPREG]], :lo12:__imp_a]
15; CHECK-ENABLED-NEXT:   .Limpcall0:
16; CHECK-ENABLED-NEXT:   blr     [[LDRREG]]
17; CHECK-ENABLED-NEXT:   .Limpcall1:
18; CHECK-ENABLED-NEXT:   blr     [[LDRREG]]
19
20define dso_local void @tail_call() local_unnamed_addr section "tc_sect" {
21entry:
22  tail call void @b()
23  ret void
24}
25; CHECK-ENABLED-LABEL:  tail_call:
26; CHECK-ENABLED:        adrp    [[ADRPREG:x[0-9]+]], __imp_b
27; CHECK-ENABLED-NEXT:   ldr     [[LDRREG:x[0-9]+]], [[[ADRPREG]], :lo12:__imp_b]
28; CHECK-ENABLED-NEXT:   .Limpcall2:
29; CHECK-ENABLED-NEXT:   br      [[LDRREG]]
30
31declare dllimport void @a() local_unnamed_addr
32declare dllimport void @b() local_unnamed_addr
33
34; CHECK-ENABLED-LABEL  .section   .impcall,"yi"
35; CHECK-ENABLED-NEXT   .asciz  "Imp_Call_V1"
36; CHECK-ENABLED-NEXT   .word   32
37; CHECK-ENABLED-NEXT   .secnum nc_sect
38; CHECK-ENABLED-NEXT   .word   19
39; CHECK-ENABLED-NEXT   .secoffset      .Limpcall0
40; CHECK-ENABLED-NEXT   .symidx __imp_a
41; CHECK-ENABLED-NEXT   .word   19
42; CHECK-ENABLED-NEXT   .secoffset      .Limpcall1
43; CHECK-ENABLED-NEXT   .symidx __imp_a
44; CHECK-ENABLED-NEXT   .word   20
45; CHECK-ENABLED-NEXT   .secnum tc_sect
46; CHECK-ENABLED-NEXT   .word   19
47; CHECK-ENABLED-NEXT   .secoffset      .Limpcall2
48; CHECK-ENABLED-NEXT   .symidx __imp_b
49