| ; RUN: llc -mtriple thumbv7-windows -filetype asm -o - %s | FileCheck %s |
| |
| ; ModuleID = 'dllimport.c' |
| |
| @var = external dllimport global i32 |
| @ext = external global i32 |
| declare dllimport arm_aapcs_vfpcc i32 @external() |
| declare arm_aapcs_vfpcc i32 @internal() |
| |
| define arm_aapcs_vfpcc i32 @get_var() { |
| %1 = load i32, ptr @var, align 4 |
| ret i32 %1 |
| } |
| |
| ; CHECK-LABEL: get_var |
| ; CHECK: movw r0, :lower16:__imp_var |
| ; CHECK: movt r0, :upper16:__imp_var |
| ; CHECK: ldr r0, [r0] |
| ; CHECK: ldr r0, [r0] |
| ; CHECK: bx lr |
| |
| define arm_aapcs_vfpcc i32 @get_ext() { |
| %1 = load i32, ptr @ext, align 4 |
| ret i32 %1 |
| } |
| |
| ; CHECK-LABEL: get_ext |
| ; CHECK: movw r0, :lower16:ext |
| ; CHECK: movt r0, :upper16:ext |
| ; CHECK: ldr r0, [r0] |
| ; CHECK: bx lr |
| |
| define arm_aapcs_vfpcc ptr @get_var_pointer() { |
| ret ptr @var |
| } |
| |
| ; CHECK-LABEL: get_var_pointer |
| ; CHECK: movw r0, :lower16:__imp_var |
| ; CHECK: movt r0, :upper16:__imp_var |
| ; CHECK: ldr r0, [r0] |
| ; CHECK: bx lr |
| |
| define arm_aapcs_vfpcc i32 @call_external() { |
| %call = tail call arm_aapcs_vfpcc i32 @external() |
| ret i32 %call |
| } |
| |
| ; CHECK-LABEL: call_external |
| ; CHECK: movw r0, :lower16:__imp_external |
| ; CHECK: movt r0, :upper16:__imp_external |
| ; CHECK: ldr r0, [r0] |
| ; CHECK: bx r0 |
| |
| define arm_aapcs_vfpcc i32 @call_internal() { |
| %call = tail call arm_aapcs_vfpcc i32 @internal() |
| ret i32 %call |
| } |
| |
| ; CHECK-LABEL: call_internal |
| ; CHECK: b.w internal |
| |