diff options
author | Duncan Sands <baldrick@free.fr> | 2007-11-22 21:40:06 +0000 |
---|---|---|
committer | Duncan Sands <baldrick@free.fr> | 2007-11-22 21:40:06 +0000 |
commit | 1c97d752dfa39e2ba7b9bbd9610aa8291f2741d5 (patch) | |
tree | a0e34c815624af565208a894d5252a4064215457 /llvm/lib/Transforms | |
parent | 5241695dca0c79f32be5f3a1d6b7d179efb91f0e (diff) | |
download | bcm5719-llvm-1c97d752dfa39e2ba7b9bbd9610aa8291f2741d5.tar.gz bcm5719-llvm-1c97d752dfa39e2ba7b9bbd9610aa8291f2741d5.zip |
Readonly/readnone functions are allowed to throw
exceptions, so don't turn invokes of them into
calls.
llvm-svn: 44278
Diffstat (limited to 'llvm/lib/Transforms')
-rw-r--r-- | llvm/lib/Transforms/Scalar/ADCE.cpp | 28 |
1 files changed, 1 insertions, 27 deletions
diff --git a/llvm/lib/Transforms/Scalar/ADCE.cpp b/llvm/lib/Transforms/Scalar/ADCE.cpp index d5201b870fc..e3bd3623ce2 100644 --- a/llvm/lib/Transforms/Scalar/ADCE.cpp +++ b/llvm/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 |