Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/llvm/lib/Target/MSP430/MSP430FrameLowering.h
35267 views
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-exception
6
//
7
//===----------------------------------------------------------------------===//
8
//
9
//
10
//
11
//===----------------------------------------------------------------------===//
12
13
#ifndef LLVM_LIB_TARGET_MSP430_MSP430FRAMELOWERING_H
14
#define LLVM_LIB_TARGET_MSP430_MSP430FRAMELOWERING_H
15
16
#include "MSP430.h"
17
#include "llvm/CodeGen/TargetFrameLowering.h"
18
19
namespace llvm {
20
21
class MSP430Subtarget;
22
class MSP430InstrInfo;
23
class MSP430RegisterInfo;
24
25
class MSP430FrameLowering : public TargetFrameLowering {
26
protected:
27
28
public:
29
MSP430FrameLowering(const MSP430Subtarget &STI);
30
31
const MSP430Subtarget &STI;
32
const MSP430InstrInfo &TII;
33
const MSP430RegisterInfo *TRI;
34
35
/// emitProlog/emitEpilog - These methods insert prolog and epilog code into
36
/// the function.
37
void emitPrologue(MachineFunction &MF, MachineBasicBlock &MBB) const override;
38
void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const override;
39
40
MachineBasicBlock::iterator
41
eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB,
42
MachineBasicBlock::iterator I) const override;
43
44
bool spillCalleeSavedRegisters(MachineBasicBlock &MBB,
45
MachineBasicBlock::iterator MI,
46
ArrayRef<CalleeSavedInfo> CSI,
47
const TargetRegisterInfo *TRI) const override;
48
bool
49
restoreCalleeSavedRegisters(MachineBasicBlock &MBB,
50
MachineBasicBlock::iterator MI,
51
MutableArrayRef<CalleeSavedInfo> CSI,
52
const TargetRegisterInfo *TRI) const override;
53
54
bool hasFP(const MachineFunction &MF) const override;
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 namespace
70
71
#endif
72
73