diff options
author | Vitaly Buka <vitalybuka@google.com> | 2018-04-07 05:36:44 +0000 |
---|---|---|
committer | Vitaly Buka <vitalybuka@google.com> | 2018-04-07 05:36:44 +0000 |
commit | de5f196530b508df3bc8c035ae1db87b56437d88 (patch) | |
tree | 7f702512cbfb50729ca134d7dadbad1efb364c96 /llvm/lib/CodeGen/TargetFrameLoweringImpl.cpp | |
parent | d1324fdff005fd267630c004760a544dabad8357 (diff) | |
download | llvm-de5f196530b508df3bc8c035ae1db87b56437d88.zip llvm-de5f196530b508df3bc8c035ae1db87b56437d88.tar.gz llvm-de5f196530b508df3bc8c035ae1db87b56437d88.tar.bz2 |
Revert "ARM: Do not spill CSR to stack on entry to noreturn functions"
Breaks ubsan test TestCases/Misc/missing_return.cpp on ARM
This reverts commit r329287
llvm-svn: 329486
Diffstat (limited to 'llvm/lib/CodeGen/TargetFrameLoweringImpl.cpp')
-rw-r--r-- | llvm/lib/CodeGen/TargetFrameLoweringImpl.cpp | 18 |
1 files changed, 0 insertions, 18 deletions
diff --git a/llvm/lib/CodeGen/TargetFrameLoweringImpl.cpp b/llvm/lib/CodeGen/TargetFrameLoweringImpl.cpp index 76c5425b..79fafa5 100644 --- a/llvm/lib/CodeGen/TargetFrameLoweringImpl.cpp +++ b/llvm/lib/CodeGen/TargetFrameLoweringImpl.cpp @@ -36,12 +36,6 @@ bool TargetFrameLowering::noFramePointerElim(const MachineFunction &MF) const { return Attr.getValueAsString() == "true"; } -bool TargetFrameLowering::enableCalleeSaveSkip(const MachineFunction &MF) const { - assert(MF.getFunction().hasFnAttribute(Attribute::NoReturn) && - MF.getFunction().hasFnAttribute(Attribute::NoUnwind)); - return false; -} - /// Returns the displacement from the frame register to the stack /// frame of the specified index, along with the frame register used /// (in output arg FrameReg). This is the default implementation which @@ -91,18 +85,6 @@ void TargetFrameLowering::determineCalleeSaves(MachineFunction &MF, if (MF.getFunction().hasFnAttribute(Attribute::Naked)) return; - // Noreturn+nounwind functions never restore CSR, so no saves are needed. - // Purely noreturn functions may still return through throws, so those must - // save CSR for caller exception handlers. - // - // If the function uses longjmp to break out of its current path of - // execution we do not need the CSR spills either: setjmp stores all CSRs - // it was called with into the jmp_buf, which longjmp then restores. - if (MF.getFunction().hasFnAttribute(Attribute::NoReturn) && - MF.getFunction().hasFnAttribute(Attribute::NoUnwind) && - enableCalleeSaveSkip(MF)) - return; - // Functions which call __builtin_unwind_init get all their registers saved. bool CallsUnwindInit = MF.callsUnwindInit(); const MachineRegisterInfo &MRI = MF.getRegInfo(); |