• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
getExplicitKernArgSize()47   uint64_t getExplicitKernArgSize() const {
48     return ExplicitKernArgSize;
49   }
50 
getMaxKernArgAlign()51   unsigned getMaxKernArgAlign() const {
52     return MaxKernArgAlign;
53   }
54 
getLDSSize()55   unsigned getLDSSize() const {
56     return LDSSize;
57   }
58 
isEntryFunction()59   bool isEntryFunction() const {
60     return IsEntryFunction;
61   }
62 
hasNoSignedZerosFPMath()63   bool hasNoSignedZerosFPMath() const {
64     return NoSignedZerosFPMath;
65   }
66 
isMemoryBound()67   bool isMemoryBound() const {
68     return MemoryBound;
69   }
70 
needsWaveLimiter()71   bool needsWaveLimiter() const {
72     return WaveLimiter;
73   }
74 
75   unsigned allocateLDSGlobal(const DataLayout &DL, const GlobalValue &GV);
76 };
77 
78 }
79 #endif
80