blob: aefdea9f271998f83ac20c934f6b4bcd60de8c03 [file] [log] [blame]
Tom Stellard75aadc22012-12-11 21:25:42 +00001//===- SIMachineFunctionInfo.h - SIMachineFunctionInfo interface -*- 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/// \file
11//
12//===----------------------------------------------------------------------===//
13
14
Benjamin Kramera7c40ef2014-08-13 16:26:38 +000015#ifndef LLVM_LIB_TARGET_R600_SIMACHINEFUNCTIONINFO_H
16#define LLVM_LIB_TARGET_R600_SIMACHINEFUNCTIONINFO_H
Tom Stellard75aadc22012-12-11 21:25:42 +000017
Vincent Lejeuneace6f732013-04-01 21:47:53 +000018#include "AMDGPUMachineFunction.h"
Tom Stellard96468902014-09-24 01:33:17 +000019#include "SIRegisterInfo.h"
Tom Stellardc149dc02013-11-27 21:23:35 +000020#include <map>
Tom Stellard75aadc22012-12-11 21:25:42 +000021
22namespace llvm {
23
Tom Stellardc149dc02013-11-27 21:23:35 +000024class MachineRegisterInfo;
25
Tom Stellard75aadc22012-12-11 21:25:42 +000026/// This class keeps track of the SPI_SP_INPUT_ADDR config register, which
27/// tells the hardware which interpolation parameters to load.
Vincent Lejeuneace6f732013-04-01 21:47:53 +000028class SIMachineFunctionInfo : public AMDGPUMachineFunction {
Craig Topper5656db42014-04-29 07:57:24 +000029 void anchor() override;
Tom Stellard96468902014-09-24 01:33:17 +000030
31 unsigned TIDReg;
Matt Arsenault5b22dfa2015-11-05 05:27:10 +000032 bool HasSpilledSGPRs;
Tom Stellard42fb60e2015-01-14 15:42:31 +000033 bool HasSpilledVGPRs;
Tom Stellard96468902014-09-24 01:33:17 +000034
Tom Stellard75aadc22012-12-11 21:25:42 +000035public:
Tom Stellardc149dc02013-11-27 21:23:35 +000036
37 struct SpilledReg {
38 unsigned VGPR;
39 int Lane;
40 SpilledReg(unsigned R, int L) : VGPR (R), Lane (L) { }
41 SpilledReg() : VGPR(0), Lane(-1) { }
42 bool hasLane() { return Lane != -1;}
43 };
44
Tom Stellardc149dc02013-11-27 21:23:35 +000045 // SIMachineFunctionInfo definition
46
Tom Stellard75aadc22012-12-11 21:25:42 +000047 SIMachineFunctionInfo(const MachineFunction &MF);
Tom Stellardc5cf2f02014-08-21 20:40:54 +000048 SpilledReg getSpilledReg(MachineFunction *MF, unsigned FrameIndex,
49 unsigned SubIdx);
Christian Konig99ee0f42013-03-07 09:04:14 +000050 unsigned PSInputAddr;
Tom Stellardb02094e2014-07-21 15:45:01 +000051 unsigned NumUserSGPRs;
Tom Stellardc5cf2f02014-08-21 20:40:54 +000052 std::map<unsigned, unsigned> LaneVGPRs;
Tom Stellard96468902014-09-24 01:33:17 +000053 unsigned LDSWaveSpillSize;
Tom Stellarde99fb652015-01-20 19:33:04 +000054 unsigned ScratchOffsetReg;
Tom Stellard96468902014-09-24 01:33:17 +000055 bool hasCalculatedTID() const { return TIDReg != AMDGPU::NoRegister; };
56 unsigned getTIDReg() const { return TIDReg; };
57 void setTIDReg(unsigned Reg) { TIDReg = Reg; }
Matt Arsenault5b22dfa2015-11-05 05:27:10 +000058
59 bool hasSpilledSGPRs() const {
60 return HasSpilledSGPRs;
61 }
62
63 void setHasSpilledSGPRs(bool Spill = true) {
64 HasSpilledSGPRs = Spill;
65 }
66
67 bool hasSpilledVGPRs() const {
68 return HasSpilledVGPRs;
69 }
70
71 void setHasSpilledVGPRs(bool Spill = true) {
72 HasSpilledVGPRs = Spill;
73 }
Tom Stellard96468902014-09-24 01:33:17 +000074
75 unsigned getMaximumWorkGroupSize(const MachineFunction &MF) const;
Tom Stellard75aadc22012-12-11 21:25:42 +000076};
77
78} // End namespace llvm
79
80
Benjamin Kramera7c40ef2014-08-13 16:26:38 +000081#endif