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// This file implements the AMDGPU specific subclass of TargetSubtarget. 11// 12//===----------------------------------------------------------------------===// 13 14#include "AMDGPUSubtarget.h" 15 16using namespace llvm; 17 18#define GET_SUBTARGETINFO_ENUM 19#define GET_SUBTARGETINFO_TARGET_DESC 20#define GET_SUBTARGETINFO_CTOR 21#include "AMDGPUGenSubtargetInfo.inc" 22 23AMDGPUSubtarget::AMDGPUSubtarget(StringRef TT, StringRef CPU, StringRef FS) : 24 AMDGPUGenSubtargetInfo(TT, CPU, FS), mDumpCode(false) { 25 InstrItins = getInstrItineraryForCPU(CPU); 26 27 memset(CapsOverride, 0, sizeof(*CapsOverride) 28 * AMDGPUDeviceInfo::MaxNumberCapabilities); 29 // Default card 30 StringRef GPU = CPU; 31 mIs64bit = false; 32 mDefaultSize[0] = 64; 33 mDefaultSize[1] = 1; 34 mDefaultSize[2] = 1; 35 ParseSubtargetFeatures(GPU, FS); 36 mDevName = GPU; 37 mDevice = AMDGPUDeviceInfo::getDeviceFromName(mDevName, this, mIs64bit); 38} 39 40AMDGPUSubtarget::~AMDGPUSubtarget() 41{ 42 delete mDevice; 43} 44 45bool 46AMDGPUSubtarget::isOverride(AMDGPUDeviceInfo::Caps caps) const 47{ 48 assert(caps < AMDGPUDeviceInfo::MaxNumberCapabilities && 49 "Caps index is out of bounds!"); 50 return CapsOverride[caps]; 51} 52bool 53AMDGPUSubtarget::is64bit() const 54{ 55 return mIs64bit; 56} 57bool 58AMDGPUSubtarget::isTargetELF() const 59{ 60 return false; 61} 62size_t 63AMDGPUSubtarget::getDefaultSize(uint32_t dim) const 64{ 65 if (dim > 3) { 66 return 1; 67 } else { 68 return mDefaultSize[dim]; 69 } 70} 71 72std::string 73AMDGPUSubtarget::getDataLayout() const 74{ 75 if (!mDevice) { 76 return std::string("e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16" 77 "-i32:32:32-i64:64:64-f32:32:32-f64:64:64-f80:32:32" 78 "-v16:16:16-v24:32:32-v32:32:32-v48:64:64-v64:64:64" 79 "-v96:128:128-v128:128:128-v192:256:256-v256:256:256" 80 "-v512:512:512-v1024:1024:1024-v2048:2048:2048-a0:0:64"); 81 } 82 return mDevice->getDataLayout(); 83} 84 85std::string 86AMDGPUSubtarget::getDeviceName() const 87{ 88 return mDevName; 89} 90const AMDGPUDevice * 91AMDGPUSubtarget::device() const 92{ 93 return mDevice; 94} 95