Tom Stellard | 75aadc2 | 2012-12-11 21:25:42 +0000 | [diff] [blame] | 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 |
Tom Stellard | a6c6e1b | 2013-06-07 20:37:48 +0000 | [diff] [blame] | 17 | #include "AMDGPU.h" |
Tom Stellard | 75aadc2 | 2012-12-11 21:25:42 +0000 | [diff] [blame] | 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 | |
| 27 | namespace llvm { |
| 28 | |
| 29 | class AMDGPUSubtarget : public AMDGPUGenSubtargetInfo { |
Tom Stellard | a6c6e1b | 2013-06-07 20:37:48 +0000 | [diff] [blame] | 30 | public: |
| 31 | enum Generation { |
| 32 | R600 = 0, |
| 33 | R700, |
| 34 | EVERGREEN, |
| 35 | NORTHERN_ISLANDS, |
Tom Stellard | 6e1ee47 | 2013-10-29 16:37:28 +0000 | [diff] [blame^] | 36 | SOUTHERN_ISLANDS, |
| 37 | SEA_ISLANDS |
Tom Stellard | a6c6e1b | 2013-06-07 20:37:48 +0000 | [diff] [blame] | 38 | }; |
| 39 | |
Tom Stellard | 75aadc2 | 2012-12-11 21:25:42 +0000 | [diff] [blame] | 40 | private: |
Tom Stellard | 75aadc2 | 2012-12-11 21:25:42 +0000 | [diff] [blame] | 41 | size_t DefaultSize[3]; |
| 42 | std::string DevName; |
| 43 | bool Is64bit; |
| 44 | bool Is32on64bit; |
| 45 | bool DumpCode; |
| 46 | bool R600ALUInst; |
Vincent Lejeune | c299164 | 2013-04-30 00:13:39 +0000 | [diff] [blame] | 47 | bool HasVertexCache; |
Vincent Lejeune | f9f4e1e | 2013-05-17 16:49:55 +0000 | [diff] [blame] | 48 | short TexVTXClauseSize; |
Tom Stellard | a6c6e1b | 2013-06-07 20:37:48 +0000 | [diff] [blame] | 49 | enum Generation Gen; |
| 50 | bool FP64; |
| 51 | bool CaymanISA; |
Tom Stellard | ed0ceec | 2013-10-10 17:11:12 +0000 | [diff] [blame] | 52 | bool EnableIRStructurizer; |
Tom Stellard | 75aadc2 | 2012-12-11 21:25:42 +0000 | [diff] [blame] | 53 | |
| 54 | InstrItineraryData InstrItins; |
| 55 | |
| 56 | public: |
| 57 | AMDGPUSubtarget(StringRef TT, StringRef CPU, StringRef FS); |
Tom Stellard | 75aadc2 | 2012-12-11 21:25:42 +0000 | [diff] [blame] | 58 | |
| 59 | const InstrItineraryData &getInstrItineraryData() const { return InstrItins; } |
Dmitri Gribenko | 226fea5 | 2013-01-13 16:01:15 +0000 | [diff] [blame] | 60 | virtual void ParseSubtargetFeatures(StringRef CPU, StringRef FS); |
Tom Stellard | 75aadc2 | 2012-12-11 21:25:42 +0000 | [diff] [blame] | 61 | |
Tom Stellard | 75aadc2 | 2012-12-11 21:25:42 +0000 | [diff] [blame] | 62 | bool is64bit() const; |
Vincent Lejeune | c299164 | 2013-04-30 00:13:39 +0000 | [diff] [blame] | 63 | bool hasVertexCache() const; |
Vincent Lejeune | f9f4e1e | 2013-05-17 16:49:55 +0000 | [diff] [blame] | 64 | short getTexVTXClauseSize() const; |
Tom Stellard | a6c6e1b | 2013-06-07 20:37:48 +0000 | [diff] [blame] | 65 | enum Generation getGeneration() const; |
| 66 | bool hasHWFP64() const; |
| 67 | bool hasCaymanISA() const; |
Tom Stellard | ed0ceec | 2013-10-10 17:11:12 +0000 | [diff] [blame] | 68 | bool IsIRStructurizerEnabled() const; |
Tom Stellard | 75aadc2 | 2012-12-11 21:25:42 +0000 | [diff] [blame] | 69 | |
Andrew Trick | 978674b | 2013-09-20 05:14:41 +0000 | [diff] [blame] | 70 | virtual bool enableMachineScheduler() const { |
| 71 | return getGeneration() <= NORTHERN_ISLANDS; |
| 72 | } |
| 73 | |
Tom Stellard | 75aadc2 | 2012-12-11 21:25:42 +0000 | [diff] [blame] | 74 | // Helper functions to simplify if statements |
| 75 | bool isTargetELF() const; |
Tom Stellard | 75aadc2 | 2012-12-11 21:25:42 +0000 | [diff] [blame] | 76 | std::string getDataLayout() const; |
| 77 | std::string getDeviceName() const; |
| 78 | virtual size_t getDefaultSize(uint32_t dim) const; |
| 79 | bool dumpCode() const { return DumpCode; } |
| 80 | bool r600ALUEncoding() const { return R600ALUInst; } |
| 81 | |
| 82 | }; |
| 83 | |
| 84 | } // End namespace llvm |
| 85 | |
| 86 | #endif // AMDGPUSUBTARGET_H |