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