LLVM 17.0.0git
AVRMachineFunctionInfo.h
Go to the documentation of this file.
1//===-- AVRMachineFuctionInfo.h - AVR machine function info -----*- 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 file declares AVR-specific per-machine-function information.
10//
11//===----------------------------------------------------------------------===//
12
13#ifndef LLVM_AVR_MACHINE_FUNCTION_INFO_H
14#define LLVM_AVR_MACHINE_FUNCTION_INFO_H
15
17
18namespace llvm {
19
20/// Contains AVR-specific information for each MachineFunction.
22 /// Indicates if a register has been spilled by the register
23 /// allocator.
24 bool HasSpills;
25
26 /// Indicates if there are any fixed size allocas present.
27 /// Note that if there are only variable sized allocas this is set to false.
28 bool HasAllocas;
29
30 /// Indicates if arguments passed using the stack are being
31 /// used inside the function.
32 bool HasStackArgs;
33
34 /// Whether or not the function is an interrupt handler.
35 bool IsInterruptHandler;
36
37 /// Whether or not the function is an non-blocking interrupt handler.
38 bool IsSignalHandler;
39
40 /// Size of the callee-saved register portion of the
41 /// stack frame in bytes.
42 unsigned CalleeSavedFrameSize;
43
44 /// FrameIndex for start of varargs area.
45 int VarArgsFrameIndex;
46
47public:
49 : HasSpills(false), HasAllocas(false), HasStackArgs(false),
50 CalleeSavedFrameSize(0), VarArgsFrameIndex(0) {
51 CallingConv::ID CallConv = F.getCallingConv();
52
53 this->IsInterruptHandler =
54 CallConv == CallingConv::AVR_INTR || F.hasFnAttribute("interrupt");
55 this->IsSignalHandler =
56 CallConv == CallingConv::AVR_SIGNAL || F.hasFnAttribute("signal");
57 }
58
62 const override {
63 return DestMF.cloneInfo<AVRMachineFunctionInfo>(*this);
64 }
65
66 bool getHasSpills() const { return HasSpills; }
67 void setHasSpills(bool B) { HasSpills = B; }
68
69 bool getHasAllocas() const { return HasAllocas; }
70 void setHasAllocas(bool B) { HasAllocas = B; }
71
72 bool getHasStackArgs() const { return HasStackArgs; }
73 void setHasStackArgs(bool B) { HasStackArgs = B; }
74
75 /// Checks if the function is some form of interrupt service routine.
78 }
79
80 bool isInterruptHandler() const { return IsInterruptHandler; }
81 bool isSignalHandler() const { return IsSignalHandler; }
82
83 unsigned getCalleeSavedFrameSize() const { return CalleeSavedFrameSize; }
84 void setCalleeSavedFrameSize(unsigned Bytes) { CalleeSavedFrameSize = Bytes; }
85
86 int getVarArgsFrameIndex() const { return VarArgsFrameIndex; }
87 void setVarArgsFrameIndex(int Idx) { VarArgsFrameIndex = Idx; }
88};
89
90} // namespace llvm
91
92#endif // LLVM_AVR_MACHINE_FUNCTION_INFO_H
static GCRegistry::Add< OcamlGC > B("ocaml", "ocaml 3.10-compatible GC")
Returns the sub type a function will return at a given Idx Should correspond to the result type of an ExtractValue instruction executed with just that one unsigned Idx
#define F(x, y, z)
Definition: MD5.cpp:55
Basic Register Allocator
Contains AVR-specific information for each MachineFunction.
void setCalleeSavedFrameSize(unsigned Bytes)
AVRMachineFunctionInfo(const Function &F, const TargetSubtargetInfo *STI)
MachineFunctionInfo * clone(BumpPtrAllocator &Allocator, MachineFunction &DestMF, const DenseMap< MachineBasicBlock *, MachineBasicBlock * > &Src2DstMBB) const override
Make a functionally equivalent copy of this MachineFunctionInfo in MF.
bool isInterruptOrSignalHandler() const
Checks if the function is some form of interrupt service routine.
Allocate memory in an ever growing pool, as if by bump-pointer.
Definition: Allocator.h:66
Ty * cloneInfo(const Ty &Old)
TargetSubtargetInfo - Generic base class for all target subtargets.
@ AVR_SIGNAL
Used for AVR signal routines.
Definition: CallingConv.h:180
@ AVR_INTR
Used for AVR interrupt routines.
Definition: CallingConv.h:177
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
MachineFunctionInfo - This class can be derived from and used by targets to hold private target-speci...