LanaiFrameLowering.h revision 353358
1//===-- LanaiFrameLowering.h - Define frame lowering for Lanai --*- C++-*--===// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8// 9// This class implements Lanai-specific bits of TargetFrameLowering class. 10// 11//===----------------------------------------------------------------------===// 12 13#ifndef LLVM_LIB_TARGET_LANAI_LANAIFRAMELOWERING_H 14#define LLVM_LIB_TARGET_LANAI_LANAIFRAMELOWERING_H 15 16#include "llvm/CodeGen/TargetFrameLowering.h" 17 18namespace llvm { 19 20class BitVector; 21class LanaiSubtarget; 22 23class LanaiFrameLowering : public TargetFrameLowering { 24private: 25 void determineFrameLayout(MachineFunction &MF) const; 26 void replaceAdjDynAllocPseudo(MachineFunction &MF) const; 27 28protected: 29 const LanaiSubtarget &STI; 30 31public: 32 explicit LanaiFrameLowering(const LanaiSubtarget &Subtarget) 33 : TargetFrameLowering(StackGrowsDown, 34 /*StackAlignment=*/8, 35 /*LocalAreaOffset=*/0), 36 STI(Subtarget) {} 37 38 // emitProlog/emitEpilog - These methods insert prolog and epilog code into 39 // the function. 40 void emitPrologue(MachineFunction &MF, MachineBasicBlock &MBB) const override; 41 void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const override; 42 43 MachineBasicBlock::iterator 44 eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB, 45 MachineBasicBlock::iterator I) const override; 46 47 bool hasFP(const MachineFunction & /*MF*/) const override { return true; } 48 49 void determineCalleeSaves(MachineFunction &MF, BitVector &SavedRegs, 50 RegScavenger *RS = nullptr) const override; 51}; 52 53} // namespace llvm 54 55#endif // LLVM_LIB_TARGET_LANAI_LANAIFRAMELOWERING_H 56