X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FTarget%2FSystemZ%2FSystemZSubtarget.h;h=9a1f593f526570481f7414c905436a3f72e6d14b;hb=e07464832d2df15184b4b288873123ddaef831c3;hp=55cfd80002bc955ecb2de36b78f872893073c2de;hpb=0ddff1b5359433faf2eb1c4ff5320ddcbd42f52f;p=oota-llvm.git diff --git a/lib/Target/SystemZ/SystemZSubtarget.h b/lib/Target/SystemZ/SystemZSubtarget.h index 55cfd80002b..9a1f593f526 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 // @@ -11,9 +11,16 @@ // //===----------------------------------------------------------------------===// -#ifndef LLVM_TARGET_SystemZ_SUBTARGET_H -#define LLVM_TARGET_SystemZ_SUBTARGET_H +#ifndef LLVM_LIB_TARGET_SYSTEMZ_SYSTEMZSUBTARGET_H +#define LLVM_LIB_TARGET_SYSTEMZ_SYSTEMZSUBTARGET_H +#include "SystemZFrameLowering.h" +#include "SystemZISelLowering.h" +#include "SystemZInstrInfo.h" +#include "SystemZRegisterInfo.h" +#include "SystemZSelectionDAGInfo.h" +#include "llvm/IR/DataLayout.h" +#include "llvm/ADT/Triple.h" #include "llvm/Target/TargetSubtargetInfo.h" #include @@ -23,26 +30,97 @@ namespace llvm { class GlobalValue; class StringRef; -class TargetMachine; class SystemZSubtarget : public SystemZGenSubtargetInfo { - bool HasZ10Insts; + virtual void anchor(); +protected: + bool HasDistinctOps; + bool HasLoadStoreOnCond; + bool HasHighWord; + bool HasFPExtension; + bool HasPopulationCount; + bool HasFastSerialization; + bool HasInterlockedAccess1; + bool HasMiscellaneousExtensions; + bool HasTransactionalExecution; + bool HasProcessorAssist; + bool HasVector; + +private: + Triple TargetTriple; + SystemZInstrInfo InstrInfo; + SystemZTargetLowering TLInfo; + SystemZSelectionDAGInfo TSInfo; + SystemZFrameLowering FrameLowering; + + SystemZSubtarget &initializeSubtargetDependencies(StringRef CPU, + StringRef FS); 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); + const std::string &FS, const TargetMachine &TM); + + const TargetFrameLowering *getFrameLowering() const override { + return &FrameLowering; + } + const SystemZInstrInfo *getInstrInfo() const override { return &InstrInfo; } + const SystemZRegisterInfo *getRegisterInfo() const override { + return &InstrInfo.getRegisterInfo(); + } + const SystemZTargetLowering *getTargetLowering() const override { + return &TLInfo; + } + const TargetSelectionDAGInfo *getSelectionDAGInfo() const override { + return &TSInfo; + } + + // This is important for reducing register pressure in vector code. + bool useAA() const override { return true; } - /// ParseSubtargetFeatures - Parses features string setting specified - /// subtarget options. Definition of function is auto generated by tblgen. + // Automatically generated by tblgen. void ParseSubtargetFeatures(StringRef CPU, StringRef FS); - bool isZ10() const { return HasZ10Insts; } + // 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; } + + // Return true if the target has the population-count facility. + bool hasPopulationCount() const { return HasPopulationCount; } + + // Return true if the target has the fast-serialization facility. + bool hasFastSerialization() const { return HasFastSerialization; } + + // Return true if the target has interlocked-access facility 1. + bool hasInterlockedAccess1() const { return HasInterlockedAccess1; } + + // Return true if the target has the miscellaneous-extensions facility. + bool hasMiscellaneousExtensions() const { + return HasMiscellaneousExtensions; + } + + // Return true if the target has the transactional-execution facility. + bool hasTransactionalExecution() const { return HasTransactionalExecution; } + + // Return true if the target has the processor-assist facility. + bool hasProcessorAssist() const { return HasProcessorAssist; } + + // Return true if the target has the vector facility. + bool hasVector() const { return HasVector; } + + // 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