1 //===- ARCFrameLowering.h - Define frame lowering for ARC -------*- C++ -*-===//
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
7 //===----------------------------------------------------------------------===//
9 // This class implements the ARC specific frame lowering.
11 //===----------------------------------------------------------------------===//
13 #ifndef LLVM_LIB_TARGET_ARC_ARCFRAMELOWERING_H
14 #define LLVM_LIB_TARGET_ARC_ARCFRAMELOWERING_H
17 #include "llvm/CodeGen/MachineBasicBlock.h"
18 #include "llvm/CodeGen/MachineFrameInfo.h"
19 #include "llvm/CodeGen/TargetFrameLowering.h"
23 class MachineFunction;
27 class ARCFrameLowering : public TargetFrameLowering {
29 ARCFrameLowering(const ARCSubtarget &st)
30 : TargetFrameLowering(TargetFrameLowering::StackGrowsDown, Align(4), 0),
33 /// Insert Prologue into the function.
34 void emitPrologue(MachineFunction &MF, MachineBasicBlock &MBB) const override;
36 /// Insert Epilogue into the function.
37 void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const override;
39 /// Add explicit callee save registers.
40 void determineCalleeSaves(MachineFunction &MF, BitVector &SavedRegs,
41 RegScavenger *RS) const override;
43 bool spillCalleeSavedRegisters(MachineBasicBlock &MBB,
44 MachineBasicBlock::iterator MI,
45 const std::vector<CalleeSavedInfo> &CSI,
46 const TargetRegisterInfo *TRI) const override;
49 restoreCalleeSavedRegisters(MachineBasicBlock &MBB,
50 MachineBasicBlock::iterator MI,
51 std::vector<CalleeSavedInfo> &CSI,
52 const TargetRegisterInfo *TRI) const override;
54 void processFunctionBeforeFrameFinalized(MachineFunction &MF,
55 RegScavenger *RS) const override;
57 bool hasFP(const MachineFunction &MF) const override;
59 MachineBasicBlock::iterator
60 eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB,
61 MachineBasicBlock::iterator I) const override;
63 bool assignCalleeSavedSpillSlots(
64 llvm::MachineFunction &, const llvm::TargetRegisterInfo *,
65 std::vector<llvm::CalleeSavedInfo> &) const override;
68 void adjustStackToMatchRecords(MachineBasicBlock &MBB,
69 MachineBasicBlock::iterator MI,
72 const ARCSubtarget &ST;
75 } // end namespace llvm
77 #endif // LLVM_LIB_TARGET_ARC_ARCFRAMELOWERING_H