AArch64Subtarget.cpp revision 5a364c5561ec04e33a6f5d52c14f1bac6f247ea0
1//===-- AArch64Subtarget.cpp - AArch64 Subtarget Information --------------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This file implements the AArch64 specific subclass of TargetSubtargetInfo. 11// 12//===----------------------------------------------------------------------===// 13 14#include "AArch64Subtarget.h" 15#include "AArch64RegisterInfo.h" 16#include "MCTargetDesc/AArch64MCTargetDesc.h" 17#include "llvm/IR/GlobalValue.h" 18#include "llvm/Target/TargetSubtargetInfo.h" 19#include "llvm/Support/CommandLine.h" 20#include "llvm/ADT/SmallVector.h" 21 22#define GET_SUBTARGETINFO_TARGET_DESC 23#define GET_SUBTARGETINFO_CTOR 24#include "AArch64GenSubtargetInfo.inc" 25 26using namespace llvm; 27 28// pin vtable to this file 29void AArch64Subtarget::anchor() {} 30 31AArch64Subtarget::AArch64Subtarget(StringRef TT, StringRef CPU, StringRef FS) 32 : AArch64GenSubtargetInfo(TT, CPU, FS), HasFPARMv8(false), HasNEON(false), 33 HasCrypto(false), TargetTriple(TT), CPUString(CPU) { 34 35 initializeSubtargetFeatures(CPU, FS); 36} 37 38void AArch64Subtarget::initializeSubtargetFeatures(StringRef CPU, 39 StringRef FS) { 40 if (CPU.empty()) 41 CPUString = "generic"; 42 43 std::string FullFS = FS; 44 if (CPUString == "generic") { 45 // Enable FP by default. 46 if (FullFS.empty()) 47 FullFS = "+fp-armv8"; 48 else 49 FullFS = "+fp-armv8," + FullFS; 50 } 51 52 ParseSubtargetFeatures(CPU, FullFS); 53} 54 55bool AArch64Subtarget::GVIsIndirectSymbol(const GlobalValue *GV, 56 Reloc::Model RelocM) const { 57 if (RelocM == Reloc::Static) 58 return false; 59 60 return !GV->hasLocalLinkage() && !GV->hasHiddenVisibility(); 61} 62