1fa63f976522bd4faf19249e8c9ac4d3edda498d9Tom Stellard//===-- AMDILDeviceInfo.cpp - AMDILDeviceInfo class -----------------------===// 2a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard// 3a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard// The LLVM Compiler Infrastructure 4a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard// 5a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard// This file is distributed under the University of Illinois Open Source 6a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard// License. See LICENSE.TXT for details. 7a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard// 8a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard//==-----------------------------------------------------------------------===// 9fa63f976522bd4faf19249e8c9ac4d3edda498d9Tom Stellard// 10fa63f976522bd4faf19249e8c9ac4d3edda498d9Tom Stellard// Function that creates DeviceInfo from a device name and other information. 11fa63f976522bd4faf19249e8c9ac4d3edda498d9Tom Stellard// 12fa63f976522bd4faf19249e8c9ac4d3edda498d9Tom Stellard//==-----------------------------------------------------------------------===// 13a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#include "AMDILDevices.h" 14b72ab79d73b29ec087d90cf2c698adbab4db5defTom Stellard#include "AMDGPUSubtarget.h" 15a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 16a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardusing namespace llvm; 17a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardnamespace llvm { 182f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellardnamespace AMDGPUDeviceInfo { 192f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard AMDGPUDevice* 20b72ab79d73b29ec087d90cf2c698adbab4db5defTom StellardgetDeviceFromName(const std::string &deviceName, AMDGPUSubtarget *ptr, 21b72ab79d73b29ec087d90cf2c698adbab4db5defTom Stellard bool is64bit, bool is64on32bit) 22a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{ 23a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard if (deviceName.c_str()[2] == '7') { 24a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard switch (deviceName.c_str()[3]) { 25a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard case '1': 262f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard return new AMDGPU710Device(ptr); 27a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard case '7': 282f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard return new AMDGPU770Device(ptr); 29a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard default: 302f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard return new AMDGPU7XXDevice(ptr); 31a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard }; 32a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } else if (deviceName == "cypress") { 33a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#if DEBUG 34a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard assert(!is64bit && "This device does not support 64bit pointers!"); 35a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard assert(!is64on32bit && "This device does not support 64bit" 36a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard " on 32bit pointers!"); 37a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#endif 382f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard return new AMDGPUCypressDevice(ptr); 39a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } else if (deviceName == "juniper") { 40a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#if DEBUG 41a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard assert(!is64bit && "This device does not support 64bit pointers!"); 42a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard assert(!is64on32bit && "This device does not support 64bit" 43a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard " on 32bit pointers!"); 44a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#endif 452f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard return new AMDGPUEvergreenDevice(ptr); 46a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } else if (deviceName == "redwood") { 47a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#if DEBUG 48a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard assert(!is64bit && "This device does not support 64bit pointers!"); 49a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard assert(!is64on32bit && "This device does not support 64bit" 50a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard " on 32bit pointers!"); 51a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#endif 522f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard return new AMDGPURedwoodDevice(ptr); 53a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } else if (deviceName == "cedar") { 54a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#if DEBUG 55a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard assert(!is64bit && "This device does not support 64bit pointers!"); 56a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard assert(!is64on32bit && "This device does not support 64bit" 57a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard " on 32bit pointers!"); 58a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#endif 592f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard return new AMDGPUCedarDevice(ptr); 60a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } else if (deviceName == "barts" 61a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard || deviceName == "turks") { 62a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#if DEBUG 63a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard assert(!is64bit && "This device does not support 64bit pointers!"); 64a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard assert(!is64on32bit && "This device does not support 64bit" 65a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard " on 32bit pointers!"); 66a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#endif 672f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard return new AMDGPUNIDevice(ptr); 68a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } else if (deviceName == "cayman") { 69a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#if DEBUG 70a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard assert(!is64bit && "This device does not support 64bit pointers!"); 71a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard assert(!is64on32bit && "This device does not support 64bit" 72a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard " on 32bit pointers!"); 73a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#endif 742f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard return new AMDGPUCaymanDevice(ptr); 75a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } else if (deviceName == "caicos") { 76a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#if DEBUG 77a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard assert(!is64bit && "This device does not support 64bit pointers!"); 78a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard assert(!is64on32bit && "This device does not support 64bit" 79a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard " on 32bit pointers!"); 80a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#endif 812f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard return new AMDGPUNIDevice(ptr); 82a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } else if (deviceName == "SI") { 832f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard return new AMDGPUSIDevice(ptr); 84a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } else { 85a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#if DEBUG 86a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard assert(!is64bit && "This device does not support 64bit pointers!"); 87a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard assert(!is64on32bit && "This device does not support 64bit" 88a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard " on 32bit pointers!"); 89a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#endif 902f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard return new AMDGPU7XXDevice(ptr); 91a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } 92a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 932f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard} // End namespace AMDGPUDeviceInfo 94fa63f976522bd4faf19249e8c9ac4d3edda498d9Tom Stellard} // End namespace llvm 95