52 lines · c
1//===- MipsSEFrameLowering.h - Mips32/64 frame lowering ---------*- 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-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef LLVM_LIB_TARGET_MIPS_MIPSSEFRAMELOWERING_H10#define LLVM_LIB_TARGET_MIPS_MIPSSEFRAMELOWERING_H11 12#include "MipsFrameLowering.h"13 14namespace llvm {15 16class MachineBasicBlock;17class MachineFunction;18class MipsSubtarget;19 20class MipsSEFrameLowering : public MipsFrameLowering {21public:22 explicit MipsSEFrameLowering(const MipsSubtarget &STI);23 24 /// emitProlog/emitEpilog - These methods insert prolog and epilog code into25 /// the function.26 void emitPrologue(MachineFunction &MF, MachineBasicBlock &MBB) const override;27 void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const override;28 29 StackOffset getFrameIndexReference(const MachineFunction &MF, int FI,30 Register &FrameReg) const override;31 32 bool spillCalleeSavedRegisters(MachineBasicBlock &MBB,33 MachineBasicBlock::iterator MI,34 ArrayRef<CalleeSavedInfo> CSI,35 const TargetRegisterInfo *TRI) const override;36 37 bool hasReservedCallFrame(const MachineFunction &MF) const override;38 39 void determineCalleeSaves(MachineFunction &MF, BitVector &SavedRegs,40 RegScavenger *RS) const override;41 42private:43 void emitInterruptEpilogueStub(MachineFunction &MF,44 MachineBasicBlock &MBB) const;45 void emitInterruptPrologueStub(MachineFunction &MF,46 MachineBasicBlock &MBB) const;47};48 49} // end namespace llvm50 51#endif // LLVM_LIB_TARGET_MIPS_MIPSSEFRAMELOWERING_H52