blob: 158903020f67e8725204912fa982e7801e398090 [file] [log] [blame]
Tom Stellardf98f2ce2012-12-11 21:25:42 +00001//===-- 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
17using namespace llvm;
18
19#define GET_SUBTARGETINFO_ENUM
20#define GET_SUBTARGETINFO_TARGET_DESC
21#define GET_SUBTARGETINFO_CTOR
22#include "AMDGPUGenSubtargetInfo.inc"
23
24AMDGPUSubtarget::AMDGPUSubtarget(StringRef TT, StringRef CPU, StringRef FS) :
25 AMDGPUGenSubtargetInfo(TT, CPU, FS), DumpCode(false) {
26 InstrItins = getInstrItineraryForCPU(CPU);
27
28 memset(CapsOverride, 0, sizeof(*CapsOverride)
29 * AMDGPUDeviceInfo::MaxNumberCapabilities);
30 // Default card
31 StringRef GPU = CPU;
32 Is64bit = false;
33 DefaultSize[0] = 64;
34 DefaultSize[1] = 1;
35 DefaultSize[2] = 1;
Vincent Lejeune631591e2013-04-30 00:13:39 +000036 HasVertexCache = false;
Tom Stellardce961472013-06-07 20:28:55 +000037 TexVTXClauseSize = 0;
Tom Stellardf98f2ce2012-12-11 21:25:42 +000038 ParseSubtargetFeatures(GPU, FS);
39 DevName = GPU;
40 Device = AMDGPUDeviceInfo::getDeviceFromName(DevName, this, Is64bit);
41}
42
43AMDGPUSubtarget::~AMDGPUSubtarget() {
44 delete Device;
45}
46
47bool
48AMDGPUSubtarget::isOverride(AMDGPUDeviceInfo::Caps caps) const {
49 assert(caps < AMDGPUDeviceInfo::MaxNumberCapabilities &&
50 "Caps index is out of bounds!");
51 return CapsOverride[caps];
52}
53bool
54AMDGPUSubtarget::is64bit() const {
55 return Is64bit;
56}
57bool
Vincent Lejeune631591e2013-04-30 00:13:39 +000058AMDGPUSubtarget::hasVertexCache() const {
59 return HasVertexCache;
60}
Vincent Lejeunedcfcf1d2013-05-17 16:49:55 +000061short
62AMDGPUSubtarget::getTexVTXClauseSize() const {
63 return TexVTXClauseSize;
64}
Vincent Lejeune631591e2013-04-30 00:13:39 +000065bool
Tom Stellardf98f2ce2012-12-11 21:25:42 +000066AMDGPUSubtarget::isTargetELF() const {
67 return false;
68}
69size_t
70AMDGPUSubtarget::getDefaultSize(uint32_t dim) const {
71 if (dim > 3) {
72 return 1;
73 } else {
74 return DefaultSize[dim];
75 }
76}
77
78std::string
79AMDGPUSubtarget::getDataLayout() const {
80 if (!Device) {
81 return std::string("e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16"
82 "-i32:32:32-i64:64:64-f32:32:32-f64:64:64-f80:32:32"
83 "-v16:16:16-v24:32:32-v32:32:32-v48:64:64-v64:64:64"
84 "-v96:128:128-v128:128:128-v192:256:256-v256:256:256"
85 "-v512:512:512-v1024:1024:1024-v2048:2048:2048-a0:0:64");
86 }
87 return Device->getDataLayout();
88}
89
90std::string
91AMDGPUSubtarget::getDeviceName() const {
92 return DevName;
93}
94const AMDGPUDevice *
95AMDGPUSubtarget::device() const {
96 return Device;
97}