Martin Storsjo | 373c8ef | 2017-10-25 07:25:18 +0000 | [diff] [blame] | 1 | ; RUN: llc -mtriple aarch64-unknown-windows-msvc -filetype asm -o - %s | FileCheck %s |
| 2 | |
| 3 | @var = external dllimport global i32 |
| 4 | @ext = external global i32 |
| 5 | declare dllimport i32 @external() |
| 6 | declare i32 @internal() |
| 7 | |
| 8 | define i32 @get_var() { |
| 9 | %1 = load i32, i32* @var, align 4 |
| 10 | ret i32 %1 |
| 11 | } |
| 12 | |
| 13 | ; CHECK-LABEL: get_var |
| 14 | ; CHECK: adrp x8, __imp_var |
| 15 | ; CHECK: ldr x8, [x8, __imp_var] |
| 16 | ; CHECK: ldr w0, [x8] |
| 17 | ; CHECK: ret |
| 18 | |
| 19 | define i32 @get_ext() { |
| 20 | %1 = load i32, i32* @ext, align 4 |
| 21 | ret i32 %1 |
| 22 | } |
| 23 | |
| 24 | ; CHECK-LABEL: get_ext |
| 25 | ; CHECK: adrp x8, ext |
| 26 | ; CHECK: ldr w0, [x8, ext] |
| 27 | ; CHECK: ret |
| 28 | |
| 29 | define i32* @get_var_pointer() { |
| 30 | ret i32* @var |
| 31 | } |
| 32 | |
| 33 | ; CHECK-LABEL: get_var_pointer |
| 34 | ; CHECK: adrp x0, __imp_var |
| 35 | ; CHECK: ldr x0, [x0, __imp_var] |
| 36 | ; CHECK: ret |
| 37 | |
| 38 | define i32 @call_external() { |
| 39 | %call = tail call i32 @external() |
| 40 | ret i32 %call |
| 41 | } |
| 42 | |
| 43 | ; CHECK-LABEL: call_external |
| 44 | ; CHECK: adrp x0, __imp_external |
| 45 | ; CHECK: ldr x0, [x0, __imp_external] |
| 46 | ; CHECK: br x0 |
| 47 | |
| 48 | define i32 @call_internal() { |
| 49 | %call = tail call i32 @internal() |
| 50 | ret i32 %call |
| 51 | } |
| 52 | |
| 53 | ; CHECK-LABEL: call_internal |
| 54 | ; CHECK: b internal |