brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.7 KiB · daa4eec Raw
72 lines · c
1//==- MSP430FrameLowering.h - Define frame lowering for MSP430 --*- 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//10//11//===----------------------------------------------------------------------===//12 13#ifndef LLVM_LIB_TARGET_MSP430_MSP430FRAMELOWERING_H14#define LLVM_LIB_TARGET_MSP430_MSP430FRAMELOWERING_H15 16#include "MSP430.h"17#include "llvm/CodeGen/TargetFrameLowering.h"18 19namespace llvm {20 21class MSP430Subtarget;22class MSP430InstrInfo;23class MSP430RegisterInfo;24 25class MSP430FrameLowering : public TargetFrameLowering {26protected:27  bool hasFPImpl(const MachineFunction &MF) const override;28 29public:30  MSP430FrameLowering(const MSP430Subtarget &STI);31 32  const MSP430Subtarget &STI;33  const MSP430InstrInfo &TII;34  const MSP430RegisterInfo *TRI;35 36  /// emitProlog/emitEpilog - These methods insert prolog and epilog code into37  /// the function.38  void emitPrologue(MachineFunction &MF, MachineBasicBlock &MBB) const override;39  void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const override;40 41  MachineBasicBlock::iterator42  eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB,43                                MachineBasicBlock::iterator I) const override;44 45  bool spillCalleeSavedRegisters(MachineBasicBlock &MBB,46                                 MachineBasicBlock::iterator MI,47                                 ArrayRef<CalleeSavedInfo> CSI,48                                 const TargetRegisterInfo *TRI) const override;49  bool50  restoreCalleeSavedRegisters(MachineBasicBlock &MBB,51                              MachineBasicBlock::iterator MI,52                              MutableArrayRef<CalleeSavedInfo> CSI,53                              const TargetRegisterInfo *TRI) const override;54 55  bool hasReservedCallFrame(const MachineFunction &MF) const override;56  void processFunctionBeforeFrameFinalized(MachineFunction &MF,57                                     RegScavenger *RS = nullptr) const override;58 59  /// Wraps up getting a CFI index and building a MachineInstr for it.60  void BuildCFI(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,61                const DebugLoc &DL, const MCCFIInstruction &CFIInst,62                MachineInstr::MIFlag Flag = MachineInstr::NoFlags) const;63 64  void emitCalleeSavedFrameMoves(MachineBasicBlock &MBB,65                                 MachineBasicBlock::iterator MBBI,66                                 const DebugLoc &DL, bool IsPrologue) const;67};68 69} // End llvm namespace70 71#endif72