[PATCH] D18680: ARM, AArch64, X86: Check preserved registers for tail calls.

Matthias Braun via llvm-commits llvm-commits at lists.llvm.org
Thu Mar 31 19:53:25 PDT 2016


MatzeB created this revision.
MatzeB added reviewers: t.p.northover, qcolombet.
MatzeB added subscribers: llvm-commits, manmanren.
MatzeB set the repository for this revision to rL LLVM.
Herald added subscribers: mcrosier, rengolin, aemerson.

We can only perform a tail call to a callee that preserves all the
registers that the caller needs to preserve.

This situation happens with calling conventions like preserver_mostcc or
cxx_fast_tls. It was explicitely handled for the fast_tls case and failing for preserve_most. This patch generalizes
the check to any calling convention.

Related to rdar://24207743

Repository:
  rL LLVM

http://reviews.llvm.org/D18680

Files:
  include/llvm/Target/TargetRegisterInfo.h
  lib/CodeGen/TargetRegisterInfo.cpp
  lib/Target/AArch64/AArch64ISelLowering.cpp
  lib/Target/ARM/ARMISelLowering.cpp
  lib/Target/X86/X86ISelLowering.cpp
  test/CodeGen/AArch64/tailcall-ccmismatch.ll
  test/CodeGen/ARM/cxx-tlscc.ll

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D18680.52323.patch
Type: text/x-patch
Size: 6977 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160401/65189fdd/attachment.bin>


More information about the llvm-commits mailing list