blob: 71852717d7e68e2f0cebb9e9314508cd0ddfffd5 [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;
Tom Stellard42fb60e2015-01-14 15:42:31 +000032 bool HasSpilledVGPRs;
Tom Stellard96468902014-09-24 01:33:17 +000033
Tom Stellard75aadc22012-12-11 21:25:42 +000034public:
Tom Stellardc149dc02013-11-27 21:23:35 +000035
36 struct SpilledReg {
37 unsigned VGPR;
38 int Lane;
39 SpilledReg(unsigned R, int L) : VGPR (R), Lane (L) { }
40 SpilledReg() : VGPR(0), Lane(-1) { }
41 bool hasLane() { return Lane != -1;}
42 };
43
Tom Stellardc149dc02013-11-27 21:23:35 +000044 // SIMachineFunctionInfo definition
45
Tom Stellard75aadc22012-12-11 21:25:42 +000046 SIMachineFunctionInfo(const MachineFunction &MF);
Tom Stellardc5cf2f02014-08-21 20:40:54 +000047 SpilledReg getSpilledReg(MachineFunction *MF, unsigned FrameIndex,
48 unsigned SubIdx);
Christian Konig99ee0f42013-03-07 09:04:14 +000049 unsigned PSInputAddr;
Tom Stellardb02094e2014-07-21 15:45:01 +000050 unsigned NumUserSGPRs;
Tom Stellardc5cf2f02014-08-21 20:40:54 +000051 std::map<unsigned, unsigned> LaneVGPRs;
Tom Stellard96468902014-09-24 01:33:17 +000052 unsigned LDSWaveSpillSize;
53 bool hasCalculatedTID() const { return TIDReg != AMDGPU::NoRegister; };
54 unsigned getTIDReg() const { return TIDReg; };
55 void setTIDReg(unsigned Reg) { TIDReg = Reg; }
Tom Stellard42fb60e2015-01-14 15:42:31 +000056 bool hasSpilledVGPRs() const { return HasSpilledVGPRs; }
57 void setHasSpilledVGPRs(bool Spill = true) { HasSpilledVGPRs = Spill; }
Tom Stellard96468902014-09-24 01:33:17 +000058
59 unsigned getMaximumWorkGroupSize(const MachineFunction &MF) const;
Tom Stellard75aadc22012-12-11 21:25:42 +000060};
61
62} // End namespace llvm
63
64
Benjamin Kramera7c40ef2014-08-13 16:26:38 +000065#endif