xref: /aosp_15_r20/external/llvm/test/CodeGen/AArch64/code-model-large-abs.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=aarch64-linux-gnu -code-model=large -o - %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