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
, 4, 0), ST(st
) {
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