1//===-- AMDILDeviceInfo.cpp - AMDILDeviceInfo class -----------------------===// 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// Function that creates DeviceInfo from a device name and other information. 11// 12//==-----------------------------------------------------------------------===// 13#include "AMDILDevices.h" 14#include "AMDGPUSubtarget.h" 15 16using namespace llvm; 17namespace llvm { 18namespace AMDGPUDeviceInfo { 19 AMDGPUDevice* 20getDeviceFromName(const std::string &deviceName, AMDGPUSubtarget *ptr, 21 bool is64bit, bool is64on32bit) 22{ 23 if (deviceName.c_str()[2] == '7') { 24 switch (deviceName.c_str()[3]) { 25 case '1': 26 return new AMDGPU710Device(ptr); 27 case '7': 28 return new AMDGPU770Device(ptr); 29 default: 30 return new AMDGPU7XXDevice(ptr); 31 }; 32 } else if (deviceName == "cypress") { 33#if DEBUG 34 assert(!is64bit && "This device does not support 64bit pointers!"); 35 assert(!is64on32bit && "This device does not support 64bit" 36 " on 32bit pointers!"); 37#endif 38 return new AMDGPUCypressDevice(ptr); 39 } else if (deviceName == "juniper") { 40#if DEBUG 41 assert(!is64bit && "This device does not support 64bit pointers!"); 42 assert(!is64on32bit && "This device does not support 64bit" 43 " on 32bit pointers!"); 44#endif 45 return new AMDGPUEvergreenDevice(ptr); 46 } else if (deviceName == "redwood") { 47#if DEBUG 48 assert(!is64bit && "This device does not support 64bit pointers!"); 49 assert(!is64on32bit && "This device does not support 64bit" 50 " on 32bit pointers!"); 51#endif 52 return new AMDGPURedwoodDevice(ptr); 53 } else if (deviceName == "cedar") { 54#if DEBUG 55 assert(!is64bit && "This device does not support 64bit pointers!"); 56 assert(!is64on32bit && "This device does not support 64bit" 57 " on 32bit pointers!"); 58#endif 59 return new AMDGPUCedarDevice(ptr); 60 } else if (deviceName == "barts" 61 || deviceName == "turks") { 62#if DEBUG 63 assert(!is64bit && "This device does not support 64bit pointers!"); 64 assert(!is64on32bit && "This device does not support 64bit" 65 " on 32bit pointers!"); 66#endif 67 return new AMDGPUNIDevice(ptr); 68 } else if (deviceName == "cayman") { 69#if DEBUG 70 assert(!is64bit && "This device does not support 64bit pointers!"); 71 assert(!is64on32bit && "This device does not support 64bit" 72 " on 32bit pointers!"); 73#endif 74 return new AMDGPUCaymanDevice(ptr); 75 } else if (deviceName == "caicos") { 76#if DEBUG 77 assert(!is64bit && "This device does not support 64bit pointers!"); 78 assert(!is64on32bit && "This device does not support 64bit" 79 " on 32bit pointers!"); 80#endif 81 return new AMDGPUNIDevice(ptr); 82 } else if (deviceName == "SI") { 83 return new AMDGPUSIDevice(ptr); 84 } else { 85#if DEBUG 86 assert(!is64bit && "This device does not support 64bit pointers!"); 87 assert(!is64on32bit && "This device does not support 64bit" 88 " on 32bit pointers!"); 89#endif 90 return new AMDGPU7XXDevice(ptr); 91 } 92} 93} // End namespace AMDGPUDeviceInfo 94} // End namespace llvm 95