1; RUN: llc -mtriple=aarch64-none-linux-gnu -verify-machineinstrs -relocation-model=pic %s -o - | FileCheck %s 2; RUN: llc -mtriple=arm64-linux-gnu -verify-machineinstrs -relocation-model=pic %s -o - | FileCheck %s 3 4@var = global i32 0 5 6define i32 @get_globalvar() { 7; CHECK-LABEL: get_globalvar: 8 9 %val = load i32* @var 10; CHECK: adrp x[[GOTHI:[0-9]+]], :got:var 11; CHECK: ldr x[[GOTLOC:[0-9]+]], [x[[GOTHI]], {{#?}}:got_lo12:var] 12; CHECK: ldr w0, [x[[GOTLOC]]] 13 14 ret i32 %val 15} 16 17define i32* @get_globalvaraddr() { 18; CHECK-LABEL: get_globalvaraddr: 19 20 %val = load i32* @var 21; CHECK: adrp x[[GOTHI:[0-9]+]], :got:var 22; CHECK: ldr x0, [x[[GOTHI]], {{#?}}:got_lo12:var] 23 24 ret i32* @var 25} 26 27@hiddenvar = hidden global i32 0 28 29define i32 @get_hiddenvar() { 30; CHECK-LABEL: get_hiddenvar: 31 32 %val = load i32* @hiddenvar 33; CHECK: adrp x[[HI:[0-9]+]], hiddenvar 34; CHECK: ldr w0, [x[[HI]], {{#?}}:lo12:hiddenvar] 35 36 ret i32 %val 37} 38 39define i32* @get_hiddenvaraddr() { 40; CHECK-LABEL: get_hiddenvaraddr: 41 42 %val = load i32* @hiddenvar 43; CHECK: adrp [[HI:x[0-9]+]], hiddenvar 44; CHECK: add x0, [[HI]], {{#?}}:lo12:hiddenvar 45 46 ret i32* @hiddenvar 47} 48 49define void()* @get_func() { 50; CHECK-LABEL: get_func: 51 52 ret void()* bitcast(void()*()* @get_func to void()*) 53; CHECK: adrp x[[GOTHI:[0-9]+]], :got:get_func 54; CHECK: ldr x0, [x[[GOTHI]], {{#?}}:got_lo12:get_func] 55} 56