[MIPS GlobalISel] Select MSA vector generic and builtin add
[llvm-complete.git] / lib / Target / ARC / ARCFrameLowering.h
blob9242400fb28de28ea327548637786ce56cf59224
1 //===- ARCFrameLowering.h - Define frame lowering for ARC -------*- 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 the ARC specific frame lowering.
11 //===----------------------------------------------------------------------===//
13 #ifndef LLVM_LIB_TARGET_ARC_ARCFRAMELOWERING_H
14 #define LLVM_LIB_TARGET_ARC_ARCFRAMELOWERING_H
16 #include "ARC.h"
17 #include "llvm/CodeGen/MachineBasicBlock.h"
18 #include "llvm/CodeGen/MachineFrameInfo.h"
19 #include "llvm/CodeGen/TargetFrameLowering.h"
21 namespace llvm {
23 class MachineFunction;
24 class ARCSubtarget;
25 class ARCInstrInfo;
27 class ARCFrameLowering : public TargetFrameLowering {
28 public:
29 ARCFrameLowering(const ARCSubtarget &st)
30 : TargetFrameLowering(TargetFrameLowering::StackGrowsDown, Align(4), 0),
31 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;
48 bool
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;
67 private:
68 void adjustStackToMatchRecords(MachineBasicBlock &MBB,
69 MachineBasicBlock::iterator MI,
70 bool allocate) const;
72 const ARCSubtarget &ST;
75 } // end namespace llvm
77 #endif // LLVM_LIB_TARGET_ARC_ARCFRAMELOWERING_H