LLVM  4.0.0
SIFrameLowering.h
Go to the documentation of this file.
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 
30  MachineBasicBlock &MBB) const override;
32  MachineBasicBlock &MBB) const override;
33 
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,
49  MachineFunction &MF) const;
50 
51  unsigned getReservedPrivateSegmentWaveByteOffsetReg(
52  const SISubtarget &ST,
53  const SIInstrInfo *TII,
54  const SIRegisterInfo *TRI,
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
~SIFrameLowering() override=default
void processFunctionBeforeFrameFinalized(MachineFunction &MF, RegScavenger *RS=nullptr) const override
processFunctionBeforeFrameFinalized - This method is called immediately before the specified function...
void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const override
const HexagonInstrInfo * TII
static GCRegistry::Add< StatepointGC > D("statepoint-example","an example strategy for statepoint")
Interface to describe a layout of a stack frame on an AMDGPU target.
MachineBasicBlock * MBB
void emitPrologue(MachineFunction &MF, MachineBasicBlock &MBB) const override
emitProlog/emitEpilog - These methods insert prolog and epilog code into the function.
SIFrameLowering(StackDirection D, unsigned StackAl, int LAO, unsigned TransAl=1)
This class keeps track of the SPI_SP_INPUT_ADDR config register, which tells the hardware which inter...
Information about the stack frame layout on the AMDGPU targets.