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// This file declares the AMDGPU specific subclass of TargetSubtarget.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef _AMDGPUSUBTARGET_H_
15#define _AMDGPUSUBTARGET_H_
16#include "AMDILDevice.h"
17#include "llvm/ADT/StringExtras.h"
18#include "llvm/ADT/StringRef.h"
19#include "llvm/Target/TargetSubtargetInfo.h"
20
21#define GET_SUBTARGETINFO_HEADER
22#include "AMDGPUGenSubtargetInfo.inc"
23
24#define MAX_CB_SIZE (1 << 16)
25
26namespace llvm {
27
28class AMDGPUSubtarget : public AMDGPUGenSubtargetInfo
29{
30private:
31  bool CapsOverride[AMDGPUDeviceInfo::MaxNumberCapabilities];
32  const AMDGPUDevice *mDevice;
33  size_t mDefaultSize[3];
34  size_t mMinimumSize[3];
35  std::string mDevName;
36  bool mIs64bit;
37  bool mIs32on64bit;
38  bool mDumpCode;
39
40  InstrItineraryData InstrItins;
41
42public:
43  AMDGPUSubtarget(StringRef TT, StringRef CPU, StringRef FS);
44  virtual ~AMDGPUSubtarget();
45
46  const InstrItineraryData &getInstrItineraryData() const { return InstrItins; }
47  virtual void ParseSubtargetFeatures(llvm::StringRef CPU, llvm::StringRef FS);
48
49  bool isOverride(AMDGPUDeviceInfo::Caps) const;
50  bool is64bit() const;
51
52  // Helper functions to simplify if statements
53  bool isTargetELF() const;
54  const AMDGPUDevice* device() const;
55  std::string getDataLayout() const;
56  std::string getDeviceName() const;
57  virtual size_t getDefaultSize(uint32_t dim) const;
58  bool dumpCode() const { return mDumpCode; }
59
60};
61
62} // End namespace llvm
63
64#endif // AMDGPUSUBTARGET_H_
65