1 //===---- AMDILDevice.h - Define Device Data for AMDGPU -----*- C++ -*------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //==-----------------------------------------------------------------------===//
11 /// \brief Interface for the subtarget data classes.
13 /// This file will define the interface that each generation needs to
14 /// implement in order to correctly answer queries on the capabilities of the
15 /// specific hardware.
16 //===----------------------------------------------------------------------===//
17 #ifndef AMDILDEVICEIMPL_H
18 #define AMDILDEVICEIMPL_H
20 #include "llvm/ADT/BitVector.h"
23 class AMDGPUSubtarget;
25 //===----------------------------------------------------------------------===//
26 // Interface for data that is specific to a single device
27 //===----------------------------------------------------------------------===//
30 AMDGPUDevice(AMDGPUSubtarget *ST);
31 virtual ~AMDGPUDevice();
33 // Enum values for the various memory types.
45 /// \returns The max LDS size that the hardware supports. Size is in
47 virtual size_t getMaxLDSSize() const = 0;
49 /// \returns The max GDS size that the hardware supports if the GDS is
50 /// supported by the hardware. Size is in bytes.
51 virtual size_t getMaxGDSSize() const;
53 /// \returns The max number of hardware constant address spaces that
54 /// are supported by this device.
55 virtual size_t getMaxNumCBs() const;
57 /// \returns The max number of bytes a single hardware constant buffer
58 /// can support. Size is in bytes.
59 virtual size_t getMaxCBSize() const;
61 /// \returns The max number of bytes allowed by the hardware scratch
62 /// buffer. Size is in bytes.
63 virtual size_t getMaxScratchSize() const;
65 /// \brief Get the flag that corresponds to the device.
66 virtual uint32_t getDeviceFlag() const;
68 /// \returns The number of work-items that exist in a single hardware
70 virtual size_t getWavefrontSize() const = 0;
72 /// \brief Get the generational name of this specific device.
73 virtual uint32_t getGeneration() const = 0;
75 /// \brief Get the stack alignment of this specific device.
76 virtual uint32_t getStackAlignment() const;
78 /// \brief Get the resource ID for this specific device.
79 virtual uint32_t getResourceID(uint32_t DeviceID) const = 0;
81 /// \brief Get the max number of UAV's for this device.
82 virtual uint32_t getMaxNumUAVs() const = 0;
85 // API utilizing more detailed capabilities of each family of
86 // cards. If a capability is supported, then either usesHardware or
87 // usesSoftware returned true. If usesHardware returned true, then
88 // usesSoftware must return false for the same capability. Hardware
89 // execution means that the feature is done natively by the hardware
90 // and is not emulated by the softare. Software execution means
91 // that the feature could be done in the hardware, but there is
92 // software that emulates it with possibly using the hardware for
93 // support since the hardware does not fully comply with OpenCL
96 bool isSupported(AMDGPUDeviceInfo::Caps Mode) const;
97 bool usesHardware(AMDGPUDeviceInfo::Caps Mode) const;
98 bool usesSoftware(AMDGPUDeviceInfo::Caps Mode) const;
99 virtual std::string getDataLayout() const;
100 static const unsigned int MAX_LDS_SIZE_700 = 16384;
101 static const unsigned int MAX_LDS_SIZE_800 = 32768;
102 static const unsigned int WavefrontSize = 64;
103 static const unsigned int HalfWavefrontSize = 32;
104 static const unsigned int QuarterWavefrontSize = 16;
106 virtual void setCaps();
108 llvm::BitVector mSWBits;
109 AMDGPUSubtarget *mSTM;
112 AMDGPUDeviceInfo::ExecutionMode
113 getExecutionMode(AMDGPUDeviceInfo::Caps Caps) const;
117 #endif // AMDILDEVICEIMPL_H