ARM64: enable more regression tests from AArch64
[oota-llvm.git] / test / CodeGen / AArch64 / code-model-large-abs.ll
1 ; RUN: llc -mtriple=aarch64-none-linux-gnu -code-model=large < %s | FileCheck %s
2 ; RUN: llc -mtriple=arm64 -code-model=large -o - %s | FileCheck %s
3
4 @var8 = global i8 0
5 @var16 = global i16 0
6 @var32 = global i32 0
7 @var64 = global i64 0
8
9 define i8* @global_addr() {
10 ; CHECK-LABEL: global_addr:
11   ret i8* @var8
12   ; The movz/movk calculation should end up returned directly in x0.
13 ; CHECK: movz x0, #:abs_g3:var8
14 ; CHECK: movk x0, #:abs_g2_nc:var8
15 ; CHECK: movk x0, #:abs_g1_nc:var8
16 ; CHECK: movk x0, #:abs_g0_nc:var8
17 ; CHECK-NEXT: ret
18 }
19
20 define i8 @global_i8() {
21 ; CHECK-LABEL: global_i8:
22   %val = load i8* @var8
23   ret i8 %val
24 ; CHECK: movz x[[ADDR_REG:[0-9]+]], #:abs_g3:var8
25 ; CHECK: movk x[[ADDR_REG]], #:abs_g2_nc:var8
26 ; CHECK: movk x[[ADDR_REG]], #:abs_g1_nc:var8
27 ; CHECK: movk x[[ADDR_REG]], #:abs_g0_nc:var8
28 ; CHECK: ldrb w0, [x[[ADDR_REG]]]
29 }
30
31 define i16 @global_i16() {
32 ; CHECK-LABEL: global_i16:
33   %val = load i16* @var16
34   ret i16 %val
35 ; CHECK: movz x[[ADDR_REG:[0-9]+]], #:abs_g3:var16
36 ; CHECK: movk x[[ADDR_REG]], #:abs_g2_nc:var16
37 ; CHECK: movk x[[ADDR_REG]], #:abs_g1_nc:var16
38 ; CHECK: movk x[[ADDR_REG]], #:abs_g0_nc:var16
39 ; CHECK: ldrh w0, [x[[ADDR_REG]]]
40 }
41
42 define i32 @global_i32() {
43 ; CHECK-LABEL: global_i32:
44   %val = load i32* @var32
45   ret i32 %val
46 ; CHECK: movz x[[ADDR_REG:[0-9]+]], #:abs_g3:var32
47 ; CHECK: movk x[[ADDR_REG]], #:abs_g2_nc:var32
48 ; CHECK: movk x[[ADDR_REG]], #:abs_g1_nc:var32
49 ; CHECK: movk x[[ADDR_REG]], #:abs_g0_nc:var32
50 ; CHECK: ldr w0, [x[[ADDR_REG]]]
51 }
52
53 define i64 @global_i64() {
54 ; CHECK-LABEL: global_i64:
55   %val = load i64* @var64
56   ret i64 %val
57 ; CHECK: movz x[[ADDR_REG:[0-9]+]], #:abs_g3:var64
58 ; CHECK: movk x[[ADDR_REG]], #:abs_g2_nc:var64
59 ; CHECK: movk x[[ADDR_REG]], #:abs_g1_nc:var64
60 ; CHECK: movk x[[ADDR_REG]], #:abs_g0_nc:var64
61 ; CHECK: ldr x0, [x[[ADDR_REG]]]
62 }