summaryrefslogtreecommitdiff
path: root/lib/Transforms/Utils/SimplifyCFG.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2008-02-18 07:42:56 +0000
committerChris Lattner <sabre@nondot.org>2008-02-18 07:42:56 +0000
commit8244243a31d636ce8838a81d4c402274fd391d2b (patch)
tree1f4f65a398e4844fdef61cb888f74b0b4739a1c7 /lib/Transforms/Utils/SimplifyCFG.cpp
parentbf1d8a7099bb23e9dc92b56fe2564cbc2a71b063 (diff)
downloadllvm-8244243a31d636ce8838a81d4c402274fd391d2b.tar.gz
llvm-8244243a31d636ce8838a81d4c402274fd391d2b.tar.bz2
llvm-8244243a31d636ce8838a81d4c402274fd391d2b.tar.xz
switch simplifycfg from using vectors for most things to smallvectors,
this speeds it up 2.3% on eon. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47261 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/Utils/SimplifyCFG.cpp')
-rw-r--r--lib/Transforms/Utils/SimplifyCFG.cpp26
1 files changed, 12 insertions, 14 deletions
diff --git a/lib/Transforms/Utils/SimplifyCFG.cpp b/lib/Transforms/Utils/SimplifyCFG.cpp
index f19adbd263..c89ec60d69 100644
--- a/lib/Transforms/Utils/SimplifyCFG.cpp
+++ b/lib/Transforms/Utils/SimplifyCFG.cpp
@@ -158,7 +158,7 @@ static bool TryToSimplifyUncondBranchFromEmptyBlock(BasicBlock *BB,
// If there is more than one pred of succ, and there are PHI nodes in
// the successor, then we need to add incoming edges for the PHI nodes
//
- const std::vector<BasicBlock*> BBPreds(pred_begin(BB), pred_end(BB));
+ const SmallVector<BasicBlock*, 16> BBPreds(pred_begin(BB), pred_end(BB));
// Loop over all of the PHI nodes in the successor of BB.
for (BasicBlock::iterator I = Succ->begin(); isa<PHINode>(I); ++I) {
@@ -174,17 +174,15 @@ static bool TryToSimplifyUncondBranchFromEmptyBlock(BasicBlock *BB,
PN->addIncoming(OldValPN->getIncomingValue(i),
OldValPN->getIncomingBlock(i));
} else {
- for (std::vector<BasicBlock*>::const_iterator PredI = BBPreds.begin(),
- End = BBPreds.end(); PredI != End; ++PredI) {
- // Add an incoming value for each of the new incoming values...
- PN->addIncoming(OldVal, *PredI);
- }
+ // Add an incoming value for each of the new incoming values.
+ for (unsigned i = 0, e = BBPreds.size(); i != e; ++i)
+ PN->addIncoming(OldVal, BBPreds[i]);
}
}
}
if (isa<PHINode>(&BB->front())) {
- std::vector<BasicBlock*>
+ SmallVector<BasicBlock*, 16>
OldSuccPreds(pred_begin(Succ), pred_end(Succ));
// Move all PHI nodes in BB to Succ if they are alive, otherwise
@@ -464,7 +462,7 @@ static bool GatherValueComparisons(Instruction *Cond, Value *&CompVal,
static void ErasePossiblyDeadInstructionTree(Instruction *I) {
if (!isInstructionTriviallyDead(I)) return;
- std::vector<Instruction*> InstrsToInspect;
+ SmallVector<Instruction*, 16> InstrsToInspect;
InstrsToInspect.push_back(I);
while (!InstrsToInspect.empty()) {
@@ -713,7 +711,7 @@ static bool FoldValueComparisonIntoPredecessors(TerminatorInst *TI) {
assert(CV && "Not a comparison?");
bool Changed = false;
- std::vector<BasicBlock*> Preds(pred_begin(BB), pred_end(BB));
+ SmallVector<BasicBlock*, 16> Preds(pred_begin(BB), pred_end(BB));
while (!Preds.empty()) {
BasicBlock *Pred = Preds.back();
Preds.pop_back();
@@ -733,7 +731,7 @@ static bool FoldValueComparisonIntoPredecessors(TerminatorInst *TI) {
// Based on whether the default edge from PTI goes to BB or not, fill in
// PredCases and PredDefault with the new switch cases we would like to
// build.
- std::vector<BasicBlock*> NewSuccessors;
+ SmallVector<BasicBlock*, 8> NewSuccessors;
if (PredDefault == BB) {
// If this is the default destination from PTI, only the edges in TI
@@ -1233,8 +1231,8 @@ bool llvm::SimplifyCFG(BasicBlock *BB) {
BasicBlock::iterator BBI = BB->getTerminator();
if (BBI == BB->begin() || isa<PHINode>(--BBI)) {
// Find predecessors that end with branches.
- std::vector<BasicBlock*> UncondBranchPreds;
- std::vector<BranchInst*> CondBranchPreds;
+ SmallVector<BasicBlock*, 8> UncondBranchPreds;
+ SmallVector<BranchInst*, 8> CondBranchPreds;
for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI) {
TerminatorInst *PTI = (*PI)->getTerminator();
if (BranchInst *BI = dyn_cast<BranchInst>(PTI))
@@ -1357,7 +1355,7 @@ bool llvm::SimplifyCFG(BasicBlock *BB) {
// destination with call instructions, and any unconditional branch
// predecessor with an unwind.
//
- std::vector<BasicBlock*> Preds(pred_begin(BB), pred_end(BB));
+ 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())) {
@@ -1676,7 +1674,7 @@ bool llvm::SimplifyCFG(BasicBlock *BB) {
// If the unreachable instruction is the first in the block, take a gander
// at all of the predecessors of this instruction, and simplify them.
if (&BB->front() == Unreachable) {
- std::vector<BasicBlock*> Preds(pred_begin(BB), pred_end(BB));
+ SmallVector<BasicBlock*, 8> Preds(pred_begin(BB), pred_end(BB));
for (unsigned i = 0, e = Preds.size(); i != e; ++i) {
TerminatorInst *TI = Preds[i]->getTerminator();