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