[llvm] r372256 - [AArch64] Don't implicitly enable global isel on Darwin if code-model==large.

Lang Hames via llvm-commits llvm-commits at lists.llvm.org
Wed Sep 18 12:56:55 PDT 2019


Author: lhames
Date: Wed Sep 18 12:56:55 2019
New Revision: 372256

URL: http://llvm.org/viewvc/llvm-project?rev=372256&view=rev
Log:
[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

Added:
    llvm/trunk/test/CodeGen/AArch64/arm64-code-model-large-darwin.ll
Modified:
    llvm/trunk/lib/Target/AArch64/AArch64TargetMachine.cpp

Modified: llvm/trunk/lib/Target/AArch64/AArch64TargetMachine.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64TargetMachine.cpp?rev=372256&r1=372255&r2=372256&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AArch64/AArch64TargetMachine.cpp (original)
+++ llvm/trunk/lib/Target/AArch64/AArch64TargetMachine.cpp Wed Sep 18 12:56:55 2019
@@ -283,9 +283,11 @@ AArch64TargetMachine::AArch64TargetMachi
     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);
   }

Added: llvm/trunk/test/CodeGen/AArch64/arm64-code-model-large-darwin.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/arm64-code-model-large-darwin.ll?rev=372256&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/AArch64/arm64-code-model-large-darwin.ll (added)
+++ llvm/trunk/test/CodeGen/AArch64/arm64-code-model-large-darwin.ll Wed Sep 18 12:56:55 2019
@@ -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 at GOTPAGE
+; CHECK: ldr     [[REG1]], {{\[}}[[REG1]], _bar at GOTPAGEOFF]
+; CHECK: blr     [[REG1]]
+
+declare void @bar()
+
+define void @foo() {
+  call void @bar()
+  ret void
+}
+




More information about the llvm-commits mailing list