mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
[AArch64] Don't implicitly enable global isel on Darwin if code-model==large.
Summary: AArch64 GlobalISel doesn't support MachO's large code model, so this patch adds a check for that combination before implicitly enabling it. Reviewers: paquette Subscribers: kristof.beyls, ributzka, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D67724 llvm-svn: 372256
This commit is contained in:
parent
9e7f6f4f1a
commit
57b2f234be
@ -283,9 +283,11 @@ AArch64TargetMachine::AArch64TargetMachine(const Target &T, const Triple &TT,
|
|||||||
this->Options.TrapUnreachable = true;
|
this->Options.TrapUnreachable = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Enable GlobalISel at or below EnableGlobalISelAt0.
|
// Enable GlobalISel at or below EnableGlobalISelAt0, unless this is
|
||||||
|
// MachO/CodeModel::Large, which GlobalISel does not support.
|
||||||
if (getOptLevel() <= EnableGlobalISelAtO &&
|
if (getOptLevel() <= EnableGlobalISelAtO &&
|
||||||
TT.getArch() != Triple::aarch64_32) {
|
TT.getArch() != Triple::aarch64_32 &&
|
||||||
|
!(getCodeModel() == CodeModel::Large && TT.isOSBinFormatMachO())) {
|
||||||
setGlobalISel(true);
|
setGlobalISel(true);
|
||||||
setGlobalISelAbort(GlobalISelAbortMode::Disable);
|
setGlobalISelAbort(GlobalISelAbortMode::Disable);
|
||||||
}
|
}
|
||||||
|
16
test/CodeGen/AArch64/arm64-code-model-large-darwin.ll
Normal file
16
test/CodeGen/AArch64/arm64-code-model-large-darwin.ll
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
; Check that AArch64 is honoring code-model=large at -O0 and -O2.
|
||||||
|
;
|
||||||
|
; RUN: llc -mtriple=arm64-apple-darwin19 -code-model=large -O0 -o - %s | FileCheck %s
|
||||||
|
; RUN: llc -mtriple=arm64-apple-darwin19 -code-model=large -O2 -o - %s | FileCheck %s
|
||||||
|
|
||||||
|
; CHECK: adrp [[REG1:x[0-9]+]], _bar@GOTPAGE
|
||||||
|
; CHECK: ldr [[REG1]], {{\[}}[[REG1]], _bar@GOTPAGEOFF]
|
||||||
|
; CHECK: blr [[REG1]]
|
||||||
|
|
||||||
|
declare void @bar()
|
||||||
|
|
||||||
|
define void @foo() {
|
||||||
|
call void @bar()
|
||||||
|
ret void
|
||||||
|
}
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user