mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01:00
0180f4a1d1
Similar to X86 D73230 & 46788a21f9152be3950e57dc526454655682bdd4 With this change, we can set dso_local in clang's -fpic -fno-semantic-interposition mode, for default visibility external linkage non-ifunc-non-COMDAT definitions. For such dso_local definitions, variable access/taking the address of a function/calling a function will go through a local alias to avoid GOT/PLT. Note: the 'S' inline assembly constraint refers to an absolute symbolic address or a label reference (D46745). Differential Revision: https://reviews.llvm.org/D101872
25 lines
575 B
LLVM
25 lines
575 B
LLVM
; RUN: llc -mtriple=aarch64-linux-gnu -verify-machineinstrs -relocation-model=pic %s -o - | FileCheck %s
|
|
|
|
@var = global i32 0
|
|
|
|
define i32 @get_globalvar() {
|
|
; CHECK-LABEL: get_globalvar:
|
|
|
|
%val = load i32, i32* @var
|
|
; CHECK: adrp x[[GOTHI:[0-9]+]], :got:var
|
|
; CHECK: ldr x[[GOTLOC:[0-9]+]], [x[[GOTHI]], :got_lo12:var]
|
|
; CHECK: ldr w0, [x[[GOTLOC]]]
|
|
|
|
ret i32 %val
|
|
}
|
|
|
|
define i32* @get_globalvaraddr() {
|
|
; CHECK-LABEL: get_globalvaraddr:
|
|
|
|
%val = load i32, i32* @var
|
|
; CHECK: adrp x[[GOTHI:[0-9]+]], :got:var
|
|
; CHECK: ldr x0, [x[[GOTHI]], :got_lo12:var]
|
|
|
|
ret i32* @var
|
|
}
|