diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2020-07-26 19:36:28 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2020-07-26 19:36:28 +0000 |
commit | cfca06d7963fa0909f90483b42a6d7d194d01e08 (patch) | |
tree | 209fb2a2d68f8f277793fc8df46c753d31bc853b /llvm/lib/Target/AVR/AVRMachineFunctionInfo.h | |
parent | 706b4fc47bbc608932d3b491ae19a3b9cde9497b (diff) |
Notes
Diffstat (limited to 'llvm/lib/Target/AVR/AVRMachineFunctionInfo.h')
-rw-r--r-- | llvm/lib/Target/AVR/AVRMachineFunctionInfo.h | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/llvm/lib/Target/AVR/AVRMachineFunctionInfo.h b/llvm/lib/Target/AVR/AVRMachineFunctionInfo.h index 5226e30491c35..5432fac122efb 100644 --- a/llvm/lib/Target/AVR/AVRMachineFunctionInfo.h +++ b/llvm/lib/Target/AVR/AVRMachineFunctionInfo.h @@ -31,6 +31,12 @@ class AVRMachineFunctionInfo : public MachineFunctionInfo { /// used inside the function. bool HasStackArgs; + /// Whether or not the function is an interrupt handler. + bool IsInterruptHandler; + + /// Whether or not the function is an non-blocking interrupt handler. + bool IsSignalHandler; + /// Size of the callee-saved register portion of the /// stack frame in bytes. unsigned CalleeSavedFrameSize; @@ -41,11 +47,17 @@ class AVRMachineFunctionInfo : public MachineFunctionInfo { public: AVRMachineFunctionInfo() : HasSpills(false), HasAllocas(false), HasStackArgs(false), + IsInterruptHandler(false), IsSignalHandler(false), CalleeSavedFrameSize(0), VarArgsFrameIndex(0) {} explicit AVRMachineFunctionInfo(MachineFunction &MF) : HasSpills(false), HasAllocas(false), HasStackArgs(false), - CalleeSavedFrameSize(0), VarArgsFrameIndex(0) {} + CalleeSavedFrameSize(0), VarArgsFrameIndex(0) { + unsigned CallConv = MF.getFunction().getCallingConv(); + + this->IsInterruptHandler = CallConv == CallingConv::AVR_INTR || MF.getFunction().hasFnAttribute("interrupt"); + this->IsSignalHandler = CallConv == CallingConv::AVR_SIGNAL || MF.getFunction().hasFnAttribute("signal"); + } bool getHasSpills() const { return HasSpills; } void setHasSpills(bool B) { HasSpills = B; } @@ -56,6 +68,12 @@ public: bool getHasStackArgs() const { return HasStackArgs; } void setHasStackArgs(bool B) { HasStackArgs = B; } + /// Checks if the function is some form of interrupt service routine. + bool isInterruptOrSignalHandler() const { return isInterruptHandler() || isSignalHandler(); } + + bool isInterruptHandler() const { return IsInterruptHandler; } + bool isSignalHandler() const { return IsSignalHandler; } + unsigned getCalleeSavedFrameSize() const { return CalleeSavedFrameSize; } void setCalleeSavedFrameSize(unsigned Bytes) { CalleeSavedFrameSize = Bytes; } |