1f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard//=====-- AMDGPUSubtarget.h - Define Subtarget for the AMDIL ---*- C++ -*-====// 2f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// 3f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// The LLVM Compiler Infrastructure 4f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// 5f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// This file is distributed under the University of Illinois Open Source 6f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// License. See LICENSE.TXT for details. 7f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// 8f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard//==-----------------------------------------------------------------------===// 9f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// 10f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard/// \file 11f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard/// \brief AMDGPU specific subclass of TargetSubtarget. 12f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// 13f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard//===----------------------------------------------------------------------===// 14f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 15f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#ifndef AMDGPUSUBTARGET_H 16f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#define AMDGPUSUBTARGET_H 173ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard#include "AMDGPU.h" 18f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#include "llvm/ADT/StringExtras.h" 19f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#include "llvm/ADT/StringRef.h" 20f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#include "llvm/Target/TargetSubtargetInfo.h" 21f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 22f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#define GET_SUBTARGETINFO_HEADER 23f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#include "AMDGPUGenSubtargetInfo.inc" 24f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 25f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#define MAX_CB_SIZE (1 << 16) 26f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 27f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardnamespace llvm { 28f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 29f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardclass AMDGPUSubtarget : public AMDGPUGenSubtargetInfo { 303ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellardpublic: 313ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard enum Generation { 323ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard R600 = 0, 333ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard R700, 343ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard EVERGREEN, 353ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard NORTHERN_ISLANDS, 363ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard SOUTHERN_ISLANDS 373ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard }; 383ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard 39f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardprivate: 40f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard size_t DefaultSize[3]; 41f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard std::string DevName; 42f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard bool Is64bit; 43f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard bool Is32on64bit; 44f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard bool DumpCode; 45f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard bool R600ALUInst; 46631591e6f3e5119d8a8b1c853279bc4ac7ace4a0Vincent Lejeune bool HasVertexCache; 47dcfcf1d1ffe72d9c25564a2b8b53763a28648e97Vincent Lejeune short TexVTXClauseSize; 483ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard enum Generation Gen; 493ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard bool FP64; 503ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard bool CaymanISA; 51f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 52f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard InstrItineraryData InstrItins; 53f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 54f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardpublic: 55f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard AMDGPUSubtarget(StringRef TT, StringRef CPU, StringRef FS); 56f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 57f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard const InstrItineraryData &getInstrItineraryData() const { return InstrItins; } 5896f498bd9f140a98321c478f517877c4767b94faDmitri Gribenko virtual void ParseSubtargetFeatures(StringRef CPU, StringRef FS); 59f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 60f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard bool is64bit() const; 61631591e6f3e5119d8a8b1c853279bc4ac7ace4a0Vincent Lejeune bool hasVertexCache() const; 62dcfcf1d1ffe72d9c25564a2b8b53763a28648e97Vincent Lejeune short getTexVTXClauseSize() const; 633ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard enum Generation getGeneration() const; 643ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard bool hasHWFP64() const; 653ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard bool hasCaymanISA() const; 66f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 67f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard // Helper functions to simplify if statements 68f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard bool isTargetELF() const; 69f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard std::string getDataLayout() const; 70f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard std::string getDeviceName() const; 71f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard virtual size_t getDefaultSize(uint32_t dim) const; 72f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard bool dumpCode() const { return DumpCode; } 73f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard bool r600ALUEncoding() const { return R600ALUInst; } 74f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 75f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard}; 76f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 77f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard} // End namespace llvm 78f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 79f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#endif // AMDGPUSUBTARGET_H 80