AArch64: disable FastISel for large code model.
authorTim Northover <tnorthover@apple.com>
Sat, 24 May 2014 19:45:41 +0000 (19:45 +0000)
committerTim Northover <tnorthover@apple.com>
Sat, 24 May 2014 19:45:41 +0000 (19:45 +0000)
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

index 58178b1a48bbc083cfc56d9211f1e6c6b214836f..8cc0f8a273553c22d11d9ca3cbf5cf7acbad7136 100644 (file)
@@ -247,6 +247,11 @@ unsigned AArch64FastISel::AArch64MaterializeGV(const GlobalValue *GV) {
   if (const GlobalAlias *GA = dyn_cast<GlobalAlias>(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<GlobalVariable>(TLSGV))
     if (GVar->isThreadLocal())
       return 0;