[PATCH] D21325: [X86] Fix tailcall return address clobber bug
Magnus Lång via llvm-commits
llvm-commits at lists.llvm.org
Tue Jun 14 07:30:56 PDT 2016
margnus1 created this revision.
margnus1 added a reviewer: qcolombet.
margnus1 added a subscriber: llvm-commits.
This bug (PR28124) was introduced by r237977, which refactored the tail call
sequence to be generated in two passes instead of one.
Unfortunately, the stack adjustment produced by the first pass was not
recognized by X86FrameLowering::mergeSPUpdates() in all cases, causing
code such as the following, which clobbers the return address, to be
generated:
popl %edi
popl %edi
pushl %eax
jmp tailcallee # TAILCALL
By generalizing X86FrameLowering::mergeSPUpdates() to recognize a sequence of
pop instructions as a stack adjustment when the registers are not used by the
following return instruction, this bug is fixed.
http://reviews.llvm.org/D21325
Files:
lib/Target/X86/X86FrameLowering.cpp
test/CodeGen/X86/hipe-cc.ll
test/CodeGen/X86/hipe-cc64.ll
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D21325.60682.patch
Type: text/x-patch
Size: 4896 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160614/525e04e9/attachment.bin>
More information about the llvm-commits
mailing list