1 //===--------------------- 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 15 namespace llvm { 16 17 class SIInstrInfo; 18 class SIMachineFunctionInfo; 19 class SIRegisterInfo; 20 class SISubtarget; 21 22 class SIFrameLowering final : public AMDGPUFrameLowering { 23 public: 24 SIFrameLowering(StackDirection D, unsigned StackAl, int LAO, 25 unsigned TransAl = 1) : 26 AMDGPUFrameLowering(D, StackAl, LAO, TransAl) {} 27 ~SIFrameLowering() override = default; 28 29 void emitPrologue(MachineFunction &MF, 30 MachineBasicBlock &MBB) const override; 31 void emitEpilogue(MachineFunction &MF, 32 MachineBasicBlock &MBB) const override; 33 34 void processFunctionBeforeFrameFinalized( 35 MachineFunction &MF, 36 RegScavenger *RS = nullptr) const override; 37 38 private: 39 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 58 /// \brief Emits debugger prologue. 59 void emitDebuggerPrologue(MachineFunction &MF, MachineBasicBlock &MBB) const; 60 }; 61 62 } // end namespace llvm 63 64 #endif // LLVM_LIB_TARGET_AMDGPU_SIFRAMELOWERING_H 65