From 0fc41252ba5efc2ee5ed52bcbd9bd29561714220 Mon Sep 17 00:00:00 2001 From: Tim Northover Date: Sat, 24 May 2014 19:45:41 +0000 Subject: [PATCH] AArch64: disable FastISel for large code model. The code emitted is what would be expected for the small model, so it shouldn't be used when objects can be the full 64-bits away. This fixes MCJIT tests on Linux. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@209585 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/AArch64/AArch64FastISel.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/Target/AArch64/AArch64FastISel.cpp b/lib/Target/AArch64/AArch64FastISel.cpp index 58178b1a48b..8cc0f8a2735 100644 --- a/lib/Target/AArch64/AArch64FastISel.cpp +++ b/lib/Target/AArch64/AArch64FastISel.cpp @@ -247,6 +247,11 @@ unsigned AArch64FastISel::AArch64MaterializeGV(const GlobalValue *GV) { if (const GlobalAlias *GA = dyn_cast(GV)) TLSGV = GA->getAliasee(); + // MachO still uses GOT for large code-model accesses, but ELF requires + // movz/movk sequences, which FastISel doesn't handle yet. + if (TM.getCodeModel() != CodeModel::Small && !Subtarget->isTargetMachO()) + return 0; + if (const GlobalVariable *GVar = dyn_cast(TLSGV)) if (GVar->isThreadLocal()) return 0;