blob: 6786be3322e37f1f5205a2c1f07f585bdb23f5a2 [file] [log] [blame]
Saleem Abdulrasool763f9a52014-07-07 05:18:35 +00001; 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() {
David Blaikiea79ac142015-02-27 21:17:42 +000011 %1 = load i32, i32* @var, align 4
Saleem Abdulrasool763f9a52014-07-07 05:18:35 +000012 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() {
David Blaikiea79ac142015-02-27 21:17:42 +000023 %1 = load i32, i32* @ext, align 4
Saleem Abdulrasool763f9a52014-07-07 05:18:35 +000024 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