summaryrefslogtreecommitdiff
path: root/lib/Transforms/Scalar/ADCE.cpp
diff options
context:
space:
mode:
authorDuncan Sands <baldrick@free.fr>2007-11-22 21:40:06 +0000
committerDuncan Sands <baldrick@free.fr>2007-11-22 21:40:06 +0000
commit5ef7be79e0a9e2c05f84e2a98b6969dcabebf15d (patch)
tree7c31fb9cacb7bcc58b13f388f8f382fe2a598467 /lib/Transforms/Scalar/ADCE.cpp
parent5d814864133fd3be4414a043341508bcc2caa7b5 (diff)
downloadllvm-5ef7be79e0a9e2c05f84e2a98b6969dcabebf15d.tar.gz
llvm-5ef7be79e0a9e2c05f84e2a98b6969dcabebf15d.tar.bz2
llvm-5ef7be79e0a9e2c05f84e2a98b6969dcabebf15d.tar.xz
Readonly/readnone functions are allowed to throw
exceptions, so don't turn invokes of them into calls. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44278 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/Scalar/ADCE.cpp')
-rw-r--r--lib/Transforms/Scalar/ADCE.cpp28
1 files changed, 1 insertions, 27 deletions
diff --git a/lib/Transforms/Scalar/ADCE.cpp b/lib/Transforms/Scalar/ADCE.cpp
index d5201b870f..e3bd3623ce 100644
--- a/lib/Transforms/Scalar/ADCE.cpp
+++ b/lib/Transforms/Scalar/ADCE.cpp
@@ -34,7 +34,7 @@ using namespace llvm;
STATISTIC(NumBlockRemoved, "Number of basic blocks removed");
STATISTIC(NumInstRemoved , "Number of instructions removed");
-STATISTIC(NumCallRemoved , "Number of calls and invokes removed");
+STATISTIC(NumCallRemoved , "Number of calls removed");
namespace {
//===----------------------------------------------------------------------===//
@@ -184,32 +184,6 @@ bool ADCE::doADCE() {
AliasAnalysis &AA = getAnalysis<AliasAnalysis>();
-
- // Iterate over all invokes in the function, turning invokes into calls if
- // they cannot throw.
- for (Function::iterator BB = Func->begin(), E = Func->end(); BB != E; ++BB)
- if (InvokeInst *II = dyn_cast<InvokeInst>(BB->getTerminator()))
- if (Function *F = II->getCalledFunction())
- if (AA.onlyReadsMemory(F)) {
- // The function cannot unwind. Convert it to a call with a branch
- // after it to the normal destination.
- SmallVector<Value*, 8> Args(II->op_begin()+3, II->op_end());
- CallInst *NewCall = new CallInst(F, Args.begin(), Args.end(), "", II);
- NewCall->takeName(II);
- NewCall->setCallingConv(II->getCallingConv());
- II->replaceAllUsesWith(NewCall);
- new BranchInst(II->getNormalDest(), II);
-
- // Update PHI nodes in the unwind destination
- II->getUnwindDest()->removePredecessor(BB);
- BB->getInstList().erase(II);
-
- if (NewCall->use_empty()) {
- BB->getInstList().erase(NewCall);
- ++NumCallRemoved;
- }
- }
-
// Iterate over all of the instructions in the function, eliminating trivially
// dead instructions, and marking instructions live that are known to be
// needed. Perform the walk in depth first order so that we avoid marking any