commit e8530ed26cff1e9f95aa5a066bf83b83af75d0a1
Author: ether <ethe...@gmail.com>
Date: Sun Apr 10 22:18:09 2011 +0800
RegionSimplify: Remember the modified region and print it.
diff --git a/lib/RegionSimplify.cpp b/lib/RegionSimplify.cpp
index f34f1f4..403d3ae 100644
--- a/lib/RegionSimplify.cpp
+++ b/lib/RegionSimplify.cpp
@@ -33,15 +33,13 @@ STATISTIC(NumExits, "The # of created exit edges");
namespace {
class RegionSimplify: public RegionPass {
- bool modified;
- Region *CR;
+ // Remember the modified region.
+ Region *r;
void createSingleEntryEdge(Region *R);
void createSingleExitEdge(Region *R);
public:
static char ID;
- explicit RegionSimplify() :
- RegionPass(ID) {
- }
+ explicit RegionSimplify() : RegionPass(ID), r(0) {}
virtual void print(raw_ostream &O, const Module *M) const;
@@ -61,19 +59,25 @@ namespace polly {
}
void RegionSimplify::print(raw_ostream &O, const Module *M) const {
- if (!modified)
- return;
+ if (r == 0) return;
+
+ BasicBlock *enteringBlock = r->getEnteringBlock();
+ BasicBlock *exitingBlock = r->getExitingBlock();
- BasicBlock *enteringBlock = CR->getEnteringBlock();
- BasicBlock *exitingBlock = CR->getExitingBlock();
+ O << "Region: " << r->getNameStr() << " Edges:\t";
- O << "\nRegion: [" << CR->getNameStr() << "] Edges:\n";
if (enteringBlock)
- O << " Entry: ]" << enteringBlock->getNameStr() << " => "
- << enteringBlock->getNameStr() << "]\n";
- if (exitingBlock)
- O << " Exit: [" << exitingBlock->getNameStr() << " => "
- << exitingBlock->getNameStr() << "[\n";
+ O << "Entering: [" << enteringBlock->getNameStr() << " -> "
+ << r->getEntry()->getName() << "], ";
+
+ if (exitingBlock) {
+ O << "Exiting: [" << exitingBlock->getNameStr() << " -> ";
+ if (r->getExit())
+ O << r->getExit()->getName();
+ else
+ O << "<return>";
+ O << "]";
+ }
O << "\n";
}
@@ -179,7 +183,7 @@ void RegionSimplify::createSingleExitEdge(Region *R) {
}
bool RegionSimplify::runOnRegion(Region *R, RGPassManager &RGM) {
- modified = false;
+ r = 0;
if (!R->isTopLevelRegion()) {
@@ -187,17 +191,17 @@ bool RegionSimplify::runOnRegion(Region *R, RGPassManager &RGM) {
if (!(R->getEnteringBlock())
&& (pred_begin(R->getEntry()) != pred_end(R->getEntry()))) {
createSingleEntryEdge(R);
- modified = true;
+ r = R;
++NumEntries;
}
// split exit node if the region has multiple exit edges
if (!(R->getExitingBlock())) {
createSingleExitEdge(R);
- modified = true;
+ r = R;
++NumExits;
}
}
- return modified;
+ return r != 0;
}