mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
AArch64: put nonlazybind special handling behind a flag for now.
It's basically a terrible idea anyway but objc_msgSend gets emitted like that. We can decide on a better way to deal with it in the unlikely event that anyone actually uses it. llvm-svn: 300474
This commit is contained in:
parent
5bd6388161
commit
754e0805e4
@ -35,6 +35,11 @@ static cl::opt<bool>
|
||||
UseAddressTopByteIgnored("aarch64-use-tbi", cl::desc("Assume that top byte of "
|
||||
"an address is ignored"), cl::init(false), cl::Hidden);
|
||||
|
||||
static cl::opt<bool>
|
||||
UseNonLazyBind("aarch64-enable-nonlazybind",
|
||||
cl::desc("Call nonlazybind functions via direct GOT load"),
|
||||
cl::init(false), cl::Hidden);
|
||||
|
||||
AArch64Subtarget &
|
||||
AArch64Subtarget::initializeSubtargetDependencies(StringRef FS,
|
||||
StringRef CPUString) {
|
||||
@ -165,7 +170,7 @@ unsigned char AArch64Subtarget::classifyGlobalFunctionReference(
|
||||
|
||||
// NonLazyBind goes via GOT unless we know it's available locally.
|
||||
auto *F = dyn_cast<Function>(GV);
|
||||
if (F && F->hasFnAttribute(Attribute::NonLazyBind) &&
|
||||
if (UseNonLazyBind && F && F->hasFnAttribute(Attribute::NonLazyBind) &&
|
||||
!TM.shouldAssumeDSOLocal(*GV->getParent(), GV))
|
||||
return AArch64II::MO_GOT;
|
||||
|
||||
|
@ -1,4 +1,5 @@
|
||||
; RUN: llc -mtriple=aarch64-apple-ios %s -o - | FileCheck %s
|
||||
; RUN: llc -mtriple=aarch64-apple-ios %s -o - -aarch64-enable-nonlazybind | FileCheck %s
|
||||
; RUN: llc -mtriple=aarch64-apple-ios %s -o - | FileCheck %s --check-prefix=CHECK-NORMAL
|
||||
|
||||
define void @local() nonlazybind {
|
||||
ret void
|
||||
@ -15,6 +16,10 @@ define void @test_laziness() {
|
||||
; CHECK: ldr [[FUNC:x[0-9]+]], [x[[TMP]], _nonlocal@GOTPAGEOFF]
|
||||
; CHECK: blr [[FUNC]]
|
||||
|
||||
; CHECK-NORMAL-LABEL: test_laziness:
|
||||
; CHECK-NORMAL: bl _local
|
||||
; CHEKC-NORMAL: bl _nonlocal
|
||||
|
||||
call void @local()
|
||||
call void @nonlocal()
|
||||
ret void
|
||||
@ -27,6 +32,9 @@ define void @test_laziness_tail() {
|
||||
; CHECK: ldr [[FUNC:x[0-9]+]], [x[[TMP]], _nonlocal@GOTPAGEOFF]
|
||||
; CHECK: br [[FUNC]]
|
||||
|
||||
; CHECK-NORMAL-LABEL: test_laziness_tail:
|
||||
; CHECK-NORMAL: b _nonlocal
|
||||
|
||||
tail call void @nonlocal()
|
||||
ret void
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user