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