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