79 lines · c
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-exception6//7//===----------------------------------------------------------------------===//8//9// This class implements the ARC specific frame lowering.10//11//===----------------------------------------------------------------------===//12 13#ifndef LLVM_LIB_TARGET_ARC_ARCFRAMELOWERING_H14#define LLVM_LIB_TARGET_ARC_ARCFRAMELOWERING_H15 16#include "ARC.h"17#include "llvm/CodeGen/MachineBasicBlock.h"18#include "llvm/CodeGen/MachineFrameInfo.h"19#include "llvm/CodeGen/TargetFrameLowering.h"20 21namespace llvm {22 23class MachineFunction;24class ARCSubtarget;25class ARCInstrInfo;26 27class ARCFrameLowering : public TargetFrameLowering {28public:29 ARCFrameLowering(const ARCSubtarget &st)30 : TargetFrameLowering(TargetFrameLowering::StackGrowsDown, Align(4), 0),31 ST(st) {}32 33 /// Insert Prologue into the function.34 void emitPrologue(MachineFunction &MF, MachineBasicBlock &MBB) const override;35 36 /// Insert Epilogue into the function.37 void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const override;38 39 /// Add explicit callee save registers.40 void determineCalleeSaves(MachineFunction &MF, BitVector &SavedRegs,41 RegScavenger *RS) const override;42 43 bool spillCalleeSavedRegisters(MachineBasicBlock &MBB,44 MachineBasicBlock::iterator MI,45 ArrayRef<CalleeSavedInfo> CSI,46 const TargetRegisterInfo *TRI) const override;47 48 bool49 restoreCalleeSavedRegisters(MachineBasicBlock &MBB,50 MachineBasicBlock::iterator MI,51 MutableArrayRef<CalleeSavedInfo> CSI,52 const TargetRegisterInfo *TRI) const override;53 54 void processFunctionBeforeFrameFinalized(MachineFunction &MF,55 RegScavenger *RS) const override;56 57 MachineBasicBlock::iterator58 eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB,59 MachineBasicBlock::iterator I) const override;60 61 bool assignCalleeSavedSpillSlots(62 llvm::MachineFunction &, const llvm::TargetRegisterInfo *,63 std::vector<llvm::CalleeSavedInfo> &) const override;64 65protected:66 bool hasFPImpl(const MachineFunction &MF) const override;67 68private:69 void adjustStackToMatchRecords(MachineBasicBlock &MBB,70 MachineBasicBlock::iterator MI,71 bool allocate) const;72 73 const ARCSubtarget &ST;74};75 76} // end namespace llvm77 78#endif // LLVM_LIB_TARGET_ARC_ARCFRAMELOWERING_H79