[PATCH] Restore X86 base pointer after call to llvm.eh.sjlj.setjmp
Arch D. Robison
arch.robison at intel.com
Mon Nov 24 11:07:43 PST 2014
Hi nadav, hliao,
This patch fixes the bug described in http://lists.cs.uiuc.edu/pipermail/llvmdev/2013-May/062343.html .
The fix allocates an extra slot just below the GPRs and stores the base pointer there. This is done only for functions containing llvm.eh.sjlj.setjmp that also need a base pointer. Because code containing llvm.eh.sjlj.setjmp saves all of the callee-save GPRs in the prologue, the offset to the extra slot can be computed before prologue generation runs.
Impact at run-time on affected functions is::
- One extra store in the prologue, The store saves the base pointer.
- One extra load after a llvm.eh.sjlj.setjmp. The load restores the base pointer.
Because the extra slot is just above a gap between frame-pointer-relative and base-pointer-relative chunks of memory, there is no impact on other offset calculations other than ensuring there is room for the extra slot.
http://reviews.llvm.org/D6388
Files:
lib/Target/X86/X86FrameLowering.cpp
lib/Target/X86/X86ISelLowering.cpp
lib/Target/X86/X86MachineFunctionInfo.cpp
lib/Target/X86/X86MachineFunctionInfo.h
test/CodeGen/X86/sjlj-baseptr.ll
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D6388.16571.patch
Type: text/x-patch
Size: 7068 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20141124/140aa58c/attachment.bin>
More information about the llvm-commits
mailing list