blob: d9c0ed91c526b41f8a05210eeb659e23144ff876 [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
Matt Arsenault75e71922018-06-28 10:18:55 +000018class AMDGPUSubtarget;
19
Vincent Lejeuneace6f732013-04-01 21:47:53 +000020class AMDGPUMachineFunction : public MachineFunctionInfo {
Matt Arsenault52ef4012016-07-26 16:45:58 +000021 /// 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
Matt Arsenault1ea04022018-05-29 19:35:00 +000025protected:
Matt Arsenault75e71922018-06-28 10:18:55 +000026 uint64_t ExplicitKernArgSize;
Matt Arsenaulte935f052016-06-18 05:15:53 +000027 unsigned MaxKernArgAlign;
28
Matt Arsenault52ef4012016-07-26 16:45:58 +000029 /// Number of bytes in the LDS that are being used.
30 unsigned LDSSize;
31
Hiroshi Inoueae179002018-04-14 08:59:00 +000032 // Kernels + shaders. i.e. functions called by the driver and not called
Matt Arsenault1074cb52017-03-30 23:58:04 +000033 // by other functions.
34 bool IsEntryFunction;
35
Matt Arsenault3cb39042017-02-27 19:35:42 +000036 bool NoSignedZerosFPMath;
Matt Arsenault762af962014-07-13 03:06:39 +000037
Stanislav Mekhanoshin1c538422018-05-25 17:25:12 +000038 // Function may be memory bound.
39 bool MemoryBound;
40
41 // Kernel may need limited waves per EU for better performance.
42 bool WaveLimiter;
43
Vincent Lejeuneace6f732013-04-01 21:47:53 +000044public:
45 AMDGPUMachineFunction(const MachineFunction &MF);
Matt Arsenaulte935f052016-06-18 05:15:53 +000046
47 uint64_t allocateKernArg(uint64_t Size, unsigned Align) {
48 assert(isPowerOf2_32(Align));
Matt Arsenault75e71922018-06-28 10:18:55 +000049 ExplicitKernArgSize = alignTo(ExplicitKernArgSize, Align);
Matt Arsenaulte935f052016-06-18 05:15:53 +000050
Matt Arsenault75e71922018-06-28 10:18:55 +000051 uint64_t Result = ExplicitKernArgSize;
52 ExplicitKernArgSize += Size;
Matt Arsenaulte935f052016-06-18 05:15:53 +000053
54 MaxKernArgAlign = std::max(Align, MaxKernArgAlign);
55 return Result;
56 }
57
Matt Arsenault75e71922018-06-28 10:18:55 +000058 uint64_t getExplicitKernArgSize() const {
59 return ExplicitKernArgSize;
Matt Arsenault52ef4012016-07-26 16:45:58 +000060 }
Matt Arsenault762af962014-07-13 03:06:39 +000061
Tom Stellard175959e2016-12-06 21:53:10 +000062 unsigned getMaxKernArgAlign() const {
63 return MaxKernArgAlign;
64 }
65
Matt Arsenault52ef4012016-07-26 16:45:58 +000066 unsigned getLDSSize() const {
67 return LDSSize;
68 }
69
Matt Arsenault1074cb52017-03-30 23:58:04 +000070 bool isEntryFunction() const {
71 return IsEntryFunction;
Matt Arsenault52ef4012016-07-26 16:45:58 +000072 }
73
Matt Arsenault3cb39042017-02-27 19:35:42 +000074 bool hasNoSignedZerosFPMath() const {
75 return NoSignedZerosFPMath;
76 }
77
Stanislav Mekhanoshin1c538422018-05-25 17:25:12 +000078 bool isMemoryBound() const {
79 return MemoryBound;
80 }
81
82 bool needsWaveLimiter() const {
83 return WaveLimiter;
84 }
85
Matt Arsenault52ef4012016-07-26 16:45:58 +000086 unsigned allocateLDSGlobal(const DataLayout &DL, const GlobalValue &GV);
Vincent Lejeuneace6f732013-04-01 21:47:53 +000087};
88
Alexander Kornienkof00654e2015-06-23 09:49:53 +000089}
Benjamin Kramera7c40ef2014-08-13 16:26:38 +000090#endif