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