blob: bcc0e77a545c99cfb09a5077c7cd7b0894f51232 [file] [log] [blame]
Matt Arsenault6b6a2c32016-03-11 08:00:27 +00001//===-- AMDGPUMachineFunctionInfo.h -------------------------------*- C++ -*-=//
Vincent Lejeuneace6f732013-04-01 21:47:53 +00002//
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//===----------------------------------------------------------------------===//
Vincent Lejeuneace6f732013-04-01 21:47:53 +00009
Matt Arsenault6b6a2c32016-03-11 08:00:27 +000010#ifndef LLVM_LIB_TARGET_AMDGPU_AMDGPUMACHINEFUNCTION_H
11#define LLVM_LIB_TARGET_AMDGPU_AMDGPUMACHINEFUNCTION_H
Vincent Lejeuneace6f732013-04-01 21:47:53 +000012
Matt Arsenault52ef4012016-07-26 16:45:58 +000013#include "llvm/ADT/DenseMap.h"
Chandler Carruth6bda14b2017-06-06 11:49:48 +000014#include "llvm/CodeGen/MachineFunction.h"
Vincent Lejeuneace6f732013-04-01 21:47:53 +000015
16namespace llvm {
17
18class AMDGPUMachineFunction : public MachineFunctionInfo {
Matt Arsenault52ef4012016-07-26 16:45:58 +000019 /// A map to keep track of local memory objects and their offsets within the
20 /// local memory space.
21 SmallDenseMap<const GlobalValue *, unsigned, 4> LocalMemoryObjects;
22
Matt Arsenault1ea04022018-05-29 19:35:00 +000023protected:
Matt Arsenaulte935f052016-06-18 05:15:53 +000024 uint64_t KernArgSize;
25 unsigned MaxKernArgAlign;
26
Matt Arsenault52ef4012016-07-26 16:45:58 +000027 /// Number of bytes in the LDS that are being used.
28 unsigned LDSSize;
29
30 // FIXME: This should probably be removed.
31 /// Start of implicit kernel args
32 unsigned ABIArgOffset;
33
Hiroshi Inoueae179002018-04-14 08:59:00 +000034 // Kernels + shaders. i.e. functions called by the driver and not called
Matt Arsenault1074cb52017-03-30 23:58:04 +000035 // by other functions.
36 bool IsEntryFunction;
37
Matt Arsenault3cb39042017-02-27 19:35:42 +000038 bool NoSignedZerosFPMath;
Matt Arsenault762af962014-07-13 03:06:39 +000039
Stanislav Mekhanoshin1c538422018-05-25 17:25:12 +000040 // Function may be memory bound.
41 bool MemoryBound;
42
43 // Kernel may need limited waves per EU for better performance.
44 bool WaveLimiter;
45
Vincent Lejeuneace6f732013-04-01 21:47:53 +000046public:
47 AMDGPUMachineFunction(const MachineFunction &MF);
Matt Arsenaulte935f052016-06-18 05:15:53 +000048
49 uint64_t allocateKernArg(uint64_t Size, unsigned Align) {
50 assert(isPowerOf2_32(Align));
51 KernArgSize = alignTo(KernArgSize, Align);
52
53 uint64_t Result = KernArgSize;
54 KernArgSize += Size;
55
56 MaxKernArgAlign = std::max(Align, MaxKernArgAlign);
57 return Result;
58 }
59
Matt Arsenault52ef4012016-07-26 16:45:58 +000060 uint64_t getKernArgSize() const {
61 return KernArgSize;
62 }
Matt Arsenault762af962014-07-13 03:06:39 +000063
Tom Stellard175959e2016-12-06 21:53:10 +000064 unsigned getMaxKernArgAlign() const {
65 return MaxKernArgAlign;
66 }
67
Matt Arsenault52ef4012016-07-26 16:45:58 +000068 void setABIArgOffset(unsigned NewOffset) {
69 ABIArgOffset = NewOffset;
70 }
Jan Veselye5121f32014-10-14 20:05:26 +000071
Matt Arsenault52ef4012016-07-26 16:45:58 +000072 unsigned getABIArgOffset() const {
73 return ABIArgOffset;
74 }
Tom Stellard1e1b05d2015-11-06 11:45:14 +000075
Matt Arsenault52ef4012016-07-26 16:45:58 +000076 unsigned getLDSSize() const {
77 return LDSSize;
78 }
79
Matt Arsenault1074cb52017-03-30 23:58:04 +000080 bool isEntryFunction() const {
81 return IsEntryFunction;
Matt Arsenault52ef4012016-07-26 16:45:58 +000082 }
83
Matt Arsenault3cb39042017-02-27 19:35:42 +000084 bool hasNoSignedZerosFPMath() const {
85 return NoSignedZerosFPMath;
86 }
87
Stanislav Mekhanoshin1c538422018-05-25 17:25:12 +000088 bool isMemoryBound() const {
89 return MemoryBound;
90 }
91
92 bool needsWaveLimiter() const {
93 return WaveLimiter;
94 }
95
Matt Arsenault52ef4012016-07-26 16:45:58 +000096 unsigned allocateLDSGlobal(const DataLayout &DL, const GlobalValue &GV);
Vincent Lejeuneace6f732013-04-01 21:47:53 +000097};
98
Alexander Kornienkof00654e2015-06-23 09:49:53 +000099}
Benjamin Kramera7c40ef2014-08-13 16:26:38 +0000100#endif