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