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