//===-- AMDILDeviceInfo.h - Constants for describing devices --------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // /// \file //==-----------------------------------------------------------------------===// #ifndef AMDILDEVICEINFO_H #define AMDILDEVICEINFO_H #include namespace llvm { class AMDGPUDevice; class AMDGPUSubtarget; namespace AMDGPUDeviceInfo { /// Each Capabilities can be executed using a hardware instruction, /// emulated with a sequence of software instructions, or not /// supported at all. enum ExecutionMode { Unsupported = 0, ///< Unsupported feature on the card(Default value) /// This is the execution mode that is set if the feature is emulated in /// software. Software, /// This execution mode is set if the feature exists natively in hardware Hardware }; enum Caps { HalfOps = 0x1, ///< Half float is supported or not. DoubleOps = 0x2, ///< Double is supported or not. ByteOps = 0x3, ///< Byte(char) is support or not. ShortOps = 0x4, ///< Short is supported or not. LongOps = 0x5, ///< Long is supported or not. Images = 0x6, ///< Images are supported or not. ByteStores = 0x7, ///< ByteStores available(!HD4XXX). ConstantMem = 0x8, ///< Constant/CB memory. LocalMem = 0x9, ///< Local/LDS memory. PrivateMem = 0xA, ///< Scratch/Private/Stack memory. RegionMem = 0xB, ///< OCL GDS Memory Extension. FMA = 0xC, ///< Use HW FMA or SW FMA. ArenaSegment = 0xD, ///< Use for Arena UAV per pointer 12-1023. MultiUAV = 0xE, ///< Use for UAV per Pointer 0-7. Reserved0 = 0xF, ///< ReservedFlag NoAlias = 0x10, ///< Cached loads. Signed24BitOps = 0x11, ///< Peephole Optimization. /// Debug mode implies that no hardware features or optimizations /// are performned and that all memory access go through a single /// uav(Arena on HD5XXX/HD6XXX and Raw on HD4XXX). Debug = 0x12, CachedMem = 0x13, ///< Cached mem is available or not. BarrierDetect = 0x14, ///< Detect duplicate barriers. Reserved1 = 0x15, ///< Reserved flag ByteLDSOps = 0x16, ///< Flag to specify if byte LDS ops are available. ArenaVectors = 0x17, ///< Flag to specify if vector loads from arena work. TmrReg = 0x18, ///< Flag to specify if Tmr register is supported. NoInline = 0x19, ///< Flag to specify that no inlining should occur. MacroDB = 0x1A, ///< Flag to specify that backend handles macrodb. HW64BitDivMod = 0x1B, ///< Flag for backend to generate 64bit div/mod. ArenaUAV = 0x1C, ///< Flag to specify that arena uav is supported. PrivateUAV = 0x1D, ///< Flag to specify that private memory uses uav's. /// If more capabilities are required, then /// this number needs to be increased. /// All capabilities must come before this /// number. MaxNumberCapabilities = 0x20 }; /// These have to be in order with the older generations /// having the lower number enumerations. enum Generation { HD4XXX = 0, ///< 7XX based devices. HD5XXX, ///< Evergreen based devices. HD6XXX, ///< NI/Evergreen+ based devices. HD7XXX, ///< Southern Islands based devices. HDTEST, ///< Experimental feature testing device. HDNUMGEN }; AMDGPUDevice* getDeviceFromName(const std::string &name, AMDGPUSubtarget *ptr, bool is64bit = false, bool is64on32bit = false); } // namespace AMDILDeviceInfo } // namespace llvm #endif // AMDILDEVICEINFO_H