diff options
author | Nuno Lopes <nunoplopes@sapo.pt> | 2012-06-28 22:32:27 +0000 |
---|---|---|
committer | Nuno Lopes <nunoplopes@sapo.pt> | 2012-06-28 22:32:27 +0000 |
commit | 7f71f5f6b8eaea342306b0cddb04e273a8562db6 (patch) | |
tree | 5e06921edaf4534dd251d094f9b972ab3fb7a67b /lib | |
parent | c363c74c45756004f50c2bd67711400fd9026588 (diff) | |
download | external_llvm-7f71f5f6b8eaea342306b0cddb04e273a8562db6.zip external_llvm-7f71f5f6b8eaea342306b0cddb04e273a8562db6.tar.gz external_llvm-7f71f5f6b8eaea342306b0cddb04e273a8562db6.tar.bz2 |
make simplifyCFG erase invokes to readonly/readnone functions
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@159385 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Transforms/Scalar/SimplifyCFGPass.cpp | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/lib/Transforms/Scalar/SimplifyCFGPass.cpp b/lib/Transforms/Scalar/SimplifyCFGPass.cpp index 5943697..bdcf988 100644 --- a/lib/Transforms/Scalar/SimplifyCFGPass.cpp +++ b/lib/Transforms/Scalar/SimplifyCFGPass.cpp @@ -89,7 +89,6 @@ static void ChangeToUnreachable(Instruction *I, bool UseLLVMTrap) { /// ChangeToCall - Convert the specified invoke into a normal call. static void ChangeToCall(InvokeInst *II) { - BasicBlock *BB = II->getParent(); SmallVector<Value*, 8> Args(II->op_begin(), II->op_end() - 3); CallInst *NewCall = CallInst::Create(II->getCalledValue(), Args, "", II); NewCall->takeName(II); @@ -100,10 +99,7 @@ static void ChangeToCall(InvokeInst *II) { // Follow the call by a branch to the normal destination. BranchInst::Create(II->getNormalDest(), II); - - // Update PHI nodes in the unwind destination - II->getUnwindDest()->removePredecessor(BB); - BB->getInstList().erase(II); + II->eraseFromParent(); } static bool MarkAliveBlocks(BasicBlock *BB, @@ -163,7 +159,12 @@ static bool MarkAliveBlocks(BasicBlock *BB, ChangeToUnreachable(II, true); Changed = true; } else if (II->doesNotThrow()) { - ChangeToCall(II); + if (II->use_empty() && II->onlyReadsMemory()) { + // jump to the normal destination branch. + BranchInst::Create(II->getNormalDest(), II); + II->eraseFromParent(); + } else + ChangeToCall(II); Changed = true; } } |