blob: cb2119d6880bd1cfab2da6cd060d7c36031832fd [file] [log] [blame]
Eugene Zelenko926883e2017-02-01 01:22:51 +00001//===- MipsSEFrameLowering.h - Mips32/64 frame lowering ---------*- C++ -*-===//
Akira Hatanakad1c43ce2012-07-31 22:50:19 +00002//
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//===----------------------------------------------------------------------===//
Akira Hatanakad1c43ce2012-07-31 22:50:19 +00009
Benjamin Kramera7c40ef2014-08-13 16:26:38 +000010#ifndef LLVM_LIB_TARGET_MIPS_MIPSSEFRAMELOWERING_H
11#define LLVM_LIB_TARGET_MIPS_MIPSSEFRAMELOWERING_H
Akira Hatanakad1c43ce2012-07-31 22:50:19 +000012
13#include "MipsFrameLowering.h"
Eugene Zelenko926883e2017-02-01 01:22:51 +000014#include <vector>
Akira Hatanakad1c43ce2012-07-31 22:50:19 +000015
16namespace llvm {
17
Eugene Zelenko79220eae2017-08-03 22:12:30 +000018class MachineBasicBlock;
19class MachineFunction;
20class MipsSubtarget;
21
Akira Hatanakad1c43ce2012-07-31 22:50:19 +000022class MipsSEFrameLowering : public MipsFrameLowering {
23public:
Eric Christopher4cdb3f92014-07-02 23:29:55 +000024 explicit MipsSEFrameLowering(const MipsSubtarget &STI);
Akira Hatanakad1c43ce2012-07-31 22:50:19 +000025
26 /// emitProlog/emitEpilog - These methods insert prolog and epilog code into
27 /// the function.
Quentin Colombet61b305e2015-05-05 17:38:16 +000028 void emitPrologue(MachineFunction &MF, MachineBasicBlock &MBB) const override;
Craig Topper56c590a2014-04-29 07:58:02 +000029 void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const override;
Akira Hatanakad1c43ce2012-07-31 22:50:19 +000030
Vasileios Kalintiris48e02562015-11-12 14:11:43 +000031 int getFrameIndexReference(const MachineFunction &MF, int FI,
32 unsigned &FrameReg) const override;
33
Akira Hatanakad1c43ce2012-07-31 22:50:19 +000034 bool spillCalleeSavedRegisters(MachineBasicBlock &MBB,
35 MachineBasicBlock::iterator MI,
36 const std::vector<CalleeSavedInfo> &CSI,
Craig Topper56c590a2014-04-29 07:58:02 +000037 const TargetRegisterInfo *TRI) const override;
Akira Hatanakad1c43ce2012-07-31 22:50:19 +000038
Craig Topper56c590a2014-04-29 07:58:02 +000039 bool hasReservedCallFrame(const MachineFunction &MF) const override;
Akira Hatanakad1c43ce2012-07-31 22:50:19 +000040
Matthias Braun02564862015-07-14 17:17:13 +000041 void determineCalleeSaves(MachineFunction &MF, BitVector &SavedRegs,
42 RegScavenger *RS) const override;
Akira Hatanakad1c43ce2012-07-31 22:50:19 +000043
Vasileios Kalintiris43dff0c2015-10-26 12:38:43 +000044private:
45 void emitInterruptEpilogueStub(MachineFunction &MF,
46 MachineBasicBlock &MBB) const;
47 void emitInterruptPrologueStub(MachineFunction &MF,
48 MachineBasicBlock &MBB) const;
49};
Akira Hatanakad1c43ce2012-07-31 22:50:19 +000050
Eugene Zelenko926883e2017-02-01 01:22:51 +000051} // end namespace llvm
52
53#endif // LLVM_LIB_TARGET_MIPS_MIPSSEFRAMELOWERING_H