OSDN Git Service

Merging r339636:
authorReid Kleckner <rnk@google.com>
Tue, 14 Aug 2018 17:35:35 +0000 (17:35 +0000)
committerReid Kleckner <rnk@google.com>
Tue, 14 Aug 2018 17:35:35 +0000 (17:35 +0000)
commit36b087d5b5501ffa2304766a1b6a5cf1264bca5b
tree2cfb52caf985f5afe388156760a6ba642c1b6e1b
parent9360946c87148bfd76c4cf5e39bbd98ef1d18bb7
Merging r339636:
------------------------------------------------------------------------
r339636 | rnk | 2018-08-13 18:24:35 -0700 (Mon, 13 Aug 2018) | 17 lines

[BasicAA] Don't assume tail calls with byval don't alias allocas

Summary:
Calls marked 'tail' cannot read or write allocas from the current frame
because the current frame might be destroyed by the time they run.
However, a tail call may use an alloca with byval. Calling with byval
copies the contents of the alloca into argument registers or stack
slots, so there is no lifetime issue. Tail calls never modify allocas,
so we can return just ModRefInfo::Ref.

Fixes PR38466, a longstanding bug.

Reviewers: hfinkel, nlewycky, gbiv, george.burgess.iv

Subscribers: hiraditya, llvm-commits

Differential Revision: https://reviews.llvm.org/D50679
------------------------------------------------------------------------

git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_70@339698 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Analysis/BasicAliasAnalysis.cpp
test/Analysis/BasicAA/tail-byval.ll [new file with mode: 0644]
test/Transforms/DeadStoreElimination/tail-byval.ll [new file with mode: 0644]