109467b48Spatrick //===-- AVRFrameLowering.h - Define frame lowering for AVR ------*- C++ -*-===//
209467b48Spatrick //
309467b48Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
409467b48Spatrick // See https://llvm.org/LICENSE.txt for license information.
509467b48Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
609467b48Spatrick //
709467b48Spatrick //===----------------------------------------------------------------------===//
809467b48Spatrick 
909467b48Spatrick #ifndef LLVM_AVR_FRAME_LOWERING_H
1009467b48Spatrick #define LLVM_AVR_FRAME_LOWERING_H
1109467b48Spatrick 
1209467b48Spatrick #include "llvm/CodeGen/TargetFrameLowering.h"
1309467b48Spatrick 
1409467b48Spatrick namespace llvm {
1509467b48Spatrick 
1609467b48Spatrick /// Utilities for creating function call frames.
1709467b48Spatrick class AVRFrameLowering : public TargetFrameLowering {
1809467b48Spatrick public:
1909467b48Spatrick   explicit AVRFrameLowering();
2009467b48Spatrick 
2109467b48Spatrick public:
2209467b48Spatrick   void emitPrologue(MachineFunction &MF, MachineBasicBlock &MBB) const override;
2309467b48Spatrick   void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const override;
2409467b48Spatrick   bool hasFP(const MachineFunction &MF) const override;
2509467b48Spatrick   bool spillCalleeSavedRegisters(MachineBasicBlock &MBB,
2609467b48Spatrick                                  MachineBasicBlock::iterator MI,
27*097a140dSpatrick                                  ArrayRef<CalleeSavedInfo> CSI,
2809467b48Spatrick                                  const TargetRegisterInfo *TRI) const override;
2909467b48Spatrick   bool
3009467b48Spatrick   restoreCalleeSavedRegisters(MachineBasicBlock &MBB,
3109467b48Spatrick                               MachineBasicBlock::iterator MI,
32*097a140dSpatrick                               MutableArrayRef<CalleeSavedInfo> CSI,
3309467b48Spatrick                               const TargetRegisterInfo *TRI) const override;
3409467b48Spatrick   bool hasReservedCallFrame(const MachineFunction &MF) const override;
3509467b48Spatrick   bool canSimplifyCallFramePseudos(const MachineFunction &MF) const override;
3609467b48Spatrick   void determineCalleeSaves(MachineFunction &MF, BitVector &SavedRegs,
3709467b48Spatrick                             RegScavenger *RS = nullptr) const override;
3809467b48Spatrick   MachineBasicBlock::iterator
3909467b48Spatrick   eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB,
4009467b48Spatrick                                 MachineBasicBlock::iterator MI) const override;
4109467b48Spatrick };
4209467b48Spatrick 
4309467b48Spatrick } // end namespace llvm
4409467b48Spatrick 
4509467b48Spatrick #endif // LLVM_AVR_FRAME_LOWERING_H
46