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, i32* @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, i32* @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 i32* @get_var_pointer() {
34  ret i32* @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 internal
61
62