1//===-- MipsFrameLowering.h - Define frame lowering for Mips ----*- 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//
10//
11//===----------------------------------------------------------------------===//
12
13#ifndef LLVM_LIB_TARGET_MIPS_MIPSFRAMELOWERING_H
14#define LLVM_LIB_TARGET_MIPS_MIPSFRAMELOWERING_H
15
16#include "Mips.h"
17#include "llvm/CodeGen/TargetFrameLowering.h"
18
19namespace llvm {
20 class MipsSubtarget;
21
22class MipsFrameLowering : public TargetFrameLowering {
23protected:
24 const MipsSubtarget &STI;
25
26public:
27 explicit MipsFrameLowering(const MipsSubtarget &sti, Align Alignment)
28 : TargetFrameLowering(StackGrowsDown, Alignment, 0, Alignment), STI(sti) {
29 }
30
31 static const MipsFrameLowering *create(const MipsSubtarget &ST);
32
33 bool hasFP(const MachineFunction &MF) const override;
34
35 bool hasBP(const MachineFunction &MF) const;
36
37 bool allocateScavengingFrameIndexesNearIncomingSP(
38 const MachineFunction &MF) const override {
39 return false;
40 }
41
42 bool enableShrinkWrapping(const MachineFunction &MF) const override {
43 return true;
44 }
45
46 MachineBasicBlock::iterator
47 eliminateCallFramePseudoInstr(MachineFunction &MF,
48 MachineBasicBlock &MBB,
49 MachineBasicBlock::iterator I) const override;
50
51protected:
52 uint64_t estimateStackSize(const MachineFunction &MF) const;
53};
54
55/// Create MipsFrameLowering objects.
56const MipsFrameLowering *createMips16FrameLowering(const MipsSubtarget &ST);
57const MipsFrameLowering *createMipsSEFrameLowering(const MipsSubtarget &ST);
58
59} // End llvm namespace
60
61#endif
62