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 GET_SUBTARGETINFO_ENUM 20 #define GET_SUBTARGETINFO_TARGET_DESC 21 #define GET_SUBTARGETINFO_CTOR 22 #include "AMDGPUGenSubtargetInfo.inc" 23 24 AMDGPUSubtarget::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; 36 ParseSubtargetFeatures(GPU, FS); 37 DevName = GPU; 38 Device = AMDGPUDeviceInfo::getDeviceFromName(DevName, this, Is64bit); 39 } 40 41 AMDGPUSubtarget::~AMDGPUSubtarget() { 42 delete Device; 43 } 44 45 bool 46 AMDGPUSubtarget::isOverride(AMDGPUDeviceInfo::Caps caps) const { 47 assert(caps < AMDGPUDeviceInfo::MaxNumberCapabilities && 48 "Caps index is out of bounds!"); 49 return CapsOverride[caps]; 50 } 51 bool 52 AMDGPUSubtarget::is64bit() const { 53 return Is64bit; 54 } 55 bool 56 AMDGPUSubtarget::isTargetELF() const { 57 return false; 58 } 59 size_t 60 AMDGPUSubtarget::getDefaultSize(uint32_t dim) const { 61 if (dim > 3) { 62 return 1; 63 } else { 64 return DefaultSize[dim]; 65 } 66 } 67 68 std::string 69 AMDGPUSubtarget::getDataLayout() const { 70 if (!Device) { 71 return std::string("e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16" 72 "-i32:32:32-i64:64:64-f32:32:32-f64:64:64-f80:32:32" 73 "-v16:16:16-v24:32:32-v32:32:32-v48:64:64-v64:64:64" 74 "-v96:128:128-v128:128:128-v192:256:256-v256:256:256" 75 "-v512:512:512-v1024:1024:1024-v2048:2048:2048-a0:0:64"); 76 } 77 return Device->getDataLayout(); 78 } 79 80 std::string 81 AMDGPUSubtarget::getDeviceName() const { 82 return DevName; 83 } 84 const AMDGPUDevice * 85 AMDGPUSubtarget::device() const { 86 return Device; 87 } 88