diff options
author | Chris Lattner <sabre@nondot.org> | 2009-10-13 18:13:05 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-10-13 18:13:05 +0000 |
commit | 19788ca686b3b9893a0565914d18c52a7458b6b0 (patch) | |
tree | 1a79a5ca93396ba5c4e484f9f3fc3b0e4aa68be6 /llvm/lib/Transforms | |
parent | 8d6d09379d7ae2abeb5caf7182ed77055e5c8641 (diff) | |
download | bcm5719-llvm-19788ca686b3b9893a0565914d18c52a7458b6b0.tar.gz bcm5719-llvm-19788ca686b3b9893a0565914d18c52a7458b6b0.zip |
change simplifycfg to not duplicate 'unwind' instructions. Hopefully
this will increase the likelihood of common code getting sunk towards
the unwind.
llvm-svn: 83996
Diffstat (limited to 'llvm/lib/Transforms')
-rw-r--r-- | llvm/lib/Transforms/Utils/SimplifyCFG.cpp | 17 |
1 files changed, 5 insertions, 12 deletions
diff --git a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp index 92b1335843d..6fd7d7bf9ae 100644 --- a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp +++ b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp @@ -1860,33 +1860,26 @@ bool llvm::SimplifyCFG(BasicBlock *BB) { } else if (isa<UnwindInst>(BB->begin())) { // Check to see if the first instruction in this block is just an unwind. // If so, replace any invoke instructions which use this as an exception - // destination with call instructions, and any unconditional branch - // predecessor with an unwind. + // destination with call instructions. // SmallVector<BasicBlock*, 8> Preds(pred_begin(BB), pred_end(BB)); while (!Preds.empty()) { BasicBlock *Pred = Preds.back(); - if (BranchInst *BI = dyn_cast<BranchInst>(Pred->getTerminator())) { - if (BI->isUnconditional()) { - Pred->getInstList().pop_back(); // nuke uncond branch - new UnwindInst(Pred->getContext(), Pred); // Use unwind. - Changed = true; - } - } else if (InvokeInst *II = dyn_cast<InvokeInst>(Pred->getTerminator())) + if (InvokeInst *II = dyn_cast<InvokeInst>(Pred->getTerminator())) if (II->getUnwindDest() == BB) { // Insert a new branch instruction before the invoke, because this - // is now a fall through... + // is now a fall through. BranchInst *BI = BranchInst::Create(II->getNormalDest(), II); Pred->getInstList().remove(II); // Take out of symbol table - // Insert the call now... + // Insert the call now. SmallVector<Value*,8> Args(II->op_begin()+3, II->op_end()); CallInst *CI = CallInst::Create(II->getCalledValue(), Args.begin(), Args.end(), II->getName(), BI); CI->setCallingConv(II->getCallingConv()); CI->setAttributes(II->getAttributes()); - // If the invoke produced a value, the Call now does instead + // If the invoke produced a value, the Call now does instead. II->replaceAllUsesWith(CI); delete II; Changed = true; |