blob: c5345cc764c75d6af33f17c5bf7f2bf868f04eee [file] [log] [blame]
Tom Stellard75aadc22012-12-11 21:25:42 +00001//=====-- 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
Tom Stellarda6c6e1b2013-06-07 20:37:48 +000017#include "AMDGPU.h"
Tom Stellard75aadc22012-12-11 21:25:42 +000018#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 {
Tom Stellarda6c6e1b2013-06-07 20:37:48 +000030public:
31 enum Generation {
32 R600 = 0,
33 R700,
34 EVERGREEN,
35 NORTHERN_ISLANDS,
36 SOUTHERN_ISLANDS
37 };
38
Tom Stellard75aadc22012-12-11 21:25:42 +000039private:
Tom Stellard75aadc22012-12-11 21:25:42 +000040 size_t DefaultSize[3];
41 std::string DevName;
42 bool Is64bit;
43 bool Is32on64bit;
44 bool DumpCode;
45 bool R600ALUInst;
Vincent Lejeunec2991642013-04-30 00:13:39 +000046 bool HasVertexCache;
Vincent Lejeunef9f4e1e2013-05-17 16:49:55 +000047 short TexVTXClauseSize;
Tom Stellarda6c6e1b2013-06-07 20:37:48 +000048 enum Generation Gen;
49 bool FP64;
50 bool CaymanISA;
Tom Stellarded0ceec2013-10-10 17:11:12 +000051 bool EnableIRStructurizer;
Tom Stellard75aadc22012-12-11 21:25:42 +000052
53 InstrItineraryData InstrItins;
54
55public:
56 AMDGPUSubtarget(StringRef TT, StringRef CPU, StringRef FS);
Tom Stellard75aadc22012-12-11 21:25:42 +000057
58 const InstrItineraryData &getInstrItineraryData() const { return InstrItins; }
Dmitri Gribenko226fea52013-01-13 16:01:15 +000059 virtual void ParseSubtargetFeatures(StringRef CPU, StringRef FS);
Tom Stellard75aadc22012-12-11 21:25:42 +000060
Tom Stellard75aadc22012-12-11 21:25:42 +000061 bool is64bit() const;
Vincent Lejeunec2991642013-04-30 00:13:39 +000062 bool hasVertexCache() const;
Vincent Lejeunef9f4e1e2013-05-17 16:49:55 +000063 short getTexVTXClauseSize() const;
Tom Stellarda6c6e1b2013-06-07 20:37:48 +000064 enum Generation getGeneration() const;
65 bool hasHWFP64() const;
66 bool hasCaymanISA() const;
Tom Stellarded0ceec2013-10-10 17:11:12 +000067 bool IsIRStructurizerEnabled() const;
Tom Stellard75aadc22012-12-11 21:25:42 +000068
Andrew Trick978674b2013-09-20 05:14:41 +000069 virtual bool enableMachineScheduler() const {
70 return getGeneration() <= NORTHERN_ISLANDS;
71 }
72
Tom Stellard75aadc22012-12-11 21:25:42 +000073 // Helper functions to simplify if statements
74 bool isTargetELF() const;
Tom Stellard75aadc22012-12-11 21:25:42 +000075 std::string getDataLayout() const;
76 std::string getDeviceName() const;
77 virtual size_t getDefaultSize(uint32_t dim) const;
78 bool dumpCode() const { return DumpCode; }
79 bool r600ALUEncoding() const { return R600ALUInst; }
80
81};
82
83} // End namespace llvm
84
85#endif // AMDGPUSUBTARGET_H