Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/llvm/lib/Target/ARC/ARCFrameLowering.h
35268 views
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-exception
6
//
7
//===----------------------------------------------------------------------===//
8
//
9
// This class implements the ARC specific frame lowering.
10
//
11
//===----------------------------------------------------------------------===//
12
13
#ifndef LLVM_LIB_TARGET_ARC_ARCFRAMELOWERING_H
14
#define LLVM_LIB_TARGET_ARC_ARCFRAMELOWERING_H
15
16
#include "ARC.h"
17
#include "llvm/CodeGen/MachineBasicBlock.h"
18
#include "llvm/CodeGen/MachineFrameInfo.h"
19
#include "llvm/CodeGen/TargetFrameLowering.h"
20
21
namespace llvm {
22
23
class MachineFunction;
24
class ARCSubtarget;
25
class ARCInstrInfo;
26
27
class ARCFrameLowering : public TargetFrameLowering {
28
public:
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
bool
49
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
bool hasFP(const MachineFunction &MF) const override;
58
59
MachineBasicBlock::iterator
60
eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB,
61
MachineBasicBlock::iterator I) const override;
62
63
bool assignCalleeSavedSpillSlots(
64
llvm::MachineFunction &, const llvm::TargetRegisterInfo *,
65
std::vector<llvm::CalleeSavedInfo> &) const override;
66
67
private:
68
void adjustStackToMatchRecords(MachineBasicBlock &MBB,
69
MachineBasicBlock::iterator MI,
70
bool allocate) const;
71
72
const ARCSubtarget &ST;
73
};
74
75
} // end namespace llvm
76
77
#endif // LLVM_LIB_TARGET_ARC_ARCFRAMELOWERING_H
78
79