- while (!BB->empty()) {
- Instruction *I = BB->back();
- // If this instruction is used, replace uses with an arbitrary
- // constant value. Because control flow can't get here, we don't care
- // what we replace the value with. Note that since this block is
- // unreachable, and all values contained within it must dominate their
- // uses, that all uses will eventually be removed.
- if (!I->use_empty()) ReplaceUsesWithConstant(I);
-
- // Remove the instruction from the basic block
- delete BB->getInstList().pop_back();
- }
- delete M->getBasicBlocks().remove(BBIt);
- return true;
- }
-
- // Check to see if this block has no instructions and only a single
- // successor. If so, replace block references with successor.
- BasicBlock::succ_iterator SI(BB->succ_begin());
- if (SI != BB->succ_end() && ++SI == BB->succ_end()) { // One succ?
- Instruction *I = BB->front();
- if (I->isTerminator()) { // Terminator is the only instruction!
- BasicBlock *Succ = *BB->succ_begin(); // There is exactly one successor
- //cerr << "Killing Trivial BB: \n" << BB;
-
- if (Succ != BB) { // Arg, don't hurt infinite loops!
- if (Succ->front()->isPHINode()) {
- // If our successor has PHI nodes, then we need to update them to
- // include entries for BB's predecessors, not for BB itself.
- //
- PropogatePredecessorsForPHIs(BB, Succ);
- }
-
- BB->replaceAllUsesWith(Succ);
- BB = M->getBasicBlocks().remove(BBIt);
-
- if (BB->hasName() && !Succ->hasName()) // Transfer name if we can
- Succ->setName(BB->getName());
- delete BB; // Delete basic block
-
- //cerr << "Method after removal: \n" << M;
- return true;
- }