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