| Matt Arsenault | 0c90e95 | 2015-11-06 18:17:45 +0000 | [diff] [blame] | 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 { | 
| Eugene Zelenko | 2bc2f33 | 2016-12-09 22:06:55 +0000 | [diff] [blame] | 16 |  | 
| Matt Arsenault | 57bc432 | 2016-08-31 21:52:21 +0000 | [diff] [blame] | 17 | class SIInstrInfo; | 
|  | 18 | class SIMachineFunctionInfo; | 
|  | 19 | class SIRegisterInfo; | 
| Tom Stellard | 5bfbae5 | 2018-07-11 20:59:01 +0000 | [diff] [blame] | 20 | class GCNSubtarget; | 
| Matt Arsenault | 0c90e95 | 2015-11-06 18:17:45 +0000 | [diff] [blame] | 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) {} | 
| Eugene Zelenko | 2bc2f33 | 2016-12-09 22:06:55 +0000 | [diff] [blame] | 27 | ~SIFrameLowering() override = default; | 
| Matt Arsenault | 0c90e95 | 2015-11-06 18:17:45 +0000 | [diff] [blame] | 28 |  | 
| Matt Arsenault | 2b1f9aa | 2017-05-17 21:56:25 +0000 | [diff] [blame] | 29 | void emitEntryFunctionPrologue(MachineFunction &MF, | 
|  | 30 | MachineBasicBlock &MBB) const; | 
| Matt Arsenault | 0e3d389 | 2015-11-30 21:15:53 +0000 | [diff] [blame] | 31 | void emitPrologue(MachineFunction &MF, | 
|  | 32 | MachineBasicBlock &MBB) const override; | 
| Matt Arsenault | 43e92fe | 2016-06-24 06:30:11 +0000 | [diff] [blame] | 33 | void emitEpilogue(MachineFunction &MF, | 
|  | 34 | MachineBasicBlock &MBB) const override; | 
| Konstantin Zhuravlyov | ffdb00e | 2017-03-10 19:39:07 +0000 | [diff] [blame] | 35 | int getFrameIndexReference(const MachineFunction &MF, int FI, | 
|  | 36 | unsigned &FrameReg) const override; | 
| Matt Arsenault | 0e3d389 | 2015-11-30 21:15:53 +0000 | [diff] [blame] | 37 |  | 
| Matt Arsenault | ecb43ef | 2017-09-13 23:47:01 +0000 | [diff] [blame] | 38 | void determineCalleeSaves(MachineFunction &MF, BitVector &SavedRegs, | 
|  | 39 | RegScavenger *RS = nullptr) const override; | 
|  | 40 |  | 
| Matt Arsenault | 0c90e95 | 2015-11-06 18:17:45 +0000 | [diff] [blame] | 41 | void processFunctionBeforeFrameFinalized( | 
|  | 42 | MachineFunction &MF, | 
|  | 43 | RegScavenger *RS = nullptr) const override; | 
| Konstantin Zhuravlyov | f2f3d14 | 2016-06-25 03:11:28 +0000 | [diff] [blame] | 44 |  | 
| Matt Arsenault | b62a4eb | 2017-08-01 19:54:18 +0000 | [diff] [blame] | 45 | MachineBasicBlock::iterator | 
|  | 46 | eliminateCallFramePseudoInstr(MachineFunction &MF, | 
|  | 47 | MachineBasicBlock &MBB, | 
|  | 48 | MachineBasicBlock::iterator MI) const override; | 
|  | 49 |  | 
| Konstantin Zhuravlyov | f2f3d14 | 2016-06-25 03:11:28 +0000 | [diff] [blame] | 50 | private: | 
| Tom Stellard | 5bfbae5 | 2018-07-11 20:59:01 +0000 | [diff] [blame] | 51 | void emitFlatScratchInit(const GCNSubtarget &ST, | 
| Matt Arsenault | 57bc432 | 2016-08-31 21:52:21 +0000 | [diff] [blame] | 52 | MachineFunction &MF, | 
|  | 53 | MachineBasicBlock &MBB) const; | 
|  | 54 |  | 
|  | 55 | unsigned getReservedPrivateSegmentBufferReg( | 
| Tom Stellard | 5bfbae5 | 2018-07-11 20:59:01 +0000 | [diff] [blame] | 56 | const GCNSubtarget &ST, | 
| Matt Arsenault | 57bc432 | 2016-08-31 21:52:21 +0000 | [diff] [blame] | 57 | const SIInstrInfo *TII, | 
|  | 58 | const SIRegisterInfo *TRI, | 
|  | 59 | SIMachineFunctionInfo *MFI, | 
|  | 60 | MachineFunction &MF) const; | 
|  | 61 |  | 
| Matt Arsenault | 36c3122 | 2017-04-25 23:40:57 +0000 | [diff] [blame] | 62 | std::pair<unsigned, unsigned> getReservedPrivateSegmentWaveByteOffsetReg( | 
| Tom Stellard | 5bfbae5 | 2018-07-11 20:59:01 +0000 | [diff] [blame] | 63 | const GCNSubtarget &ST, | 
| Matt Arsenault | 57bc432 | 2016-08-31 21:52:21 +0000 | [diff] [blame] | 64 | const SIInstrInfo *TII, | 
|  | 65 | const SIRegisterInfo *TRI, | 
|  | 66 | SIMachineFunctionInfo *MFI, | 
|  | 67 | MachineFunction &MF) const; | 
|  | 68 |  | 
| Adrian Prantl | 5f8f34e4 | 2018-05-01 15:54:18 +0000 | [diff] [blame] | 69 | /// Emits debugger prologue. | 
| Konstantin Zhuravlyov | f2f3d14 | 2016-06-25 03:11:28 +0000 | [diff] [blame] | 70 | void emitDebuggerPrologue(MachineFunction &MF, MachineBasicBlock &MBB) const; | 
| Matt Arsenault | f28683c | 2017-06-26 17:53:59 +0000 | [diff] [blame] | 71 |  | 
| Tim Renouf | 1322915 | 2017-09-29 09:49:35 +0000 | [diff] [blame] | 72 | // Emit scratch setup code for AMDPAL or Mesa, assuming ResourceRegUsed is set. | 
| Tom Stellard | 5bfbae5 | 2018-07-11 20:59:01 +0000 | [diff] [blame] | 73 | void emitEntryFunctionScratchSetup(const GCNSubtarget &ST, MachineFunction &MF, | 
| Tim Renouf | 1322915 | 2017-09-29 09:49:35 +0000 | [diff] [blame] | 74 | MachineBasicBlock &MBB, SIMachineFunctionInfo *MFI, | 
|  | 75 | MachineBasicBlock::iterator I, unsigned PreloadedPrivateBufferReg, | 
|  | 76 | unsigned ScratchRsrcReg) const; | 
|  | 77 |  | 
| Matt Arsenault | f28683c | 2017-06-26 17:53:59 +0000 | [diff] [blame] | 78 | public: | 
|  | 79 | bool hasFP(const MachineFunction &MF) const override; | 
|  | 80 | bool hasSP(const MachineFunction &MF) const; | 
| Matt Arsenault | 0c90e95 | 2015-11-06 18:17:45 +0000 | [diff] [blame] | 81 | }; | 
|  | 82 |  | 
| Eugene Zelenko | 2bc2f33 | 2016-12-09 22:06:55 +0000 | [diff] [blame] | 83 | } // end namespace llvm | 
| Matt Arsenault | 0c90e95 | 2015-11-06 18:17:45 +0000 | [diff] [blame] | 84 |  | 
| Eugene Zelenko | 2bc2f33 | 2016-12-09 22:06:55 +0000 | [diff] [blame] | 85 | #endif // LLVM_LIB_TARGET_AMDGPU_SIFRAMELOWERING_H |