mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-23 12:24:34 +00:00
Add some debug output to LoopSimplify.
llvm-svn: 97458
This commit is contained in:
parent
eeaf59db09
commit
3691dbc5cf
@ -51,6 +51,7 @@
|
||||
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
|
||||
#include "llvm/Transforms/Utils/Local.h"
|
||||
#include "llvm/Support/CFG.h"
|
||||
#include "llvm/Support/Debug.h"
|
||||
#include "llvm/ADT/SetOperations.h"
|
||||
#include "llvm/ADT/SetVector.h"
|
||||
#include "llvm/ADT/Statistic.h"
|
||||
@ -147,6 +148,11 @@ ReprocessLoop:
|
||||
// Delete each unique out-of-loop (and thus dead) predecessor.
|
||||
for (SmallPtrSet<BasicBlock *, 4>::iterator I = BadPreds.begin(),
|
||||
E = BadPreds.end(); I != E; ++I) {
|
||||
|
||||
DEBUG(dbgs() << "LoopSimplify: Deleting edge from dead predecessor ";
|
||||
WriteAsOperand(dbgs(), *I, false);
|
||||
dbgs() << "\n");
|
||||
|
||||
// Inform each successor of each dead pred.
|
||||
for (succ_iterator SI = succ_begin(*I), SE = succ_end(*I); SI != SE; ++SI)
|
||||
(*SI)->removePredecessor(*I);
|
||||
@ -169,6 +175,11 @@ ReprocessLoop:
|
||||
if (BranchInst *BI = dyn_cast<BranchInst>((*I)->getTerminator()))
|
||||
if (BI->isConditional()) {
|
||||
if (UndefValue *Cond = dyn_cast<UndefValue>(BI->getCondition())) {
|
||||
|
||||
DEBUG(dbgs() << "LoopSimplify: Resolving \"br i1 undef\" to exit in ";
|
||||
WriteAsOperand(dbgs(), *I, false);
|
||||
dbgs() << "\n");
|
||||
|
||||
BI->setCondition(ConstantInt::get(Cond->getType(),
|
||||
!L->contains(BI->getSuccessor(0))));
|
||||
Changed = true;
|
||||
@ -296,6 +307,11 @@ ReprocessLoop:
|
||||
|
||||
// Success. The block is now dead, so remove it from the loop,
|
||||
// update the dominator tree and dominance frontier, and delete it.
|
||||
|
||||
DEBUG(dbgs() << "LoopSimplify: Eliminating exiting block ";
|
||||
WriteAsOperand(dbgs(), ExitingBlock, false);
|
||||
dbgs() << "\n");
|
||||
|
||||
assert(pred_begin(ExitingBlock) == pred_end(ExitingBlock));
|
||||
Changed = true;
|
||||
LI->removeBlock(ExitingBlock);
|
||||
@ -349,6 +365,10 @@ BasicBlock *LoopSimplify::InsertPreheaderForLoop(Loop *L) {
|
||||
SplitBlockPredecessors(Header, &OutsideBlocks[0], OutsideBlocks.size(),
|
||||
".preheader", this);
|
||||
|
||||
DEBUG(dbgs() << "LoopSimplify: Creating pre-header ";
|
||||
WriteAsOperand(dbgs(), NewBB, false);
|
||||
dbgs() << "\n");
|
||||
|
||||
// Make sure that NewBB is put someplace intelligent, which doesn't mess up
|
||||
// code layout too horribly.
|
||||
PlaceSplitBlockCarefully(NewBB, OutsideBlocks, L);
|
||||
@ -374,6 +394,10 @@ BasicBlock *LoopSimplify::RewriteLoopExitBlock(Loop *L, BasicBlock *Exit) {
|
||||
LoopBlocks.size(), ".loopexit",
|
||||
this);
|
||||
|
||||
DEBUG(dbgs() << "LoopSimplify: Creating dedicated exit block ";
|
||||
WriteAsOperand(dbgs(), NewBB, false);
|
||||
dbgs() << "\n");
|
||||
|
||||
return NewBB;
|
||||
}
|
||||
|
||||
@ -494,6 +518,8 @@ Loop *LoopSimplify::SeparateNestedLoop(Loop *L, LPPassManager &LPM) {
|
||||
OuterLoopPreds.push_back(PN->getIncomingBlock(i));
|
||||
}
|
||||
|
||||
DEBUG(dbgs() << "LoopSimplify: Splitting out a new outer loop\n");
|
||||
|
||||
BasicBlock *Header = L->getHeader();
|
||||
BasicBlock *NewBB = SplitBlockPredecessors(Header, &OuterLoopPreds[0],
|
||||
OuterLoopPreds.size(),
|
||||
@ -588,6 +614,10 @@ LoopSimplify::InsertUniqueBackedgeBlock(Loop *L, BasicBlock *Preheader) {
|
||||
Header->getName()+".backedge", F);
|
||||
BranchInst *BETerminator = BranchInst::Create(Header, BEBlock);
|
||||
|
||||
DEBUG(dbgs() << "LoopSimplify: Inserting unique backedge block ";
|
||||
WriteAsOperand(dbgs(), BEBlock, false);
|
||||
dbgs() << "\n");
|
||||
|
||||
// Move the new backedge block to right after the last backedge block.
|
||||
Function::iterator InsertPos = BackedgeBlocks.back(); ++InsertPos;
|
||||
F->getBasicBlockList().splice(InsertPos, F->getBasicBlockList(), BEBlock);
|
||||
|
Loading…
x
Reference in New Issue
Block a user