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:
parent
9e7f6f4f1a
commit
57b2f234be
@ -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);
|
||||
}
|
||||
|
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