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