Line data Source code
1 : //===-- AMDGPUMachineFunctionInfo.h -------------------------------*- C++ -*-=//
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 :
10 : #ifndef LLVM_LIB_TARGET_AMDGPU_AMDGPUMACHINEFUNCTION_H
11 : #define LLVM_LIB_TARGET_AMDGPU_AMDGPUMACHINEFUNCTION_H
12 :
13 : #include "llvm/ADT/DenseMap.h"
14 : #include "llvm/CodeGen/MachineFunction.h"
15 :
16 : namespace llvm {
17 :
18 : class GCNSubtarget;
19 :
20 : class AMDGPUMachineFunction : public MachineFunctionInfo {
21 : /// A map to keep track of local memory objects and their offsets within the
22 : /// local memory space.
23 : SmallDenseMap<const GlobalValue *, unsigned, 4> LocalMemoryObjects;
24 :
25 : protected:
26 : uint64_t ExplicitKernArgSize; // Cache for this.
27 : unsigned MaxKernArgAlign; // Cache for this.
28 :
29 : /// Number of bytes in the LDS that are being used.
30 : unsigned LDSSize;
31 :
32 : // Kernels + shaders. i.e. functions called by the driver and not called
33 : // by other functions.
34 : bool IsEntryFunction;
35 :
36 : bool NoSignedZerosFPMath;
37 :
38 : // Function may be memory bound.
39 : bool MemoryBound;
40 :
41 : // Kernel may need limited waves per EU for better performance.
42 : bool WaveLimiter;
43 :
44 : public:
45 : AMDGPUMachineFunction(const MachineFunction &MF);
46 :
47 0 : uint64_t getExplicitKernArgSize() const {
48 0 : return ExplicitKernArgSize;
49 : }
50 :
51 : unsigned getMaxKernArgAlign() const {
52 : return MaxKernArgAlign;
53 : }
54 :
55 0 : unsigned getLDSSize() const {
56 0 : return LDSSize;
57 : }
58 :
59 0 : bool isEntryFunction() const {
60 0 : return IsEntryFunction;
61 : }
62 :
63 0 : bool hasNoSignedZerosFPMath() const {
64 0 : return NoSignedZerosFPMath;
65 : }
66 :
67 0 : bool isMemoryBound() const {
68 0 : return MemoryBound;
69 : }
70 :
71 0 : bool needsWaveLimiter() const {
72 0 : return WaveLimiter;
73 : }
74 :
75 : unsigned allocateLDSGlobal(const DataLayout &DL, const GlobalValue &GV);
76 : };
77 :
78 : }
79 : #endif
|