LLVM  16.0.0git
LoongArchFrameLowering.h
Go to the documentation of this file.
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-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This class implements LoongArch-specific bits of TargetFrameLowering class.
10 //
11 //===----------------------------------------------------------------------===//
12 
13 #ifndef LLVM_LIB_TARGET_LOONGARCH_LOONGARCHFRAMELOWERING_H
14 #define LLVM_LIB_TARGET_LOONGARCH_LOONGARCHFRAMELOWERING_H
15 
17 
18 namespace llvm {
19 class LoongArchSubtarget;
20 
22  const LoongArchSubtarget &STI;
23 
24 public:
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  bool hasReservedCallFrame(const MachineFunction &MF) const override;
40  MachineBasicBlock::iterator MI) const override;
41 
43  Register &FrameReg) const override;
44 
45  bool hasFP(const MachineFunction &MF) const override;
46  bool hasBP(const MachineFunction &MF) const;
47 
48 private:
49  void determineFrameLayout(MachineFunction &MF) const;
51  const DebugLoc &DL, Register DestReg, Register SrcReg,
52  int64_t Val, MachineInstr::MIFlag Flag) const;
53 };
54 } // end namespace llvm
55 #endif // LLVM_LIB_TARGET_LOONGARCH_LOONGARCHFRAMELOWERING_H
MI
IRTranslator LLVM IR MI
Definition: IRTranslator.cpp:105
llvm
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
TargetFrameLowering.h
llvm::TargetFrameLowering
Information about stack frame layout on the target.
Definition: TargetFrameLowering.h:43
llvm::LoongArchFrameLowering::getFrameIndexReference
StackOffset getFrameIndexReference(const MachineFunction &MF, int FI, Register &FrameReg) const override
getFrameIndexReference - This method should return the base register and offset used to reference a f...
Definition: LoongArchFrameLowering.cpp:240
llvm::LoongArchFrameLowering::emitPrologue
void emitPrologue(MachineFunction &MF, MachineBasicBlock &MBB) const override
emitProlog/emitEpilog - These methods insert prolog and epilog code into the function.
Definition: LoongArchFrameLowering.cpp:87
llvm::LoongArchFrameLowering
Definition: LoongArchFrameLowering.h:21
llvm::MCID::Flag
Flag
These should be considered private to the implementation of the MCInstrDesc class.
Definition: MCInstrDesc.h:147
llvm::BitVector
Definition: BitVector.h:75
llvm::LoongArchFrameLowering::determineCalleeSaves
void determineCalleeSaves(MachineFunction &MF, BitVector &SavedRegs, RegScavenger *RS) const override
This method determines which of the registers reported by TargetRegisterInfo::getCalleeSavedRegs() sh...
Definition: LoongArchFrameLowering.cpp:187
llvm::Align
This struct is a compact representation of a valid (non-zero power of two) alignment.
Definition: Alignment.h:39
llvm::MachineBasicBlock
Definition: MachineBasicBlock.h:94
llvm::LoongArchSubtarget
Definition: LoongArchSubtarget.h:32
llvm::RegScavenger
Definition: RegisterScavenging.h:34
llvm::LoongArchFrameLowering::LoongArchFrameLowering
LoongArchFrameLowering(const LoongArchSubtarget &STI)
Definition: LoongArchFrameLowering.h:25
llvm::LoongArchFrameLowering::hasReservedCallFrame
bool hasReservedCallFrame(const MachineFunction &MF) const override
hasReservedCallFrame - Under normal circumstances, when a frame pointer is not required,...
Definition: LoongArchFrameLowering.cpp:205
llvm::LoongArchFrameLowering::hasBP
bool hasBP(const MachineFunction &MF) const
Definition: LoongArchFrameLowering.cpp:42
llvm::MachineInstr::MIFlag
MIFlag
Definition: MachineInstr.h:82
llvm::MachineFunction
Definition: MachineFunction.h:257
MBBI
MachineBasicBlock MachineBasicBlock::iterator MBBI
Definition: AArch64SLSHardening.cpp:75
llvm::StackOffset
StackOffset is a class to represent an offset with 2 dimensions, named fixed and scalable,...
Definition: TypeSize.h:134
DL
MachineBasicBlock MachineBasicBlock::iterator DebugLoc DL
Definition: AArch64SLSHardening.cpp:76
llvm::Register
Wrapper class representing virtual and physical registers.
Definition: Register.h:19
MBB
MachineBasicBlock & MBB
Definition: AArch64SLSHardening.cpp:74
llvm::LoongArchFrameLowering::emitEpilogue
void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const override
Definition: LoongArchFrameLowering.cpp:156
llvm::LoongArchFrameLowering::eliminateCallFramePseudoInstr
MachineBasicBlock::iterator eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB, MachineBasicBlock::iterator MI) const override
This method is called during prolog/epilog code insertion to eliminate call frame setup and destroy p...
Definition: LoongArchFrameLowering.cpp:212
llvm::TargetFrameLowering::StackGrowsDown
@ StackGrowsDown
Definition: TargetFrameLowering.h:47
llvm::DebugLoc
A debug info location.
Definition: DebugLoc.h:33
llvm::MachineInstrBundleIterator< MachineInstr >
llvm::LoongArchFrameLowering::hasFP
bool hasFP(const MachineFunction &MF) const override
hasFP - Return true if the specified function should have a dedicated frame pointer register.
Definition: LoongArchFrameLowering.cpp:33