mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-14 15:39:06 +00:00
Not all users of a BB are Instructions any more.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@48047 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
6456d8639b
commit
6c36a0f9ee
@ -95,11 +95,6 @@ public:
|
|||||||
const Function *getParent() const { return Parent; }
|
const Function *getParent() const { return Parent; }
|
||||||
Function *getParent() { 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
|
/// 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
|
/// a pointer to the terminator instruction. If it is not, then you get a
|
||||||
/// null pointer back.
|
/// null pointer back.
|
||||||
@ -187,6 +182,9 @@ public:
|
|||||||
/// update the PHI nodes that reside in the block. Note that this should be
|
/// update the PHI nodes that reside in the block. Note that this should be
|
||||||
/// called while the predecessor still refers to this block.
|
/// 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);
|
void removePredecessor(BasicBlock *Pred, bool DontDeleteUselessPHIs = false);
|
||||||
|
|
||||||
/// splitBasicBlock - This splits a basic block into two at the specified
|
/// splitBasicBlock - This splits a basic block into two at the specified
|
||||||
|
@ -45,7 +45,7 @@ using namespace llvm;
|
|||||||
STATISTIC(NumInstRemoved, "Number of instructions removed");
|
STATISTIC(NumInstRemoved, "Number of instructions removed");
|
||||||
STATISTIC(NumDeadBlocks , "Number of basic blocks unreachable");
|
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(IPNumDeadBlocks , "Number of basic blocks unreachable by IPSCCP");
|
||||||
STATISTIC(IPNumArgsElimed ,"Number of arguments constant propagated by IPSCCP");
|
STATISTIC(IPNumArgsElimed ,"Number of arguments constant propagated by IPSCCP");
|
||||||
STATISTIC(IPNumGlobalConst, "Number of globals found to be constant by IPSCCP");
|
STATISTIC(IPNumGlobalConst, "Number of globals found to be constant by IPSCCP");
|
||||||
@ -1637,6 +1637,11 @@ bool IPSCCP::runOnModule(Module &M) {
|
|||||||
// If there are any PHI nodes in this successor, drop entries for BB now.
|
// If there are any PHI nodes in this successor, drop entries for BB now.
|
||||||
BasicBlock *DeadBB = BlocksToErase[i];
|
BasicBlock *DeadBB = BlocksToErase[i];
|
||||||
while (!DeadBB->use_empty()) {
|
while (!DeadBB->use_empty()) {
|
||||||
|
if (BasicBlock *PredBB = dyn_cast<BasicBlock>(DeadBB->use_back())) {
|
||||||
|
PredBB->setUnwindDest(NULL);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
Instruction *I = cast<Instruction>(DeadBB->use_back());
|
Instruction *I = cast<Instruction>(DeadBB->use_back());
|
||||||
bool Folded = ConstantFoldTerminator(I->getParent());
|
bool Folded = ConstantFoldTerminator(I->getParent());
|
||||||
if (!Folded) {
|
if (!Folded) {
|
||||||
|
Loading…
Reference in New Issue
Block a user