diff options
Diffstat (limited to 'contrib/llvm/lib/Target/AArch64/AArch64MachineFunctionInfo.h')
| -rw-r--r-- | contrib/llvm/lib/Target/AArch64/AArch64MachineFunctionInfo.h | 31 |
1 files changed, 23 insertions, 8 deletions
diff --git a/contrib/llvm/lib/Target/AArch64/AArch64MachineFunctionInfo.h b/contrib/llvm/lib/Target/AArch64/AArch64MachineFunctionInfo.h index 9f354c009461..798340f8fed8 100644 --- a/contrib/llvm/lib/Target/AArch64/AArch64MachineFunctionInfo.h +++ b/contrib/llvm/lib/Target/AArch64/AArch64MachineFunctionInfo.h @@ -15,6 +15,7 @@ #define LLVM_LIB_TARGET_AARCH64_AARCH64MACHINEFUNCTIONINFO_H #include "llvm/ADT/ArrayRef.h" +#include "llvm/ADT/Optional.h" #include "llvm/ADT/SmallPtrSet.h" #include "llvm/ADT/SmallVector.h" #include "llvm/CodeGen/MachineFunction.h" @@ -48,33 +49,33 @@ class AArch64FunctionInfo final : public MachineFunctionInfo { /// determineCalleeSaves(). bool HasStackFrame = false; - /// \brief Amount of stack frame size, not including callee-saved registers. + /// Amount of stack frame size, not including callee-saved registers. unsigned LocalStackSize; - /// \brief Amount of stack frame size used for saving callee-saved registers. + /// Amount of stack frame size used for saving callee-saved registers. unsigned CalleeSavedStackSize; - /// \brief Number of TLS accesses using the special (combinable) + /// Number of TLS accesses using the special (combinable) /// _TLS_MODULE_BASE_ symbol. unsigned NumLocalDynamicTLSAccesses = 0; - /// \brief FrameIndex for start of varargs area for arguments passed on the + /// FrameIndex for start of varargs area for arguments passed on the /// stack. int VarArgsStackIndex = 0; - /// \brief FrameIndex for start of varargs area for arguments passed in + /// FrameIndex for start of varargs area for arguments passed in /// general purpose registers. int VarArgsGPRIndex = 0; - /// \brief Size of the varargs area for arguments passed in general purpose + /// Size of the varargs area for arguments passed in general purpose /// registers. unsigned VarArgsGPRSize = 0; - /// \brief FrameIndex for start of varargs area for arguments passed in + /// FrameIndex for start of varargs area for arguments passed in /// floating-point registers. int VarArgsFPRIndex = 0; - /// \brief Size of the varargs area for arguments passed in floating-point + /// Size of the varargs area for arguments passed in floating-point /// registers. unsigned VarArgsFPRSize = 0; @@ -90,11 +91,22 @@ class AArch64FunctionInfo final : public MachineFunctionInfo { /// other stack allocations. bool CalleeSaveStackHasFreeSpace = false; + /// Has a value when it is known whether or not the function uses a + /// redzone, and no value otherwise. + /// Initialized during frame lowering, unless the function has the noredzone + /// attribute, in which case it is set to false at construction. + Optional<bool> HasRedZone; + public: AArch64FunctionInfo() = default; explicit AArch64FunctionInfo(MachineFunction &MF) { (void)MF; + + // If we already know that the function doesn't have a redzone, set + // HasRedZone here. + if (MF.getFunction().hasFnAttribute(Attribute::NoRedZone)) + HasRedZone = false; } unsigned getBytesInStackArgArea() const { return BytesInStackArgArea; } @@ -132,6 +144,9 @@ public: return NumLocalDynamicTLSAccesses; } + Optional<bool> hasRedZone() const { return HasRedZone; } + void setHasRedZone(bool s) { HasRedZone = s; } + int getVarArgsStackIndex() const { return VarArgsStackIndex; } void setVarArgsStackIndex(int Index) { VarArgsStackIndex = Index; } |
