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