]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm-project/llvm/lib/Target/AMDGPU/AMDGPUMachineFunction.h
THIS BRANCH IS OBSOLETE, PLEASE READ:
[FreeBSD/FreeBSD.git] / contrib / llvm-project / llvm / lib / Target / AMDGPU / AMDGPUMachineFunction.h
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