Home | History | Annotate | Download | only in radeon
      1 //===-- AMDIL7XXDevice.cpp - Device Info for 7XX GPUs ---------------------===//
      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 "AMDIL7XXDevice.h"
     10 #include "AMDGPUSubtarget.h"
     11 #include "AMDILDevice.h"
     12 
     13 using namespace llvm;
     14 
     15 AMDGPU7XXDevice::AMDGPU7XXDevice(AMDGPUSubtarget *ST) : AMDGPUDevice(ST)
     16 {
     17   setCaps();
     18   std::string name = mSTM->getDeviceName();
     19   if (name == "rv710") {
     20     mDeviceFlag = OCL_DEVICE_RV710;
     21   } else if (name == "rv730") {
     22     mDeviceFlag = OCL_DEVICE_RV730;
     23   } else {
     24     mDeviceFlag = OCL_DEVICE_RV770;
     25   }
     26 }
     27 
     28 AMDGPU7XXDevice::~AMDGPU7XXDevice()
     29 {
     30 }
     31 
     32 void AMDGPU7XXDevice::setCaps()
     33 {
     34   mSWBits.set(AMDGPUDeviceInfo::LocalMem);
     35 }
     36 
     37 size_t AMDGPU7XXDevice::getMaxLDSSize() const
     38 {
     39   if (usesHardware(AMDGPUDeviceInfo::LocalMem)) {
     40     return MAX_LDS_SIZE_700;
     41   }
     42   return 0;
     43 }
     44 
     45 size_t AMDGPU7XXDevice::getWavefrontSize() const
     46 {
     47   return AMDGPUDevice::HalfWavefrontSize;
     48 }
     49 
     50 uint32_t AMDGPU7XXDevice::getGeneration() const
     51 {
     52   return AMDGPUDeviceInfo::HD4XXX;
     53 }
     54 
     55 uint32_t AMDGPU7XXDevice::getResourceID(uint32_t DeviceID) const
     56 {
     57   switch (DeviceID) {
     58   default:
     59     assert(0 && "ID type passed in is unknown!");
     60     break;
     61   case GLOBAL_ID:
     62   case CONSTANT_ID:
     63   case RAW_UAV_ID:
     64   case ARENA_UAV_ID:
     65     break;
     66   case LDS_ID:
     67     if (usesHardware(AMDGPUDeviceInfo::LocalMem)) {
     68       return DEFAULT_LDS_ID;
     69     }
     70     break;
     71   case SCRATCH_ID:
     72     if (usesHardware(AMDGPUDeviceInfo::PrivateMem)) {
     73       return DEFAULT_SCRATCH_ID;
     74     }
     75     break;
     76   case GDS_ID:
     77     assert(0 && "GDS UAV ID is not supported on this chip");
     78     if (usesHardware(AMDGPUDeviceInfo::RegionMem)) {
     79       return DEFAULT_GDS_ID;
     80     }
     81     break;
     82   };
     83 
     84   return 0;
     85 }
     86 
     87 uint32_t AMDGPU7XXDevice::getMaxNumUAVs() const
     88 {
     89   return 1;
     90 }
     91 
     92 AMDGPU770Device::AMDGPU770Device(AMDGPUSubtarget *ST): AMDGPU7XXDevice(ST)
     93 {
     94   setCaps();
     95 }
     96 
     97 AMDGPU770Device::~AMDGPU770Device()
     98 {
     99 }
    100 
    101 void AMDGPU770Device::setCaps()
    102 {
    103   if (mSTM->isOverride(AMDGPUDeviceInfo::DoubleOps)) {
    104     mSWBits.set(AMDGPUDeviceInfo::FMA);
    105     mHWBits.set(AMDGPUDeviceInfo::DoubleOps);
    106   }
    107   mSWBits.set(AMDGPUDeviceInfo::BarrierDetect);
    108   mHWBits.reset(AMDGPUDeviceInfo::LongOps);
    109   mSWBits.set(AMDGPUDeviceInfo::LongOps);
    110   mSWBits.set(AMDGPUDeviceInfo::LocalMem);
    111 }
    112 
    113 size_t AMDGPU770Device::getWavefrontSize() const
    114 {
    115   return AMDGPUDevice::WavefrontSize;
    116 }
    117 
    118 AMDGPU710Device::AMDGPU710Device(AMDGPUSubtarget *ST) : AMDGPU7XXDevice(ST)
    119 {
    120 }
    121 
    122 AMDGPU710Device::~AMDGPU710Device()
    123 {
    124 }
    125 
    126 size_t AMDGPU710Device::getWavefrontSize() const
    127 {
    128   return AMDGPUDevice::QuarterWavefrontSize;
    129 }
    130