brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.8 KiB · 089326f Raw
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