summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/IPO/PruneEH.cpp
diff options
context:
space:
mode:
authorJoseph Tremoulet <jotrem@microsoft.com>2019-04-02 15:47:11 +0000
committerJoseph Tremoulet <jotrem@microsoft.com>2019-04-02 15:47:11 +0000
commitb69afa8e9ba51c2e136a9abc3222b8ec40cd128a (patch)
tree90a3f539e43c28822ba0a7fc0c363e6f6472c2be /llvm/lib/Transforms/IPO/PruneEH.cpp
parent838bba9c34bf1e5500c2e100327bc764afc8d367 (diff)
downloadbcm5719-llvm-b69afa8e9ba51c2e136a9abc3222b8ec40cd128a.tar.gz
bcm5719-llvm-b69afa8e9ba51c2e136a9abc3222b8ec40cd128a.zip
[PruneEH] Don't split musttail call from ret
Summary: When inserting an `unreachable` after a noreturn call, we must ensure that it's not a musttail call to avoid breaking the IR invariants for musttail calls. Reviewers: fedor.sergeev, majnemer Reviewed By: majnemer Subscribers: hiraditya, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D60079 llvm-svn: 357483
Diffstat (limited to 'llvm/lib/Transforms/IPO/PruneEH.cpp')
-rw-r--r--llvm/lib/Transforms/IPO/PruneEH.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/IPO/PruneEH.cpp b/llvm/lib/Transforms/IPO/PruneEH.cpp
index 46d42764fd2..ef7b43e8b55 100644
--- a/llvm/lib/Transforms/IPO/PruneEH.cpp
+++ b/llvm/lib/Transforms/IPO/PruneEH.cpp
@@ -203,7 +203,8 @@ static bool SimplifyFunction(Function *F, CallGraph &CG) {
for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; )
if (CallInst *CI = dyn_cast<CallInst>(I++))
- if (CI->doesNotReturn() && !isa<UnreachableInst>(I)) {
+ if (CI->doesNotReturn() && !CI->isMustTailCall() &&
+ !isa<UnreachableInst>(I)) {
// This call calls a function that cannot return. Insert an
// unreachable instruction after it and simplify the code. Do this
// by splitting the BB, adding the unreachable, then deleting the
OpenPOWER on IntegriCloud