blob: b52a0204d63a3a1fe5aa09c01a9db0acbb48b35a [file] [log] [blame]
Matt Arsenault0c90e952015-11-06 18:17:45 +00001//===--------------------- SIFrameLowering.h --------------------*- 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#ifndef LLVM_LIB_TARGET_AMDGPU_SIFRAMELOWERING_H
11#define LLVM_LIB_TARGET_AMDGPU_SIFRAMELOWERING_H
12
13#include "AMDGPUFrameLowering.h"
14
15namespace llvm {
Eugene Zelenko2bc2f332016-12-09 22:06:55 +000016
Matt Arsenault57bc4322016-08-31 21:52:21 +000017class SIInstrInfo;
18class SIMachineFunctionInfo;
19class SIRegisterInfo;
20class SISubtarget;
Matt Arsenault0c90e952015-11-06 18:17:45 +000021
22class SIFrameLowering final : public AMDGPUFrameLowering {
23public:
24 SIFrameLowering(StackDirection D, unsigned StackAl, int LAO,
25 unsigned TransAl = 1) :
26 AMDGPUFrameLowering(D, StackAl, LAO, TransAl) {}
Eugene Zelenko2bc2f332016-12-09 22:06:55 +000027 ~SIFrameLowering() override = default;
Matt Arsenault0c90e952015-11-06 18:17:45 +000028
Matt Arsenault0e3d3892015-11-30 21:15:53 +000029 void emitPrologue(MachineFunction &MF,
30 MachineBasicBlock &MBB) const override;
Matt Arsenault43e92fe2016-06-24 06:30:11 +000031 void emitEpilogue(MachineFunction &MF,
32 MachineBasicBlock &MBB) const override;
Matt Arsenault0e3d3892015-11-30 21:15:53 +000033
Matt Arsenault0c90e952015-11-06 18:17:45 +000034 void processFunctionBeforeFrameFinalized(
35 MachineFunction &MF,
36 RegScavenger *RS = nullptr) const override;
Konstantin Zhuravlyovf2f3d142016-06-25 03:11:28 +000037
38private:
Matt Arsenaulte823d922017-02-18 18:29:53 +000039 void emitFlatScratchInit(const SISubtarget &ST,
Matt Arsenault57bc4322016-08-31 21:52:21 +000040 MachineFunction &MF,
41 MachineBasicBlock &MBB) const;
42
43 unsigned getReservedPrivateSegmentBufferReg(
44 const SISubtarget &ST,
45 const SIInstrInfo *TII,
46 const SIRegisterInfo *TRI,
47 SIMachineFunctionInfo *MFI,
48 MachineFunction &MF) const;
49
50 unsigned getReservedPrivateSegmentWaveByteOffsetReg(
51 const SISubtarget &ST,
52 const SIInstrInfo *TII,
53 const SIRegisterInfo *TRI,
54 SIMachineFunctionInfo *MFI,
55 MachineFunction &MF) const;
56
Konstantin Zhuravlyovf2f3d142016-06-25 03:11:28 +000057 /// \brief Emits debugger prologue.
58 void emitDebuggerPrologue(MachineFunction &MF, MachineBasicBlock &MBB) const;
Matt Arsenault0c90e952015-11-06 18:17:45 +000059};
60
Eugene Zelenko2bc2f332016-12-09 22:06:55 +000061} // end namespace llvm
Matt Arsenault0c90e952015-11-06 18:17:45 +000062
Eugene Zelenko2bc2f332016-12-09 22:06:55 +000063#endif // LLVM_LIB_TARGET_AMDGPU_SIFRAMELOWERING_H