xref: /llvm-project/llvm/test/CodeGen/ARM/Windows/dllimport.ll (revision bed1c7f061aa12417aa081e334afdba45767b938)
1; RUN: llc -mtriple thumbv7-windows -filetype asm -o - %s | FileCheck %s
2
3; ModuleID = 'dllimport.c'
4
5@var = external dllimport global i32
6@ext = external global i32
7declare dllimport arm_aapcs_vfpcc i32 @external()
8declare arm_aapcs_vfpcc i32 @internal()
9
10define arm_aapcs_vfpcc i32 @get_var() {
11  %1 = load i32, ptr @var, align 4
12  ret i32 %1
13}
14
15; CHECK-LABEL: get_var
16; CHECK: movw r0, :lower16:__imp_var
17; CHECK: movt r0, :upper16:__imp_var
18; CHECK: ldr r0, [r0]
19; CHECK: ldr r0, [r0]
20; CHECK: bx lr
21
22define arm_aapcs_vfpcc i32 @get_ext() {
23  %1 = load i32, ptr @ext, align 4
24  ret i32 %1
25}
26
27; CHECK-LABEL: get_ext
28; CHECK: movw r0, :lower16:ext
29; CHECK: movt r0, :upper16:ext
30; CHECK: ldr r0, [r0]
31; CHECK: bx lr
32
33define arm_aapcs_vfpcc ptr @get_var_pointer() {
34  ret ptr @var
35}
36
37; CHECK-LABEL: get_var_pointer
38; CHECK:  movw r0, :lower16:__imp_var
39; CHECK:  movt r0, :upper16:__imp_var
40; CHECK:  ldr r0, [r0]
41; CHECK:  bx lr
42
43define arm_aapcs_vfpcc i32 @call_external() {
44  %call = tail call arm_aapcs_vfpcc i32 @external()
45  ret i32 %call
46}
47
48; CHECK-LABEL: call_external
49; CHECK: movw r0, :lower16:__imp_external
50; CHECK: movt r0, :upper16:__imp_external
51; CHECK: ldr r0, [r0]
52; CHECK: bx r0
53
54define arm_aapcs_vfpcc i32 @call_internal() {
55  %call = tail call arm_aapcs_vfpcc i32 @internal()
56  ret i32 %call
57}
58
59; CHECK-LABEL: call_internal
60; CHECK: b.w internal
61
62