1fa63f976522bd4faf19249e8c9ac4d3edda498d9Tom Stellard//===-- AMDILDeviceInfo.h - Constants for describing devices --------------===//
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//==-----------------------------------------------------------------------===//
9a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#ifndef _AMDILDEVICEINFO_H_
10a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#define _AMDILDEVICEINFO_H_
11a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
12a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
13a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#include <string>
14a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
15a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardnamespace llvm
16a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{
172f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard  class AMDGPUDevice;
18b72ab79d73b29ec087d90cf2c698adbab4db5defTom Stellard  class AMDGPUSubtarget;
192f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard  namespace AMDGPUDeviceInfo
20a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  {
21a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard    // Each Capabilities can be executed using a hardware instruction,
22a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard    // emulated with a sequence of software instructions, or not
23a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard    // supported at all.
24a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard    enum ExecutionMode {
25a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      Unsupported = 0, // Unsupported feature on the card(Default value)
26a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      Software, // This is the execution mode that is set if the
27a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      // feature is emulated in software
28a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      Hardware  // This execution mode is set if the feature exists
29a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard        // natively in hardware
30a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard    };
31a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
32a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard    // Any changes to this needs to have a corresponding update to the
33a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard    // twiki page GPUMetadataABI
34a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard    enum Caps {
35a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      HalfOps          = 0x1,  // Half float is supported or not.
36a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      DoubleOps        = 0x2,  // Double is supported or not.
37a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      ByteOps          = 0x3,  // Byte(char) is support or not.
38a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      ShortOps         = 0x4,  // Short is supported or not.
39a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      LongOps          = 0x5,  // Long is supported or not.
40a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      Images           = 0x6,  // Images are supported or not.
41a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      ByteStores       = 0x7,  // ByteStores available(!HD4XXX).
42a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      ConstantMem      = 0x8,  // Constant/CB memory.
43a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      LocalMem         = 0x9,  // Local/LDS memory.
44a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      PrivateMem       = 0xA,  // Scratch/Private/Stack memory.
45a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      RegionMem        = 0xB,  // OCL GDS Memory Extension.
46a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      FMA              = 0xC,  // Use HW FMA or SW FMA.
47a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      ArenaSegment     = 0xD,  // Use for Arena UAV per pointer 12-1023.
48a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      MultiUAV         = 0xE,  // Use for UAV per Pointer 0-7.
49a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      Reserved0        = 0xF,  // ReservedFlag
50a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      NoAlias          = 0x10, // Cached loads.
51a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      Signed24BitOps   = 0x11, // Peephole Optimization.
52a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      // Debug mode implies that no hardware features or optimizations
53a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      // are performned and that all memory access go through a single
54a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      // uav(Arena on HD5XXX/HD6XXX and Raw on HD4XXX).
55a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      Debug            = 0x12, // Debug mode is enabled.
56a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      CachedMem        = 0x13, // Cached mem is available or not.
57a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      BarrierDetect    = 0x14, // Detect duplicate barriers.
58a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      Reserved1        = 0x15, // Reserved flag
59a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      ByteLDSOps       = 0x16, // Flag to specify if byte LDS ops are available.
60a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      ArenaVectors     = 0x17, // Flag to specify if vector loads from arena work.
61a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      TmrReg           = 0x18, // Flag to specify if Tmr register is supported.
62a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      NoInline         = 0x19, // Flag to specify that no inlining should occur.
63a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      MacroDB          = 0x1A, // Flag to specify that backend handles macrodb.
64a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      HW64BitDivMod    = 0x1B, // Flag for backend to generate 64bit div/mod.
65a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      ArenaUAV         = 0x1C, // Flag to specify that arena uav is supported.
66a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      PrivateUAV       = 0x1D, // Flag to specify that private memory uses uav's.
67a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      // If more capabilities are required, then
68a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      // this number needs to be increased.
69a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      // All capabilities must come before this
70a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      // number.
71a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      MaxNumberCapabilities = 0x20
72a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard    };
73a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard    // These have to be in order with the older generations
74a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard    // having the lower number enumerations.
75a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard    enum Generation {
76a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      HD4XXX = 0, // 7XX based devices.
77a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      HD5XXX, // Evergreen based devices.
78a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      HD6XXX, // NI/Evergreen+ based devices.
79a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      HD7XXX,
80a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      HDTEST, // Experimental feature testing device.
81a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      HDNUMGEN
82a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard    };
83a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
84a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
852f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard  AMDGPUDevice*
86b72ab79d73b29ec087d90cf2c698adbab4db5defTom Stellard    getDeviceFromName(const std::string &name, AMDGPUSubtarget *ptr,
87b72ab79d73b29ec087d90cf2c698adbab4db5defTom Stellard                      bool is64bit = false, bool is64on32bit = false);
88a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  } // namespace AMDILDeviceInfo
89a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} // namespace llvm
90a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#endif // _AMDILDEVICEINFO_H_
91