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=*/Align(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