1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-01-31 12:41:49 +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:
Lang Hames 2019-09-18 19:56:55 +00:00
parent 9e7f6f4f1a
commit 57b2f234be
2 changed files with 20 additions and 2 deletions

View File

@ -283,9 +283,11 @@ AArch64TargetMachine::AArch64TargetMachine(const Target &T, const Triple &TT,
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 &&
TT.getArch() != Triple::aarch64_32) {
TT.getArch() != Triple::aarch64_32 &&
!(getCodeModel() == CodeModel::Large && TT.isOSBinFormatMachO())) {
setGlobalISel(true);
setGlobalISelAbort(GlobalISelAbortMode::Disable);
}

View 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
}