[llvm-commits] [llvm] r48047 - in /llvm/trunk: include/llvm/BasicBlock.h lib/Transforms/Scalar/SCCP.cpp
Nick Lewycky
nicholas at mxc.ca
Fri Mar 7 23:48:42 PST 2008
Author: nicholas
Date: Sat Mar 8 01:48:41 2008
New Revision: 48047
URL: http://llvm.org/viewvc/llvm-project?rev=48047&view=rev
Log:
Not all users of a BB are Instructions any more.
Modified:
llvm/trunk/include/llvm/BasicBlock.h
llvm/trunk/lib/Transforms/Scalar/SCCP.cpp
Modified: llvm/trunk/include/llvm/BasicBlock.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/BasicBlock.h?rev=48047&r1=48046&r2=48047&view=diff
==============================================================================
--- llvm/trunk/include/llvm/BasicBlock.h (original)
+++ llvm/trunk/include/llvm/BasicBlock.h Sat Mar 8 01:48:41 2008
@@ -95,11 +95,6 @@
const Function *getParent() const { return Parent; }
Function *getParent() { return Parent; }
- /// use_back - Specialize the methods defined in Value, as we know that an
- /// BasicBlock can only be used by Instructions (specifically PHI and terms).
- Instruction *use_back() { return cast<Instruction>(*use_begin());}
- const Instruction *use_back() const { return cast<Instruction>(*use_begin());}
-
/// getTerminator() - If this is a well formed basic block, then this returns
/// a pointer to the terminator instruction. If it is not, then you get a
/// null pointer back.
@@ -187,6 +182,9 @@
/// update the PHI nodes that reside in the block. Note that this should be
/// called while the predecessor still refers to this block.
///
+ /// DontDeleteUselessPHIs will keep PHIs that have one value or the same
+ /// value for all entries.
+ ///
void removePredecessor(BasicBlock *Pred, bool DontDeleteUselessPHIs = false);
/// splitBasicBlock - This splits a basic block into two at the specified
Modified: llvm/trunk/lib/Transforms/Scalar/SCCP.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/SCCP.cpp?rev=48047&r1=48046&r2=48047&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/SCCP.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/SCCP.cpp Sat Mar 8 01:48:41 2008
@@ -45,7 +45,7 @@
STATISTIC(NumInstRemoved, "Number of instructions removed");
STATISTIC(NumDeadBlocks , "Number of basic blocks unreachable");
-STATISTIC(IPNumInstRemoved, "Number ofinstructions removed by IPSCCP");
+STATISTIC(IPNumInstRemoved, "Number of instructions removed by IPSCCP");
STATISTIC(IPNumDeadBlocks , "Number of basic blocks unreachable by IPSCCP");
STATISTIC(IPNumArgsElimed ,"Number of arguments constant propagated by IPSCCP");
STATISTIC(IPNumGlobalConst, "Number of globals found to be constant by IPSCCP");
@@ -1637,6 +1637,11 @@
// If there are any PHI nodes in this successor, drop entries for BB now.
BasicBlock *DeadBB = BlocksToErase[i];
while (!DeadBB->use_empty()) {
+ if (BasicBlock *PredBB = dyn_cast<BasicBlock>(DeadBB->use_back())) {
+ PredBB->setUnwindDest(NULL);
+ continue;
+ }
+
Instruction *I = cast<Instruction>(DeadBB->use_back());
bool Folded = ConstantFoldTerminator(I->getParent());
if (!Folded) {
More information about the llvm-commits
mailing list