xref: /aosp_15_r20/external/llvm/test/CodeGen/AArch64/arm64-code-model-large-abs.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=arm64-none-linux-gnu -code-model=large < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker@var8 = global i8 0
4*9880d681SAndroid Build Coastguard Worker@var16 = global i16 0
5*9880d681SAndroid Build Coastguard Worker@var32 = global i32 0
6*9880d681SAndroid Build Coastguard Worker@var64 = global i64 0
7*9880d681SAndroid Build Coastguard Worker
8*9880d681SAndroid Build Coastguard Workerdefine i8* @global_addr() {
9*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: global_addr:
10*9880d681SAndroid Build Coastguard Worker  ret i8* @var8
11*9880d681SAndroid Build Coastguard Worker  ; The movz/movk calculation should end up returned directly in x0.
12*9880d681SAndroid Build Coastguard Worker; CHECK: movz x0, #:abs_g3:var8
13*9880d681SAndroid Build Coastguard Worker; CHECK: movk x0, #:abs_g2_nc:var8
14*9880d681SAndroid Build Coastguard Worker; CHECK: movk x0, #:abs_g1_nc:var8
15*9880d681SAndroid Build Coastguard Worker; CHECK: movk x0, #:abs_g0_nc:var8
16*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
17*9880d681SAndroid Build Coastguard Worker}
18*9880d681SAndroid Build Coastguard Worker
19*9880d681SAndroid Build Coastguard Workerdefine i8 @global_i8() {
20*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: global_i8:
21*9880d681SAndroid Build Coastguard Worker  %val = load i8, i8* @var8
22*9880d681SAndroid Build Coastguard Worker  ret i8 %val
23*9880d681SAndroid Build Coastguard Worker; CHECK: movz x[[ADDR_REG:[0-9]+]], #:abs_g3:var8
24*9880d681SAndroid Build Coastguard Worker; CHECK: movk x[[ADDR_REG]], #:abs_g2_nc:var8
25*9880d681SAndroid Build Coastguard Worker; CHECK: movk x[[ADDR_REG]], #:abs_g1_nc:var8
26*9880d681SAndroid Build Coastguard Worker; CHECK: movk x[[ADDR_REG]], #:abs_g0_nc:var8
27*9880d681SAndroid Build Coastguard Worker; CHECK: ldrb w0, [x[[ADDR_REG]]]
28*9880d681SAndroid Build Coastguard Worker}
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Workerdefine i16 @global_i16() {
31*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: global_i16:
32*9880d681SAndroid Build Coastguard Worker  %val = load i16, i16* @var16
33*9880d681SAndroid Build Coastguard Worker  ret i16 %val
34*9880d681SAndroid Build Coastguard Worker; CHECK: movz x[[ADDR_REG:[0-9]+]], #:abs_g3:var16
35*9880d681SAndroid Build Coastguard Worker; CHECK: movk x[[ADDR_REG]], #:abs_g2_nc:var16
36*9880d681SAndroid Build Coastguard Worker; CHECK: movk x[[ADDR_REG]], #:abs_g1_nc:var16
37*9880d681SAndroid Build Coastguard Worker; CHECK: movk x[[ADDR_REG]], #:abs_g0_nc:var16
38*9880d681SAndroid Build Coastguard Worker; CHECK: ldrh w0, [x[[ADDR_REG]]]
39*9880d681SAndroid Build Coastguard Worker}
40*9880d681SAndroid Build Coastguard Worker
41*9880d681SAndroid Build Coastguard Workerdefine i32 @global_i32() {
42*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: global_i32:
43*9880d681SAndroid Build Coastguard Worker  %val = load i32, i32* @var32
44*9880d681SAndroid Build Coastguard Worker  ret i32 %val
45*9880d681SAndroid Build Coastguard Worker; CHECK: movz x[[ADDR_REG:[0-9]+]], #:abs_g3:var32
46*9880d681SAndroid Build Coastguard Worker; CHECK: movk x[[ADDR_REG]], #:abs_g2_nc:var32
47*9880d681SAndroid Build Coastguard Worker; CHECK: movk x[[ADDR_REG]], #:abs_g1_nc:var32
48*9880d681SAndroid Build Coastguard Worker; CHECK: movk x[[ADDR_REG]], #:abs_g0_nc:var32
49*9880d681SAndroid Build Coastguard Worker; CHECK: ldr w0, [x[[ADDR_REG]]]
50*9880d681SAndroid Build Coastguard Worker}
51*9880d681SAndroid Build Coastguard Worker
52*9880d681SAndroid Build Coastguard Workerdefine i64 @global_i64() {
53*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: global_i64:
54*9880d681SAndroid Build Coastguard Worker  %val = load i64, i64* @var64
55*9880d681SAndroid Build Coastguard Worker  ret i64 %val
56*9880d681SAndroid Build Coastguard Worker; CHECK: movz x[[ADDR_REG:[0-9]+]], #:abs_g3:var64
57*9880d681SAndroid Build Coastguard Worker; CHECK: movk x[[ADDR_REG]], #:abs_g2_nc:var64
58*9880d681SAndroid Build Coastguard Worker; CHECK: movk x[[ADDR_REG]], #:abs_g1_nc:var64
59*9880d681SAndroid Build Coastguard Worker; CHECK: movk x[[ADDR_REG]], #:abs_g0_nc:var64
60*9880d681SAndroid Build Coastguard Worker; CHECK: ldr x0, [x[[ADDR_REG]]]
61*9880d681SAndroid Build Coastguard Worker}
62*9880d681SAndroid Build Coastguard Worker
63*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @constpool() {
64*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: constpool:
65*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> <i64 123456789, i64 987654321100>
66*9880d681SAndroid Build Coastguard Worker
67*9880d681SAndroid Build Coastguard Worker; CHECK: movz x[[ADDR_REG:[0-9]+]], #:abs_g3:[[CPADDR:.LCPI[0-9]+_[0-9]+]]
68*9880d681SAndroid Build Coastguard Worker; CHECK: movk x[[ADDR_REG]], #:abs_g2_nc:[[CPADDR]]
69*9880d681SAndroid Build Coastguard Worker; CHECK: movk x[[ADDR_REG]], #:abs_g1_nc:[[CPADDR]]
70*9880d681SAndroid Build Coastguard Worker; CHECK: movk x[[ADDR_REG]], #:abs_g0_nc:[[CPADDR]]
71*9880d681SAndroid Build Coastguard Worker; CHECK: ldr q0, [x[[ADDR_REG]]]
72*9880d681SAndroid Build Coastguard Worker}
73