blob: 7657b4e03864db8ba62ec7042cacb515b0170c25 [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 Arsenault57bc4322016-08-31 21:52:21 +000039 void emitFlatScratchInit(const SIInstrInfo *TII,
40 const SIRegisterInfo* TRI,
41 MachineFunction &MF,
42 MachineBasicBlock &MBB) const;
43
44 unsigned getReservedPrivateSegmentBufferReg(
45 const SISubtarget &ST,
46 const SIInstrInfo *TII,
47 const SIRegisterInfo *TRI,
48 SIMachineFunctionInfo *MFI,
49 MachineFunction &MF) const;
50
51 unsigned getReservedPrivateSegmentWaveByteOffsetReg(
52 const SISubtarget &ST,
53 const SIInstrInfo *TII,
54 const SIRegisterInfo *TRI,
55 SIMachineFunctionInfo *MFI,
56 MachineFunction &MF) const;
57
Konstantin Zhuravlyovf2f3d142016-06-25 03:11:28 +000058 /// \brief Emits debugger prologue.
59 void emitDebuggerPrologue(MachineFunction &MF, MachineBasicBlock &MBB) const;
Matt Arsenault0c90e952015-11-06 18:17:45 +000060};
61
Eugene Zelenko2bc2f332016-12-09 22:06:55 +000062} // end namespace llvm
Matt Arsenault0c90e952015-11-06 18:17:45 +000063
Eugene Zelenko2bc2f332016-12-09 22:06:55 +000064#endif // LLVM_LIB_TARGET_AMDGPU_SIFRAMELOWERING_H