[Modules] Make Support/Debug.h modular. This requires it to not change
[oota-llvm.git] / lib / Target / R600 / AMDGPUSubtarget.cpp
1 //===-- AMDGPUSubtarget.cpp - AMDGPU Subtarget Information ----------------===//
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 Implements the AMDGPU specific subclass of TargetSubtarget.
12 //
13 //===----------------------------------------------------------------------===//
14
15 #include "AMDGPUSubtarget.h"
16
17 using namespace llvm;
18
19 #define DEBUG_TYPE "amdgpu-subtarget"
20
21 #define GET_SUBTARGETINFO_ENUM
22 #define GET_SUBTARGETINFO_TARGET_DESC
23 #define GET_SUBTARGETINFO_CTOR
24 #include "AMDGPUGenSubtargetInfo.inc"
25
26 AMDGPUSubtarget::AMDGPUSubtarget(StringRef TT, StringRef CPU, StringRef FS) :
27   AMDGPUGenSubtargetInfo(TT, CPU, FS), DumpCode(false) {
28     InstrItins = getInstrItineraryForCPU(CPU);
29
30   // Default card
31   StringRef GPU = CPU;
32   Is64bit = false;
33   DefaultSize[0] = 64;
34   DefaultSize[1] = 1;
35   DefaultSize[2] = 1;
36   HasVertexCache = false;
37   TexVTXClauseSize = 0;
38   Gen = AMDGPUSubtarget::R600;
39   FP64 = false;
40   CaymanISA = false;
41   EnableIRStructurizer = true;
42   EnableIfCvt = true;
43   WavefrontSize = 0;
44   CFALUBug = false;
45   ParseSubtargetFeatures(GPU, FS);
46   DevName = GPU;
47 }
48
49 bool
50 AMDGPUSubtarget::is64bit() const  {
51   return Is64bit;
52 }
53 bool
54 AMDGPUSubtarget::hasVertexCache() const {
55   return HasVertexCache;
56 }
57 short
58 AMDGPUSubtarget::getTexVTXClauseSize() const {
59   return TexVTXClauseSize;
60 }
61 enum AMDGPUSubtarget::Generation
62 AMDGPUSubtarget::getGeneration() const {
63   return Gen;
64 }
65 bool
66 AMDGPUSubtarget::hasHWFP64() const {
67   return FP64;
68 }
69 bool
70 AMDGPUSubtarget::hasCaymanISA() const {
71   return CaymanISA;
72 }
73 bool
74 AMDGPUSubtarget::IsIRStructurizerEnabled() const {
75   return EnableIRStructurizer;
76 }
77 bool
78 AMDGPUSubtarget::isIfCvtEnabled() const {
79   return EnableIfCvt;
80 }
81 unsigned
82 AMDGPUSubtarget::getWavefrontSize() const {
83   return WavefrontSize;
84 }
85 unsigned
86 AMDGPUSubtarget::getStackEntrySize() const {
87   assert(getGeneration() <= NORTHERN_ISLANDS);
88   switch(getWavefrontSize()) {
89   case 16:
90     return 8;
91   case 32:
92     if (hasCaymanISA())
93       return 4;
94     else
95       return 8;
96   case 64:
97     return 4;
98   default:
99     llvm_unreachable("Illegal wavefront size.");
100   }
101 }
102 bool
103 AMDGPUSubtarget::hasCFAluBug() const {
104   assert(getGeneration() <= NORTHERN_ISLANDS);
105   return CFALUBug;
106 }
107 bool
108 AMDGPUSubtarget::isTargetELF() const {
109   return false;
110 }
111 size_t
112 AMDGPUSubtarget::getDefaultSize(uint32_t dim) const {
113   if (dim > 2) {
114     return 1;
115   } else {
116     return DefaultSize[dim];
117   }
118 }
119
120 std::string
121 AMDGPUSubtarget::getDeviceName() const {
122   return DevName;
123 }