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