blob: de8e6eed31d7a09293864ea96f0a06175fe2de19 [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 Hatanakac0b02062013-01-30 00:26:49 +000043 unsigned ehDataReg(unsigned I) const;
Akira Hatanakad1c43ce2012-07-31 22:50:19 +000044
Vasileios Kalintiris43dff0c2015-10-26 12:38:43 +000045private:
46 void emitInterruptEpilogueStub(MachineFunction &MF,
47 MachineBasicBlock &MBB) const;
48 void emitInterruptPrologueStub(MachineFunction &MF,
49 MachineBasicBlock &MBB) const;
50};
Akira Hatanakad1c43ce2012-07-31 22:50:19 +000051
Eugene Zelenko926883e2017-02-01 01:22:51 +000052} // end namespace llvm
53
54#endif // LLVM_LIB_TARGET_MIPS_MIPSSEFRAMELOWERING_H