blob: 6bb8f9d6ced14d3d378afdd784444f382052fca1 [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;
32
Tom Stellard75aadc22012-12-11 21:25:42 +000033public:
Tom Stellardc149dc02013-11-27 21:23:35 +000034
35 struct SpilledReg {
36 unsigned VGPR;
37 int Lane;
38 SpilledReg(unsigned R, int L) : VGPR (R), Lane (L) { }
39 SpilledReg() : VGPR(0), Lane(-1) { }
40 bool hasLane() { return Lane != -1;}
41 };
42
Tom Stellardc149dc02013-11-27 21:23:35 +000043 // SIMachineFunctionInfo definition
44
Tom Stellard75aadc22012-12-11 21:25:42 +000045 SIMachineFunctionInfo(const MachineFunction &MF);
Tom Stellardc5cf2f02014-08-21 20:40:54 +000046 SpilledReg getSpilledReg(MachineFunction *MF, unsigned FrameIndex,
47 unsigned SubIdx);
Christian Konig99ee0f42013-03-07 09:04:14 +000048 unsigned PSInputAddr;
Tom Stellardb02094e2014-07-21 15:45:01 +000049 unsigned NumUserSGPRs;
Tom Stellardc5cf2f02014-08-21 20:40:54 +000050 std::map<unsigned, unsigned> LaneVGPRs;
Tom Stellard96468902014-09-24 01:33:17 +000051 unsigned LDSWaveSpillSize;
52 bool hasCalculatedTID() const { return TIDReg != AMDGPU::NoRegister; };
53 unsigned getTIDReg() const { return TIDReg; };
54 void setTIDReg(unsigned Reg) { TIDReg = Reg; }
55
56 unsigned getMaximumWorkGroupSize(const MachineFunction &MF) const;
Tom Stellard75aadc22012-12-11 21:25:42 +000057};
58
59} // End namespace llvm
60
61
Benjamin Kramera7c40ef2014-08-13 16:26:38 +000062#endif