1//=====-- AMDGPUSubtarget.h - Define Subtarget for the AMDIL ---*- C++ -*-====// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//==-----------------------------------------------------------------------===// 9// 10/// \file 11/// \brief AMDGPU specific subclass of TargetSubtarget. 12// 13//===----------------------------------------------------------------------===// 14 15#ifndef AMDGPUSUBTARGET_H 16#define AMDGPUSUBTARGET_H 17#include "AMDGPU.h" 18#include "llvm/ADT/StringExtras.h" 19#include "llvm/ADT/StringRef.h" 20#include "llvm/Target/TargetSubtargetInfo.h" 21 22#define GET_SUBTARGETINFO_HEADER 23#include "AMDGPUGenSubtargetInfo.inc" 24 25#define MAX_CB_SIZE (1 << 16) 26 27namespace llvm { 28 29class AMDGPUSubtarget : public AMDGPUGenSubtargetInfo { 30public: 31 enum Generation { 32 R600 = 0, 33 R700, 34 EVERGREEN, 35 NORTHERN_ISLANDS, 36 SOUTHERN_ISLANDS, 37 SEA_ISLANDS 38 }; 39 40private: 41 size_t DefaultSize[3]; 42 std::string DevName; 43 bool Is64bit; 44 bool Is32on64bit; 45 bool DumpCode; 46 bool R600ALUInst; 47 bool HasVertexCache; 48 short TexVTXClauseSize; 49 enum Generation Gen; 50 bool FP64; 51 bool CaymanISA; 52 bool EnableIRStructurizer; 53 bool EnableIfCvt; 54 55 InstrItineraryData InstrItins; 56 57public: 58 AMDGPUSubtarget(StringRef TT, StringRef CPU, StringRef FS); 59 60 const InstrItineraryData &getInstrItineraryData() const { return InstrItins; } 61 virtual void ParseSubtargetFeatures(StringRef CPU, StringRef FS); 62 63 bool is64bit() const; 64 bool hasVertexCache() const; 65 short getTexVTXClauseSize() const; 66 enum Generation getGeneration() const; 67 bool hasHWFP64() const; 68 bool hasCaymanISA() const; 69 bool IsIRStructurizerEnabled() const; 70 bool isIfCvtEnabled() const; 71 72 virtual bool enableMachineScheduler() const { 73 return getGeneration() <= NORTHERN_ISLANDS; 74 } 75 76 // Helper functions to simplify if statements 77 bool isTargetELF() const; 78 std::string getDataLayout() const; 79 std::string getDeviceName() const; 80 virtual size_t getDefaultSize(uint32_t dim) const; 81 bool dumpCode() const { return DumpCode; } 82 bool r600ALUEncoding() const { return R600ALUInst; } 83 84}; 85 86} // End namespace llvm 87 88#endif // AMDGPUSUBTARGET_H 89