1 //===-- AMDGPUMachineFunctionInfo.h -------------------------------*- C++ -*-=// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef LLVM_LIB_TARGET_AMDGPU_AMDGPUMACHINEFUNCTION_H 10 #define LLVM_LIB_TARGET_AMDGPU_AMDGPUMACHINEFUNCTION_H 11 12 #include "llvm/ADT/DenseMap.h" 13 #include "llvm/CodeGen/MachineFunction.h" 14 #include "Utils/AMDGPUBaseInfo.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 = 0; // Cache for this. 27 Align MaxKernArgAlign; // Cache for this. 28 29 /// Number of bytes in the LDS that are being used. 30 unsigned LDSSize = 0; 31 32 // State of MODE register, assumed FP mode. 33 AMDGPU::SIModeRegisterDefaults Mode; 34 35 // Kernels + shaders. i.e. functions called by the driver and not called 36 // by other functions. 37 bool IsEntryFunction = false; 38 39 bool NoSignedZerosFPMath = false; 40 41 // Function may be memory bound. 42 bool MemoryBound = false; 43 44 // Kernel may need limited waves per EU for better performance. 45 bool WaveLimiter = false; 46 47 public: 48 AMDGPUMachineFunction(const MachineFunction &MF); 49 50 uint64_t getExplicitKernArgSize() const { 51 return ExplicitKernArgSize; 52 } 53 54 unsigned getMaxKernArgAlign() const { return MaxKernArgAlign.value(); } 55 56 unsigned getLDSSize() const { 57 return LDSSize; 58 } 59 60 AMDGPU::SIModeRegisterDefaults getMode() const { 61 return Mode; 62 } 63 64 bool isEntryFunction() const { 65 return IsEntryFunction; 66 } 67 68 bool hasNoSignedZerosFPMath() const { 69 return NoSignedZerosFPMath; 70 } 71 72 bool isMemoryBound() const { 73 return MemoryBound; 74 } 75 76 bool needsWaveLimiter() const { 77 return WaveLimiter; 78 } 79 80 unsigned allocateLDSGlobal(const DataLayout &DL, const GlobalVariable &GV); 81 }; 82 83 } 84 #endif 85