brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.8 KiB · 6cbfcf6 Raw
69 lines · c
1//=- LoongArchFrameLowering.h - TargetFrameLowering for LoongArch -*- 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 LoongArch-specific bits of TargetFrameLowering class.10//11//===----------------------------------------------------------------------===//12 13#ifndef LLVM_LIB_TARGET_LOONGARCH_LOONGARCHFRAMELOWERING_H14#define LLVM_LIB_TARGET_LOONGARCH_LOONGARCHFRAMELOWERING_H15 16#include "llvm/CodeGen/TargetFrameLowering.h"17 18namespace llvm {19class LoongArchSubtarget;20 21class LoongArchFrameLowering : public TargetFrameLowering {22  const LoongArchSubtarget &STI;23 24public:25  explicit LoongArchFrameLowering(const LoongArchSubtarget &STI)26      : TargetFrameLowering(StackGrowsDown,27                            /*StackAlignment=*/Align(16),28                            /*LocalAreaOffset=*/0),29        STI(STI) {}30 31  void emitPrologue(MachineFunction &MF, MachineBasicBlock &MBB) const override;32  void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const override;33 34  void determineCalleeSaves(MachineFunction &MF, BitVector &SavedRegs,35                            RegScavenger *RS) const override;36 37  void processFunctionBeforeFrameFinalized(MachineFunction &MF,38                                           RegScavenger *RS) const override;39 40  bool hasReservedCallFrame(const MachineFunction &MF) const override;41  MachineBasicBlock::iterator42  eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB,43                                MachineBasicBlock::iterator MI) const override;44  bool spillCalleeSavedRegisters(MachineBasicBlock &MBB,45                                 MachineBasicBlock::iterator MI,46                                 ArrayRef<CalleeSavedInfo> CSI,47                                 const TargetRegisterInfo *TRI) const override;48 49  StackOffset getFrameIndexReference(const MachineFunction &MF, int FI,50                                     Register &FrameReg) const override;51 52  bool hasBP(const MachineFunction &MF) const;53 54  uint64_t getFirstSPAdjustAmount(const MachineFunction &MF) const;55 56  bool enableShrinkWrapping(const MachineFunction &MF) const override;57 58protected:59  bool hasFPImpl(const MachineFunction &MF) const override;60 61private:62  void determineFrameLayout(MachineFunction &MF) const;63  void adjustReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,64                 const DebugLoc &DL, Register DestReg, Register SrcReg,65                 int64_t Val, MachineInstr::MIFlag Flag) const;66};67} // end namespace llvm68#endif // LLVM_LIB_TARGET_LOONGARCH_LOONGARCHFRAMELOWERING_H69