diff options
Diffstat (limited to 'lib/Target/R600/AMDGPUSubtarget.h')
-rw-r--r-- | lib/Target/R600/AMDGPUSubtarget.h | 58 |
1 files changed, 45 insertions, 13 deletions
diff --git a/lib/Target/R600/AMDGPUSubtarget.h b/lib/Target/R600/AMDGPUSubtarget.h index a844b37b6be5..90179d79d25d 100644 --- a/lib/Target/R600/AMDGPUSubtarget.h +++ b/lib/Target/R600/AMDGPUSubtarget.h @@ -12,25 +12,26 @@ // //===----------------------------------------------------------------------===// -#ifndef AMDGPUSUBTARGET_H -#define AMDGPUSUBTARGET_H +#ifndef LLVM_LIB_TARGET_R600_AMDGPUSUBTARGET_H +#define LLVM_LIB_TARGET_R600_AMDGPUSUBTARGET_H #include "AMDGPU.h" +#include "AMDGPUFrameLowering.h" #include "AMDGPUInstrInfo.h" +#include "AMDGPUIntrinsicInfo.h" +#include "AMDGPUSubtarget.h" +#include "R600ISelLowering.h" #include "llvm/ADT/StringExtras.h" #include "llvm/ADT/StringRef.h" +#include "llvm/IR/DataLayout.h" #include "llvm/Target/TargetSubtargetInfo.h" #define GET_SUBTARGETINFO_HEADER #include "AMDGPUGenSubtargetInfo.inc" -#define MAX_CB_SIZE (1 << 16) - namespace llvm { class AMDGPUSubtarget : public AMDGPUGenSubtargetInfo { - std::unique_ptr<AMDGPUInstrInfo> InstrInfo; - public: enum Generation { R600 = 0, @@ -38,7 +39,8 @@ public: EVERGREEN, NORTHERN_ISLANDS, SOUTHERN_ISLANDS, - SEA_ISLANDS + SEA_ISLANDS, + VOLCANIC_ISLANDS, }; private: @@ -53,24 +55,41 @@ private: bool FP64Denormals; bool FP32Denormals; bool CaymanISA; + bool FlatAddressSpace; bool EnableIRStructurizer; bool EnablePromoteAlloca; bool EnableIfCvt; + bool EnableLoadStoreOpt; unsigned WavefrontSize; bool CFALUBug; int LocalMemorySize; + const DataLayout DL; + AMDGPUFrameLowering FrameLowering; + std::unique_ptr<AMDGPUTargetLowering> TLInfo; + std::unique_ptr<AMDGPUInstrInfo> InstrInfo; InstrItineraryData InstrItins; + Triple TargetTriple; public: - AMDGPUSubtarget(StringRef TT, StringRef CPU, StringRef FS); + AMDGPUSubtarget(StringRef TT, StringRef CPU, StringRef FS, TargetMachine &TM); + AMDGPUSubtarget &initializeSubtargetDependencies(StringRef GPU, StringRef FS); - const AMDGPUInstrInfo *getInstrInfo() const { + const AMDGPUFrameLowering *getFrameLowering() const override { + return &FrameLowering; + } + const AMDGPUInstrInfo *getInstrInfo() const override { return InstrInfo.get(); } - - const InstrItineraryData &getInstrItineraryData() const { - return InstrItins; + const AMDGPURegisterInfo *getRegisterInfo() const override { + return &InstrInfo->getRegisterInfo(); + } + AMDGPUTargetLowering *getTargetLowering() const override { + return TLInfo.get(); + } + const DataLayout *getDataLayout() const override { return &DL; } + const InstrItineraryData *getInstrItineraryData() const override { + return &InstrItins; } void ParseSubtargetFeatures(StringRef CPU, StringRef FS); @@ -107,6 +126,10 @@ public: return FP64Denormals; } + bool hasFlatAddressSpace() const { + return FlatAddressSpace; + } + bool hasBFE() const { return (getGeneration() >= EVERGREEN); } @@ -158,6 +181,10 @@ public: return EnableIfCvt; } + bool loadStoreOptEnabled() const { + return EnableLoadStoreOpt; + } + unsigned getWavefrontSize() const { return WavefrontSize; } @@ -173,6 +200,8 @@ public: return LocalMemorySize; } + unsigned getAmdKernelCodeChipID() const; + bool enableMachineScheduler() const override { return getGeneration() <= NORTHERN_ISLANDS; } @@ -192,8 +221,11 @@ public: bool r600ALUEncoding() const { return R600ALUInst; } + bool isAmdHsaOS() const { + return TargetTriple.getOS() == Triple::AMDHSA; + } }; } // End namespace llvm -#endif // AMDGPUSUBTARGET_H +#endif |