172062f5744557e270a38192554c3126ea5f97434Tim Northover//===-- AArch64Subtarget.cpp - AArch64 Subtarget Information --------------===//
272062f5744557e270a38192554c3126ea5f97434Tim Northover//
372062f5744557e270a38192554c3126ea5f97434Tim Northover//                     The LLVM Compiler Infrastructure
472062f5744557e270a38192554c3126ea5f97434Tim Northover//
572062f5744557e270a38192554c3126ea5f97434Tim Northover// This file is distributed under the University of Illinois Open Source
672062f5744557e270a38192554c3126ea5f97434Tim Northover// License. See LICENSE.TXT for details.
772062f5744557e270a38192554c3126ea5f97434Tim Northover//
872062f5744557e270a38192554c3126ea5f97434Tim Northover//===----------------------------------------------------------------------===//
972062f5744557e270a38192554c3126ea5f97434Tim Northover//
1072062f5744557e270a38192554c3126ea5f97434Tim Northover// This file implements the AArch64 specific subclass of TargetSubtargetInfo.
1172062f5744557e270a38192554c3126ea5f97434Tim Northover//
1272062f5744557e270a38192554c3126ea5f97434Tim Northover//===----------------------------------------------------------------------===//
1372062f5744557e270a38192554c3126ea5f97434Tim Northover
1472062f5744557e270a38192554c3126ea5f97434Tim Northover#include "AArch64Subtarget.h"
1572062f5744557e270a38192554c3126ea5f97434Tim Northover#include "AArch64RegisterInfo.h"
1672062f5744557e270a38192554c3126ea5f97434Tim Northover#include "MCTargetDesc/AArch64MCTargetDesc.h"
1772062f5744557e270a38192554c3126ea5f97434Tim Northover#include "llvm/IR/GlobalValue.h"
1872062f5744557e270a38192554c3126ea5f97434Tim Northover#include "llvm/Target/TargetSubtargetInfo.h"
1972062f5744557e270a38192554c3126ea5f97434Tim Northover#include "llvm/Support/CommandLine.h"
2072062f5744557e270a38192554c3126ea5f97434Tim Northover#include "llvm/ADT/SmallVector.h"
2172062f5744557e270a38192554c3126ea5f97434Tim Northover
2272062f5744557e270a38192554c3126ea5f97434Tim Northover#define GET_SUBTARGETINFO_TARGET_DESC
2372062f5744557e270a38192554c3126ea5f97434Tim Northover#define GET_SUBTARGETINFO_CTOR
2472062f5744557e270a38192554c3126ea5f97434Tim Northover#include "AArch64GenSubtargetInfo.inc"
2572062f5744557e270a38192554c3126ea5f97434Tim Northover
2672062f5744557e270a38192554c3126ea5f97434Tim Northoverusing namespace llvm;
2772062f5744557e270a38192554c3126ea5f97434Tim Northover
2872062f5744557e270a38192554c3126ea5f97434Tim NorthoverAArch64Subtarget::AArch64Subtarget(StringRef TT, StringRef CPU, StringRef FS)
2972062f5744557e270a38192554c3126ea5f97434Tim Northover  : AArch64GenSubtargetInfo(TT, CPU, FS)
3072062f5744557e270a38192554c3126ea5f97434Tim Northover  , HasNEON(true)
3172062f5744557e270a38192554c3126ea5f97434Tim Northover  , HasCrypto(true)
3272062f5744557e270a38192554c3126ea5f97434Tim Northover  , TargetTriple(TT) {
3372062f5744557e270a38192554c3126ea5f97434Tim Northover
3472062f5744557e270a38192554c3126ea5f97434Tim Northover  ParseSubtargetFeatures(CPU, FS);
3572062f5744557e270a38192554c3126ea5f97434Tim Northover}
3672062f5744557e270a38192554c3126ea5f97434Tim Northover
3772062f5744557e270a38192554c3126ea5f97434Tim Northoverbool AArch64Subtarget::GVIsIndirectSymbol(const GlobalValue *GV,
3872062f5744557e270a38192554c3126ea5f97434Tim Northover                                          Reloc::Model RelocM) const {
3972062f5744557e270a38192554c3126ea5f97434Tim Northover  if (RelocM == Reloc::Static)
4072062f5744557e270a38192554c3126ea5f97434Tim Northover    return false;
4172062f5744557e270a38192554c3126ea5f97434Tim Northover
4272062f5744557e270a38192554c3126ea5f97434Tim Northover  return !GV->hasLocalLinkage() && !GV->hasHiddenVisibility();
4372062f5744557e270a38192554c3126ea5f97434Tim Northover}
44