Home | History | Annotate | Download | only in radeon
      1 //===-- AMDILEvergreenDevice.cpp - Device Info for Evergreen --------------===//
      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 #include "AMDILEvergreenDevice.h"
     10 
     11 using namespace llvm;
     12 
     13 AMDGPUEvergreenDevice::AMDGPUEvergreenDevice(AMDGPUSubtarget *ST)
     14 : AMDGPUDevice(ST) {
     15   setCaps();
     16   std::string name = ST->getDeviceName();
     17   if (name == "cedar") {
     18     mDeviceFlag = OCL_DEVICE_CEDAR;
     19   } else if (name == "redwood") {
     20     mDeviceFlag = OCL_DEVICE_REDWOOD;
     21   } else if (name == "cypress") {
     22     mDeviceFlag = OCL_DEVICE_CYPRESS;
     23   } else {
     24     mDeviceFlag = OCL_DEVICE_JUNIPER;
     25   }
     26 }
     27 
     28 AMDGPUEvergreenDevice::~AMDGPUEvergreenDevice() {
     29 }
     30 
     31 size_t AMDGPUEvergreenDevice::getMaxLDSSize() const {
     32   if (usesHardware(AMDGPUDeviceInfo::LocalMem)) {
     33     return MAX_LDS_SIZE_800;
     34   } else {
     35     return 0;
     36   }
     37 }
     38 size_t AMDGPUEvergreenDevice::getMaxGDSSize() const {
     39   if (usesHardware(AMDGPUDeviceInfo::RegionMem)) {
     40     return MAX_LDS_SIZE_800;
     41   } else {
     42     return 0;
     43   }
     44 }
     45 uint32_t AMDGPUEvergreenDevice::getMaxNumUAVs() const {
     46   return 12;
     47 }
     48 
     49 uint32_t AMDGPUEvergreenDevice::getResourceID(uint32_t id) const {
     50   switch(id) {
     51   default:
     52     assert(0 && "ID type passed in is unknown!");
     53     break;
     54   case CONSTANT_ID:
     55   case RAW_UAV_ID:
     56     return GLOBAL_RETURN_RAW_UAV_ID;
     57   case GLOBAL_ID:
     58   case ARENA_UAV_ID:
     59     return DEFAULT_ARENA_UAV_ID;
     60   case LDS_ID:
     61     if (usesHardware(AMDGPUDeviceInfo::LocalMem)) {
     62       return DEFAULT_LDS_ID;
     63     } else {
     64       return DEFAULT_ARENA_UAV_ID;
     65     }
     66   case GDS_ID:
     67     if (usesHardware(AMDGPUDeviceInfo::RegionMem)) {
     68       return DEFAULT_GDS_ID;
     69     } else {
     70       return DEFAULT_ARENA_UAV_ID;
     71     }
     72   case SCRATCH_ID:
     73     if (usesHardware(AMDGPUDeviceInfo::PrivateMem)) {
     74       return DEFAULT_SCRATCH_ID;
     75     } else {
     76       return DEFAULT_ARENA_UAV_ID;
     77     }
     78   };
     79   return 0;
     80 }
     81 
     82 size_t AMDGPUEvergreenDevice::getWavefrontSize() const {
     83   return AMDGPUDevice::WavefrontSize;
     84 }
     85 
     86 uint32_t AMDGPUEvergreenDevice::getGeneration() const {
     87   return AMDGPUDeviceInfo::HD5XXX;
     88 }
     89 
     90 void AMDGPUEvergreenDevice::setCaps() {
     91   mSWBits.set(AMDGPUDeviceInfo::ArenaSegment);
     92   mHWBits.set(AMDGPUDeviceInfo::ArenaUAV);
     93   mHWBits.set(AMDGPUDeviceInfo::HW64BitDivMod);
     94   mSWBits.reset(AMDGPUDeviceInfo::HW64BitDivMod);
     95   mSWBits.set(AMDGPUDeviceInfo::Signed24BitOps);
     96   if (mSTM->isOverride(AMDGPUDeviceInfo::ByteStores)) {
     97     mHWBits.set(AMDGPUDeviceInfo::ByteStores);
     98   }
     99   if (mSTM->isOverride(AMDGPUDeviceInfo::Debug)) {
    100     mSWBits.set(AMDGPUDeviceInfo::LocalMem);
    101     mSWBits.set(AMDGPUDeviceInfo::RegionMem);
    102   } else {
    103     mHWBits.set(AMDGPUDeviceInfo::LocalMem);
    104     mHWBits.set(AMDGPUDeviceInfo::RegionMem);
    105   }
    106   mHWBits.set(AMDGPUDeviceInfo::Images);
    107   if (mSTM->isOverride(AMDGPUDeviceInfo::NoAlias)) {
    108     mHWBits.set(AMDGPUDeviceInfo::NoAlias);
    109   }
    110   mHWBits.set(AMDGPUDeviceInfo::CachedMem);
    111   if (mSTM->isOverride(AMDGPUDeviceInfo::MultiUAV)) {
    112     mHWBits.set(AMDGPUDeviceInfo::MultiUAV);
    113   }
    114   mHWBits.set(AMDGPUDeviceInfo::ByteLDSOps);
    115   mSWBits.reset(AMDGPUDeviceInfo::ByteLDSOps);
    116   mHWBits.set(AMDGPUDeviceInfo::ArenaVectors);
    117   mHWBits.set(AMDGPUDeviceInfo::LongOps);
    118   mSWBits.reset(AMDGPUDeviceInfo::LongOps);
    119   mHWBits.set(AMDGPUDeviceInfo::TmrReg);
    120 }
    121 
    122 AMDGPUCypressDevice::AMDGPUCypressDevice(AMDGPUSubtarget *ST)
    123   : AMDGPUEvergreenDevice(ST) {
    124   setCaps();
    125 }
    126 
    127 AMDGPUCypressDevice::~AMDGPUCypressDevice() {
    128 }
    129 
    130 void AMDGPUCypressDevice::setCaps() {
    131   if (mSTM->isOverride(AMDGPUDeviceInfo::DoubleOps)) {
    132     mHWBits.set(AMDGPUDeviceInfo::DoubleOps);
    133     mHWBits.set(AMDGPUDeviceInfo::FMA);
    134   }
    135 }
    136 
    137 
    138 AMDGPUCedarDevice::AMDGPUCedarDevice(AMDGPUSubtarget *ST)
    139   : AMDGPUEvergreenDevice(ST) {
    140   setCaps();
    141 }
    142 
    143 AMDGPUCedarDevice::~AMDGPUCedarDevice() {
    144 }
    145 
    146 void AMDGPUCedarDevice::setCaps() {
    147   mSWBits.set(AMDGPUDeviceInfo::FMA);
    148 }
    149 
    150 size_t AMDGPUCedarDevice::getWavefrontSize() const {
    151   return AMDGPUDevice::QuarterWavefrontSize;
    152 }
    153 
    154 AMDGPURedwoodDevice::AMDGPURedwoodDevice(AMDGPUSubtarget *ST)
    155   : AMDGPUEvergreenDevice(ST) {
    156   setCaps();
    157 }
    158 
    159 AMDGPURedwoodDevice::~AMDGPURedwoodDevice()
    160 {
    161 }
    162 
    163 void AMDGPURedwoodDevice::setCaps() {
    164   mSWBits.set(AMDGPUDeviceInfo::FMA);
    165 }
    166 
    167 size_t AMDGPURedwoodDevice::getWavefrontSize() const {
    168   return AMDGPUDevice::HalfWavefrontSize;
    169 }
    170