summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/IPO/PruneEH.cpp
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2016-01-23 05:41:22 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2016-01-23 05:41:22 +0000
commit146d781717bf3d13d5b5c75fcc8e76bf7eacc877 (patch)
tree846ddab2dc815d9918b566442b9f3aa39d06839a /llvm/lib/Transforms/IPO/PruneEH.cpp
parentf75257aaa61ffd511be8a990c42874f52468e92d (diff)
downloadbcm5719-llvm-146d781717bf3d13d5b5c75fcc8e76bf7eacc877.tar.gz
bcm5719-llvm-146d781717bf3d13d5b5c75fcc8e76bf7eacc877.zip
[PruneEH] Reuse code from removeUnwindEdge
PruneEH had functionality idential to removeUnwindEdge. Consolidate around removeUnwindEdge. No functionality change is intended. llvm-svn: 258609
Diffstat (limited to 'llvm/lib/Transforms/IPO/PruneEH.cpp')
-rw-r--r--llvm/lib/Transforms/IPO/PruneEH.cpp27
1 files changed, 2 insertions, 25 deletions
diff --git a/llvm/lib/Transforms/IPO/PruneEH.cpp b/llvm/lib/Transforms/IPO/PruneEH.cpp
index 3af4afb903f..8e126d4de4f 100644
--- a/llvm/lib/Transforms/IPO/PruneEH.cpp
+++ b/llvm/lib/Transforms/IPO/PruneEH.cpp
@@ -29,6 +29,7 @@
#include "llvm/IR/Instructions.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/LLVMContext.h"
+#include "llvm/Transforms/Utils/Local.h"
#include <algorithm>
using namespace llvm;
@@ -186,32 +187,8 @@ bool PruneEH::SimplifyFunction(Function *F) {
for (Function::iterator BB = F->begin(), E = F->end(); BB != E; ++BB) {
if (InvokeInst *II = dyn_cast<InvokeInst>(BB->getTerminator()))
if (II->doesNotThrow() && canSimplifyInvokeNoUnwind(F)) {
- SmallVector<Value*, 8> Args(II->arg_begin(), II->arg_end());
- SmallVector<OperandBundleDef, 1> OpBundles;
- II->getOperandBundlesAsDefs(OpBundles);
-
- // Insert a call instruction before the invoke.
- CallInst *Call = CallInst::Create(II->getCalledValue(), Args, OpBundles,
- "", II);
- Call->takeName(II);
- Call->setCallingConv(II->getCallingConv());
- Call->setAttributes(II->getAttributes());
- Call->setDebugLoc(II->getDebugLoc());
-
- // Anything that used the value produced by the invoke instruction
- // now uses the value produced by the call instruction. Note that we
- // do this even for void functions and calls with no uses so that the
- // callgraph edge is updated.
- II->replaceAllUsesWith(Call);
BasicBlock *UnwindBlock = II->getUnwindDest();
- UnwindBlock->removePredecessor(II->getParent());
-
- // Insert a branch to the normal destination right before the
- // invoke.
- BranchInst::Create(II->getNormalDest(), II);
-
- // Finally, delete the invoke instruction!
- BB->getInstList().pop_back();
+ removeUnwindEdge(&*BB);
// If the unwind block is now dead, nuke it.
if (pred_empty(UnwindBlock))
OpenPOWER on IntegriCloud