X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FTarget%2FSystemZ%2FSystemZSubtarget.h;h=5817491d4585dad880dd1565da4e4eb78967aa18;hb=354362524a72b3fa43a6c09380b7ae3b2380cbba;hp=453471c691b48d8e2121d934599cba38fb8602de;hpb=276365dd4bc0c2160f91fd8062ae1fc90c86c324;p=oota-llvm.git diff --git a/lib/Target/SystemZ/SystemZSubtarget.h b/lib/Target/SystemZ/SystemZSubtarget.h index 453471c691b..5817491d458 100644 --- a/lib/Target/SystemZ/SystemZSubtarget.h +++ b/lib/Target/SystemZ/SystemZSubtarget.h @@ -1,4 +1,4 @@ -//==-- SystemZSubtarget.h - Define Subtarget for the SystemZ ---*- C++ -*--===// +//===-- SystemZSubtarget.h - SystemZ subtarget information -----*- C++ -*--===// // // The LLVM Compiler Infrastructure // @@ -7,39 +7,64 @@ // //===----------------------------------------------------------------------===// // -// This file declares the SystemZ specific subclass of TargetSubtarget. +// This file declares the SystemZ specific subclass of TargetSubtargetInfo. // //===----------------------------------------------------------------------===// -#ifndef LLVM_TARGET_SystemZ_SUBTARGET_H -#define LLVM_TARGET_SystemZ_SUBTARGET_H - -#include "llvm/Target/TargetSubtarget.h" +#ifndef SYSTEMZSUBTARGET_H +#define SYSTEMZSUBTARGET_H +#include "llvm/ADT/Triple.h" +#include "llvm/Target/TargetSubtargetInfo.h" #include +#define GET_SUBTARGETINFO_HEADER +#include "SystemZGenSubtargetInfo.inc" + namespace llvm { class GlobalValue; -class TargetMachine; +class StringRef; + +class SystemZSubtarget : public SystemZGenSubtargetInfo { + virtual void anchor(); +protected: + bool HasDistinctOps; + bool HasLoadStoreOnCond; + bool HasHighWord; + bool HasFPExtension; + +private: + Triple TargetTriple; -class SystemZSubtarget : public TargetSubtarget { - bool HasZ10Insts; public: - /// This constructor initializes the data members to match that - /// of the specified triple. - /// SystemZSubtarget(const std::string &TT, const std::string &CPU, const std::string &FS); - /// ParseSubtargetFeatures - Parses features string setting specified - /// subtarget options. Definition of function is auto generated by tblgen. - void ParseSubtargetFeatures(const std::string &FS, const std::string &CPU); + // This is important for reducing register pressure in vector code. + virtual bool useAA() const LLVM_OVERRIDE { return true; } + + // Automatically generated by tblgen. + void ParseSubtargetFeatures(StringRef CPU, StringRef FS); + + // Return true if the target has the distinct-operands facility. + bool hasDistinctOps() const { return HasDistinctOps; } + + // Return true if the target has the load/store-on-condition facility. + bool hasLoadStoreOnCond() const { return HasLoadStoreOnCond; } + + // Return true if the target has the high-word facility. + bool hasHighWord() const { return HasHighWord; } + + // Return true if the target has the floating-point extension facility. + bool hasFPExtension() const { return HasFPExtension; } - bool isZ10() const { return HasZ10Insts; } + // Return true if GV can be accessed using LARL for reloc model RM + // and code model CM. + bool isPC32DBLSymbol(const GlobalValue *GV, Reloc::Model RM, + CodeModel::Model CM) const; - bool GVRequiresExtraLoad(const GlobalValue* GV, const TargetMachine& TM, - bool isDirectCall) const; + bool isTargetELF() const { return TargetTriple.isOSBinFormatELF(); } }; -} // End llvm namespace +} // end namespace llvm -#endif // LLVM_TARGET_SystemZ_SUBTARGET_H +#endif