ARM64: diagnose use of v16-v31 in certain indexed NEON instructions.
[oota-llvm.git] / lib / Target / ARM64 / ARM64Subtarget.cpp
index abe8e054ddf4352757464679c6a8f4df6a968aa6..62a489fd86f8eb92ea384afc01b037640a066488 100644 (file)
@@ -29,7 +29,7 @@ using namespace llvm;
 ARM64Subtarget::ARM64Subtarget(const std::string &TT, const std::string &CPU,
                                const std::string &FS, bool LittleEndian)
     : ARM64GenSubtargetInfo(TT, CPU, FS), ARMProcFamily(Others),
-      HasFPARMv8(false), HasNEON(false), HasCrypto(false),
+      HasFPARMv8(false), HasNEON(false), HasCrypto(false), HasCRC(false),
       HasZeroCycleRegMove(false), HasZeroCycleZeroing(false),
       CPUString(CPU), TargetTriple(TT), IsLittleEndian(LittleEndian) {
   // Determine default and user-specified characteristics
@@ -77,7 +77,8 @@ ARM64Subtarget::ClassifyGlobalReference(const GlobalValue *GV,
       return (isDecl || GV->isWeakForLinker()) ? ARM64II::MO_GOT
                                                : ARM64II::MO_NO_FLAG;
     else
-      return ARM64II::MO_GOT;
+      // No need to go through the GOT for local symbols on ELF.
+      return GV->hasLocalLinkage() ? ARM64II::MO_NO_FLAG : ARM64II::MO_GOT;
   }
 
   return ARM64II::MO_NO_FLAG;