1249259Sdim//===-- AArch64Subtarget.cpp - AArch64 Subtarget Information --------------===// 2249259Sdim// 3249259Sdim// The LLVM Compiler Infrastructure 4249259Sdim// 5249259Sdim// This file is distributed under the University of Illinois Open Source 6249259Sdim// License. See LICENSE.TXT for details. 7249259Sdim// 8249259Sdim//===----------------------------------------------------------------------===// 9249259Sdim// 10249259Sdim// This file implements the AArch64 specific subclass of TargetSubtargetInfo. 11249259Sdim// 12249259Sdim//===----------------------------------------------------------------------===// 13249259Sdim 14249259Sdim#include "AArch64Subtarget.h" 15249259Sdim#include "AArch64RegisterInfo.h" 16249259Sdim#include "MCTargetDesc/AArch64MCTargetDesc.h" 17249259Sdim#include "llvm/IR/GlobalValue.h" 18249259Sdim#include "llvm/Target/TargetSubtargetInfo.h" 19249259Sdim#include "llvm/Support/CommandLine.h" 20249259Sdim#include "llvm/ADT/SmallVector.h" 21249259Sdim 22249259Sdim#define GET_SUBTARGETINFO_TARGET_DESC 23249259Sdim#define GET_SUBTARGETINFO_CTOR 24249259Sdim#include "AArch64GenSubtargetInfo.inc" 25249259Sdim 26249259Sdimusing namespace llvm; 27249259Sdim 28263509Sdim// Pin the vtable to this file. 29263509Sdimvoid AArch64Subtarget::anchor() {} 30263509Sdim 31249259SdimAArch64Subtarget::AArch64Subtarget(StringRef TT, StringRef CPU, StringRef FS) 32263509Sdim : AArch64GenSubtargetInfo(TT, CPU, FS), HasFPARMv8(false), HasNEON(false), 33263509Sdim HasCrypto(false), TargetTriple(TT), CPUString(CPU) { 34249259Sdim 35263509Sdim initializeSubtargetFeatures(CPU, FS); 36249259Sdim} 37249259Sdim 38263509Sdimvoid AArch64Subtarget::initializeSubtargetFeatures(StringRef CPU, 39263509Sdim StringRef FS) { 40263509Sdim if (CPU.empty()) 41263509Sdim CPUString = "generic"; 42263509Sdim 43263509Sdim std::string FullFS = FS; 44263509Sdim if (CPUString == "generic") { 45263509Sdim // Enable FP by default. 46263509Sdim if (FullFS.empty()) 47263509Sdim FullFS = "+fp-armv8"; 48263509Sdim else 49263509Sdim FullFS = "+fp-armv8," + FullFS; 50263509Sdim } 51263509Sdim 52263509Sdim ParseSubtargetFeatures(CPU, FullFS); 53263509Sdim} 54263509Sdim 55249259Sdimbool AArch64Subtarget::GVIsIndirectSymbol(const GlobalValue *GV, 56249259Sdim Reloc::Model RelocM) const { 57249259Sdim if (RelocM == Reloc::Static) 58249259Sdim return false; 59249259Sdim 60249259Sdim return !GV->hasLocalLinkage() && !GV->hasHiddenVisibility(); 61249259Sdim} 62