1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 3 2; RUN: llc -mtriple=aarch64-linux-gnu -code-model=large -o - %s | FileCheck %s --check-prefix=STATIC 3; RUN: llc -mtriple=aarch64-linux-gnu -code-model=large -relocation-model=pic -o - %s | FileCheck %s --check-prefix=PIC 4 5@var8 = dso_local global i8 0 6@var16 = dso_local global i16 0 7@var32 = dso_local global i32 0 8@var64 = dso_local global i64 0 9 10define dso_local ptr @global_addr() { 11; 12; STATIC-LABEL: global_addr: 13; STATIC: // %bb.0: 14; STATIC-NEXT: movz x0, #:abs_g0_nc:var8 15; STATIC-NEXT: movk x0, #:abs_g1_nc:var8 16; STATIC-NEXT: movk x0, #:abs_g2_nc:var8 17; STATIC-NEXT: movk x0, #:abs_g3:var8 18; STATIC-NEXT: ret 19; 20; PIC-LABEL: global_addr: 21; PIC: .Lglobal_addr$local: 22; PIC-NEXT: .type .Lglobal_addr$local,@function 23; PIC-NEXT: .cfi_startproc 24; PIC-NEXT: // %bb.0: 25; PIC-NEXT: adrp x0, .Lvar8$local 26; PIC-NEXT: add x0, x0, :lo12:.Lvar8$local 27; PIC-NEXT: ret 28 ret ptr @var8 29 ; The movz/movk calculation should end up returned directly in x0. 30} 31 32define dso_local i8 @global_i8() { 33; 34; STATIC-LABEL: global_i8: 35; STATIC: // %bb.0: 36; STATIC-NEXT: movz x8, #:abs_g0_nc:var8 37; STATIC-NEXT: movk x8, #:abs_g1_nc:var8 38; STATIC-NEXT: movk x8, #:abs_g2_nc:var8 39; STATIC-NEXT: movk x8, #:abs_g3:var8 40; STATIC-NEXT: ldrb w0, [x8] 41; STATIC-NEXT: ret 42; 43; PIC-LABEL: global_i8: 44; PIC: .Lglobal_i8$local: 45; PIC-NEXT: .type .Lglobal_i8$local,@function 46; PIC-NEXT: .cfi_startproc 47; PIC-NEXT: // %bb.0: 48; PIC-NEXT: adrp x8, .Lvar8$local 49; PIC-NEXT: ldrb w0, [x8, :lo12:.Lvar8$local] 50; PIC-NEXT: ret 51 %val = load i8, ptr @var8 52 ret i8 %val 53} 54 55define dso_local i16 @global_i16() { 56; 57; STATIC-LABEL: global_i16: 58; STATIC: // %bb.0: 59; STATIC-NEXT: movz x8, #:abs_g0_nc:var16 60; STATIC-NEXT: movk x8, #:abs_g1_nc:var16 61; STATIC-NEXT: movk x8, #:abs_g2_nc:var16 62; STATIC-NEXT: movk x8, #:abs_g3:var16 63; STATIC-NEXT: ldrh w0, [x8] 64; STATIC-NEXT: ret 65; 66; PIC-LABEL: global_i16: 67; PIC: .Lglobal_i16$local: 68; PIC-NEXT: .type .Lglobal_i16$local,@function 69; PIC-NEXT: .cfi_startproc 70; PIC-NEXT: // %bb.0: 71; PIC-NEXT: adrp x8, .Lvar16$local 72; PIC-NEXT: ldrh w0, [x8, :lo12:.Lvar16$local] 73; PIC-NEXT: ret 74 %val = load i16, ptr @var16 75 ret i16 %val 76} 77 78define dso_local i32 @global_i32() { 79; 80; STATIC-LABEL: global_i32: 81; STATIC: // %bb.0: 82; STATIC-NEXT: movz x8, #:abs_g0_nc:var32 83; STATIC-NEXT: movk x8, #:abs_g1_nc:var32 84; STATIC-NEXT: movk x8, #:abs_g2_nc:var32 85; STATIC-NEXT: movk x8, #:abs_g3:var32 86; STATIC-NEXT: ldr w0, [x8] 87; STATIC-NEXT: ret 88; 89; PIC-LABEL: global_i32: 90; PIC: .Lglobal_i32$local: 91; PIC-NEXT: .type .Lglobal_i32$local,@function 92; PIC-NEXT: .cfi_startproc 93; PIC-NEXT: // %bb.0: 94; PIC-NEXT: adrp x8, .Lvar32$local 95; PIC-NEXT: ldr w0, [x8, :lo12:.Lvar32$local] 96; PIC-NEXT: ret 97 %val = load i32, ptr @var32 98 ret i32 %val 99} 100 101define dso_local i64 @global_i64() { 102; 103; STATIC-LABEL: global_i64: 104; STATIC: // %bb.0: 105; STATIC-NEXT: movz x8, #:abs_g0_nc:var64 106; STATIC-NEXT: movk x8, #:abs_g1_nc:var64 107; STATIC-NEXT: movk x8, #:abs_g2_nc:var64 108; STATIC-NEXT: movk x8, #:abs_g3:var64 109; STATIC-NEXT: ldr x0, [x8] 110; STATIC-NEXT: ret 111; 112; PIC-LABEL: global_i64: 113; PIC: .Lglobal_i64$local: 114; PIC-NEXT: .type .Lglobal_i64$local,@function 115; PIC-NEXT: .cfi_startproc 116; PIC-NEXT: // %bb.0: 117; PIC-NEXT: adrp x8, .Lvar64$local 118; PIC-NEXT: ldr x0, [x8, :lo12:.Lvar64$local] 119; PIC-NEXT: ret 120 %val = load i64, ptr @var64 121 ret i64 %val 122} 123 124define dso_local <2 x i64> @constpool() { 125; 126; STATIC-LABEL: constpool: 127; STATIC: // %bb.0: 128; STATIC-NEXT: movz x8, #:abs_g0_nc:.LCPI5_0 129; STATIC-NEXT: movk x8, #:abs_g1_nc:.LCPI5_0 130; STATIC-NEXT: movk x8, #:abs_g2_nc:.LCPI5_0 131; STATIC-NEXT: movk x8, #:abs_g3:.LCPI5_0 132; STATIC-NEXT: ldr q0, [x8] 133; STATIC-NEXT: ret 134; 135; PIC-LABEL: constpool: 136; PIC: .Lconstpool$local: 137; PIC-NEXT: .type .Lconstpool$local,@function 138; PIC-NEXT: .cfi_startproc 139; PIC-NEXT: // %bb.0: 140; PIC-NEXT: adrp x8, .LCPI5_0 141; PIC-NEXT: ldr q0, [x8, :lo12:.LCPI5_0] 142; PIC-NEXT: ret 143 ret <2 x i64> <i64 123456789, i64 987654321100> 144} 145