WebAssemblyFrameLowering.h revision 285163
1285163Sdim// WebAssemblyFrameLowering.h - TargetFrameLowering for WebAssembly -*- C++ -*-/
2285163Sdim//
3285163Sdim//                     The LLVM Compiler Infrastructure
4285163Sdim//
5285163Sdim// This file is distributed under the University of Illinois Open Source
6285163Sdim// License. See LICENSE.TXT for details.
7285163Sdim//
8285163Sdim//===----------------------------------------------------------------------===//
9285163Sdim///
10285163Sdim/// \file
11285163Sdim/// \brief This class implements WebAssembly-specific bits of
12285163Sdim/// TargetFrameLowering class.
13285163Sdim///
14285163Sdim//===----------------------------------------------------------------------===//
15285163Sdim
16285163Sdim#ifndef LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYFRAMELOWERING_H
17285163Sdim#define LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYFRAMELOWERING_H
18285163Sdim
19285163Sdim#include "llvm/Target/TargetFrameLowering.h"
20285163Sdim
21285163Sdimnamespace llvm {
22285163Sdim
23285163Sdimclass WebAssemblyFrameLowering final : public TargetFrameLowering {
24285163Sdimpublic:
25285163Sdim  WebAssemblyFrameLowering()
26285163Sdim      : TargetFrameLowering(StackGrowsDown, /*StackAlignment=*/16,
27285163Sdim                            /*LocalAreaOffset=*/0,
28285163Sdim                            /*TransientStackAlignment=*/16,
29285163Sdim                            /*StackRealignable=*/true) {}
30285163Sdim
31285163Sdim  void
32285163Sdim  eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB,
33285163Sdim                                MachineBasicBlock::iterator I) const override;
34285163Sdim
35285163Sdim  /// These methods insert prolog and epilog code into the function.
36285163Sdim  void emitPrologue(MachineFunction &MF, MachineBasicBlock &MBB) const override;
37285163Sdim  void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const override;
38285163Sdim
39285163Sdim  bool hasFP(const MachineFunction &MF) const override;
40285163Sdim  bool hasReservedCallFrame(const MachineFunction &MF) const override;
41285163Sdim
42285163Sdim  void processFunctionBeforeCalleeSavedScan(MachineFunction &MF,
43285163Sdim                                            RegScavenger *RS) const override;
44285163Sdim};
45285163Sdim
46285163Sdim} // end namespace llvm
47285163Sdim
48285163Sdim#endif
49