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