LLVM  6.0.0svn
WebAssemblyFrameLowering.h
Go to the documentation of this file.
1 // WebAssemblyFrameLowering.h - TargetFrameLowering for WebAssembly -*- 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 /// \file
11 /// \brief This class implements WebAssembly-specific bits of
12 /// TargetFrameLowering class.
13 ///
14 //===----------------------------------------------------------------------===//
15 
16 #ifndef LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYFRAMELOWERING_H
17 #define LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYFRAMELOWERING_H
18 
20 
21 namespace llvm {
22 class MachineFrameInfo;
23 
25  public:
26  /// Size of the red zone for the user stack (leaf functions can use this much
27  /// space below the stack pointer without writing it back to memory).
28  // TODO: (ABI) Revisit and decide how large it should be.
29  static const size_t RedZoneSize = 128;
30 
32  : TargetFrameLowering(StackGrowsDown, /*StackAlignment=*/16,
33  /*LocalAreaOffset=*/0,
34  /*TransientStackAlignment=*/16,
35  /*StackRealignable=*/true) {}
36 
39  MachineBasicBlock::iterator I) const override;
40 
41  /// These methods insert prolog and epilog code into the function.
42  void emitPrologue(MachineFunction &MF, MachineBasicBlock &MBB) const override;
43  void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const override;
44 
45  bool hasFP(const MachineFunction &MF) const override;
46  bool hasReservedCallFrame(const MachineFunction &MF) const override;
47 
48  private:
49  bool hasBP(const MachineFunction &MF) const;
50  bool needsSP(const MachineFunction &MF, const MachineFrameInfo &MFI) const;
51  bool needsSPWriteback(const MachineFunction &MF,
52  const MachineFrameInfo &MFI) const;
53 };
54 
55 } // end namespace llvm
56 
57 #endif
void emitPrologue(MachineFunction &MF, MachineBasicBlock &MBB) const override
These methods insert prolog and epilog code into the function.
Compute iterated dominance frontiers using a linear time algorithm.
Definition: AllocatorList.h:24
bool hasFP(const MachineFunction &MF) const override
Return true if the specified function should have a dedicated frame pointer register.
MachineBasicBlock::iterator eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB, MachineBasicBlock::iterator I) const override
This method is called during prolog/epilog code insertion to eliminate call frame setup and destroy p...
The MachineFrameInfo class represents an abstract stack frame until prolog/epilog code is inserted...
void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const override
Information about stack frame layout on the target.
Basic Alias true
static const size_t RedZoneSize
Size of the red zone for the user stack (leaf functions can use this much space below the stack point...
#define I(x, y, z)
Definition: MD5.cpp:58
bool hasReservedCallFrame(const MachineFunction &MF) const override
Under normal circumstances, when a frame pointer is not required, we reserve argument space for call ...