enabled with the -debug command line option.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2721
91177308-0d34-0410-b5e6-
96231b3b80d8
BasicBlock* BB1=ed.getFirst()->getElement();
BasicBlock* BB2=ed.getSecond()->getElement();
BasicBlock* BB1=ed.getFirst()->getElement();
BasicBlock* BB2=ed.getSecond()->getElement();
-#ifdef DEBUG_PATH_PROFILES
- //debugging info
- cerr<<"Edges with codes ######################\n";
- cerr<<BB1->getName()<<"->"<<BB2->getName()<<"\n";
- cerr<<"########################\n";
-#endif
+ DEBUG(cerr << "Edges with codes ######################\n";
+ cerr << BB1->getName() << "->" << BB2->getName() << "\n";
+ cerr << "########################\n");
//We need to insert a BB between BB1 and BB2
TerminatorInst *TI=BB1->getTerminator();
//We need to insert a BB between BB1 and BB2
TerminatorInst *TI=BB1->getTerminator();
BB2Inst!=BBend; ++BB2Inst){
if(PHINode *phiInst=dyn_cast<PHINode>(*BB2Inst)){
BB2Inst!=BBend; ++BB2Inst){
if(PHINode *phiInst=dyn_cast<PHINode>(*BB2Inst)){
-#ifdef DEBUG_PATH_PROFILES
- cerr<<"YYYYYYYYYYYYYYYYY\n";
-#endif
-
+ DEBUG(cerr<<"YYYYYYYYYYYYYYYYY\n");
+
int bbIndex=phiInst->getBasicBlockIndex(BB1);
if(bbIndex>=0)
phiInst->setIncomingBlock(bbIndex, newBB);
int bbIndex=phiInst->getBasicBlockIndex(BB1);
if(bbIndex>=0)
phiInst->setIncomingBlock(bbIndex, newBB);
//keep pulling out vertex of min wt from vt
while(!vt.empty()){
Node *u=*(min_element(vt.begin(), vt.end(), compare_nodes()));
//keep pulling out vertex of min wt from vt
while(!vt.empty()){
Node *u=*(min_element(vt.begin(), vt.end(), compare_nodes()));
-#ifdef DEBUG_PATH_PROFILES
- cerr<<"popped wt"<<(u)->getWeight()<<"\n";
- printNode(u);
-#endif
+ DEBUG(cerr<<"popped wt"<<(u)->getWeight()<<"\n";
+ printNode(u));
+
if(parent[u]!=NULL){ //so not root
Edge edge(parent[u],u, ed_weight[u]); //assign edge in spanning tree
st->addEdge(edge,ed_weight[u]);
if(parent[u]!=NULL){ //so not root
Edge edge(parent[u],u, ed_weight[u]); //assign edge in spanning tree
st->addEdge(edge,ed_weight[u]);
-#ifdef DEBUG_PATH_PROFILES
- cerr<<"added:\n";
- printEdge(edge);
-#endif
+
+ DEBUG(cerr<<"added:\n";
+ printEdge(edge));
-#ifdef DEBUG_PATH_PROFILES
- cerr<<"wt:v->wt"<<weight<<":"<<v->getWeight()<<"\n";
- printNode(v);cerr<<"node wt:"<<(*v).weight<<"\n";
-#endif
+ DEBUG(cerr<<"wt:v->wt"<<weight<<":"<<v->getWeight()<<"\n";
+ printNode(v);cerr<<"node wt:"<<(*v).weight<<"\n");
+
//so if v in in vt, change wt(v) to wt(u->v)
//only if wt(u->v)<wt(v)
if(contains && weight<v->getWeight()){
parent[v]=u;
ed_weight[v]=weight;
v->setWeight(weight);
//so if v in in vt, change wt(v) to wt(u->v)
//only if wt(u->v)<wt(v)
if(contains && weight<v->getWeight()){
parent[v]=u;
ed_weight[v]=weight;
v->setWeight(weight);
-#ifdef DEBUG_PATH_PROFILES
- cerr<<v->getWeight()<<":Set weight------\n";
- printGraph();
- printEdge(Edge(u,v,weight));
-#endif
+
+ DEBUG(cerr<<v->getWeight()<<":Set weight------\n";
+ printGraph();
+ printEdge(Edge(u,v,weight)));
for(nodeList::iterator NLI=nl.begin(), NLE=nl.end(); NLI!=NLE; ++NLI){
Edge ed(NLI->element, *NI, NLI->weight);
if(!hasEdgeAndWt(ed)){
for(nodeList::iterator NLI=nl.begin(), NLE=nl.end(); NLI!=NLE; ++NLI){
Edge ed(NLI->element, *NI, NLI->weight);
if(!hasEdgeAndWt(ed)){
-#ifdef DEBUG_PATH_PROFILES
- cerr<<"######doesn't hv\n";
- printEdge(ed);
-#endif
+ DEBUG(cerr<<"######doesn't hv\n";
+ printEdge(ed));
map<Edge, getEdgeCode *> &insertions){
typedef vector<Edge >::const_iterator vec_iter;
map<Edge, getEdgeCode *> &insertions){
typedef vector<Edge >::const_iterator vec_iter;
-#ifdef DEBUG_PATH_PROFILES
- //print all back, st and ex dummy
- cerr<<"BackEdges---------------\n";
- for(vec_iter VI=be.begin(); VI!=be.end(); ++VI)
- printEdge(*VI);
- cerr<<"StEdges---------------\n";
- for(vec_iter VI=stDummy.begin(); VI!=stDummy.end(); ++VI)
- printEdge(*VI);
- cerr<<"ExitEdges---------------\n";
- for(vec_iter VI=exDummy.begin(); VI!=exDummy.end(); ++VI)
- printEdge(*VI);
- cerr<<"------end all edges\n";
-#endif
+ DEBUG( //print all back, st and ex dummy
+ cerr<<"BackEdges---------------\n";
+ for(vec_iter VI=be.begin(); VI!=be.end(); ++VI)
+ printEdge(*VI);
+ cerr<<"StEdges---------------\n";
+ for(vec_iter VI=stDummy.begin(); VI!=stDummy.end(); ++VI)
+ printEdge(*VI);
+ cerr<<"ExitEdges---------------\n";
+ for(vec_iter VI=exDummy.begin(); VI!=exDummy.end(); ++VI)
+ printEdge(*VI);
+ cerr<<"------end all edges\n");
std::vector<Edge> toErase;
for(map<Edge,getEdgeCode *>::iterator MI=insertions.begin(),
std::vector<Edge> toErase;
for(map<Edge,getEdgeCode *>::iterator MI=insertions.begin(),
Edge ed=MI->first;
getEdgeCode *edCd=MI->second;
bool dummyHasIt=false;
Edge ed=MI->first;
getEdgeCode *edCd=MI->second;
bool dummyHasIt=false;
-#ifdef DEBUG_PATH_PROFILES
- cerr<<"Current edge considered---\n";
- printEdge(ed);
-#endif
+
+ DEBUG(cerr<<"Current edge considered---\n";
+ printEdge(ed));
+
//now check if stDummy has ed
for(vec_iter VI=stDummy.begin(), VE=stDummy.end(); VI!=VE && !dummyHasIt;
++VI){
if(*VI==ed){
//now check if stDummy has ed
for(vec_iter VI=stDummy.begin(), VE=stDummy.end(); VI!=VE && !dummyHasIt;
++VI){
if(*VI==ed){
-#ifdef DEBUG_PATH_PROFILES
- cerr<<"Edge matched with stDummy\n";
-#endif
+ DEBUG(cerr<<"Edge matched with stDummy\n");
+
dummyHasIt=true;
bool dummyInBe=false;
//dummy edge with code
dummyHasIt=true;
bool dummyInBe=false;
//dummy edge with code
Node *dm=ed.getSecond();
if(*dm==*st){
//so this is the back edge to use
Node *dm=ed.getSecond();
if(*dm==*st){
//so this is the back edge to use
-#ifdef DEBUG_PATH_PROFILES
- cerr<<"Moving to backedge\n";
- printEdge(backEdge);
-#endif
+ DEBUG(cerr<<"Moving to backedge\n";
+ printEdge(backEdge));
+
getEdgeCode *ged=new getEdgeCode();
ged->setCdIn(edCd);
toErase.push_back(ed);
getEdgeCode *ged=new getEdgeCode();
ged->setCdIn(edCd);
toErase.push_back(ed);
++VI){
if(*VI==ed){
inExDummy=true;
++VI){
if(*VI==ed){
inExDummy=true;
-#ifdef DEBUG_PATH_PROFILES
- cerr<<"Edge matched with exDummy\n";
-#endif
+ DEBUG(cerr<<"Edge matched with exDummy\n");
bool dummyInBe2=false;
//dummy edge with code
for(vec_iter BE=be.begin(), BEE=be.end(); BE!=BEE && !dummyInBe2;
bool dummyInBe2=false;
//dummy edge with code
for(vec_iter BE=be.begin(), BEE=be.end(); BE!=BEE && !dummyInBe2;
-#ifdef DEBUG_PATH_PROFILES
- cerr<<"size of deletions: "<<toErase.size()<<"\n";
-#endif
+ DEBUG(cerr<<"size of deletions: "<<toErase.size()<<"\n");
for(vector<Edge >::iterator vmi=toErase.begin(), vme=toErase.end(); vmi!=vme;
++vmi)
insertions.erase(*vmi);
for(vector<Edge >::iterator vmi=toErase.begin(), vme=toErase.end(); vmi!=vme;
++vmi)
insertions.erase(*vmi);
-#ifdef DEBUG_PATH_PROFILES
- cerr<<"SIZE OF INSERTIONS AFTER DEL "<<insertions.size()<<"\n";
-#endif
+ DEBUG(cerr<<"SIZE OF INSERTIONS AFTER DEL "<<insertions.size()<<"\n");
}
//Do graph processing: to determine minimal edge increments,
}
//Do graph processing: to determine minimal edge increments,
//step 1-3 are already done on the graph when this function is called
//step 1-3 are already done on the graph when this function is called
-#ifdef DEBUG_PATH_PROFILES
- printGraph(g);
-#endif
+ DEBUG(printGraph(g));
+
//step 4: Get Max spanning tree of graph
//now insert exit to root edge
//step 4: Get Max spanning tree of graph
//now insert exit to root edge
//make g2 undirectional: this gives a better
//maximal spanning tree
g2.makeUnDirectional();
//make g2 undirectional: this gives a better
//maximal spanning tree
g2.makeUnDirectional();
-#ifdef DEBUG_PATH_PROFILES
- printGraph(g2);
-#endif
+ DEBUG(printGraph(g2));
+
Graph *t=g2.getMaxSpanningTree();
Graph *t=g2.getMaxSpanningTree();
-#ifdef DEBUG_PATH_PROFILES
- printGraph(*t);
-#endif
+ DEBUG(printGraph(*t));
+
//now edges of tree t have weights reversed
//(negative) because the algorithm used
//to find max spanning tree is
//now edges of tree t have weights reversed
//(negative) because the algorithm used
//to find max spanning tree is
//the tree so that now, all edge directions in the tree match
//the edge directions of corresponding edges in the directed graph
removeTreeEdges(g, *t);
//the tree so that now, all edge directions in the tree match
//the edge directions of corresponding edges in the directed graph
removeTreeEdges(g, *t);
-#ifdef DEBUG_PATH_PROFILES
- cerr<<"Spanning tree---------\n";
- printGraph(*t);
- cerr<<"-------end spanning tree\n";
-#endif
+
+ DEBUG(cerr<<"Spanning tree---------\n";
+ printGraph(*t);
+ cerr<<"-------end spanning tree\n");
+
//now remove the exit->root node
//and re-add it with weight 0
//since infinite weight is kinda confusing
//now remove the exit->root node
//and re-add it with weight 0
//since infinite weight is kinda confusing
-#ifdef DEBUG_PATH_PROFILES
- printGraph(g);
- printGraph(*t);
-#endif
+ DEBUG(printGraph(g);
+ printGraph(*t));
+
//step 5: Get edge increments
//Now we select a subset of all edges
//step 5: Get edge increments
//Now we select a subset of all edges
//if we consider just this subset, it still represents
//the path sum along any path in the graph
map<Edge, int> increment=getEdgeIncrements(g,*t);
//if we consider just this subset, it still represents
//the path sum along any path in the graph
map<Edge, int> increment=getEdgeIncrements(g,*t);
-#ifdef DEBUG_PATH_PROFILES
- //print edge increments for debugging
- for(map<Edge, int>::iterator M_I=increment.begin(), M_E=increment.end();
- M_I!=M_E; ++M_I){
- printEdge(M_I->first);
- cerr<<"Increment for above:"<<M_I->second<<"\n";
- }
-#endif
+
+ DEBUG(//print edge increments for debugging
+ for(map<Edge, int>::iterator MI=increment.begin(), ME = increment.end();
+ MI != ME; ++MI) {
+ printEdge(MI->first);
+ cerr << "Increment for above:" << MI->second << "\n";
+ });
//step 6: Get code insertions
//step 6: Get code insertions
map<Edge, getEdgeCode *> codeInsertions;
getCodeInsertions(g, codeInsertions, chords,increment);
map<Edge, getEdgeCode *> codeInsertions;
getCodeInsertions(g, codeInsertions, chords,increment);
-#ifdef DEBUG_PATH_PROFILES
- //print edges with code for debugging
- cerr<<"Code inserted in following---------------\n";
- for(map<Edge, getEdgeCode *>::iterator cd_i=codeInsertions->begin(),
- cd_e=codeInsertions->end(); cd_i!=cd_e; ++cd_i){
- printEdge(cd_i->first);
- cerr<<cd_i->second->getCond()<<":"<<cd_i->second->getInc()<<"\n";
- }
- cerr<<"-----end insertions\n";
-#endif
+ DEBUG (//print edges with code for debugging
+ cerr<<"Code inserted in following---------------\n";
+ for(map<Edge, getEdgeCode *>::iterator cd_i=codeInsertions.begin(),
+ cd_e=codeInsertions.end(); cd_i!=cd_e; ++cd_i){
+ printEdge(cd_i->first);
+ cerr<<cd_i->second->getCond()<<":"<<cd_i->second->getInc()<<"\n";
+ }
+ cerr<<"-----end insertions\n");
+
//step 7: move code on dummy edges over to the back edges
//Move the incoming dummy edge code and outgoing dummy
//edge code over to the corresponding back edge
moveDummyCode(stDummy, exDummy, be, codeInsertions);
//step 7: move code on dummy edges over to the back edges
//Move the incoming dummy edge code and outgoing dummy
//edge code over to the corresponding back edge
moveDummyCode(stDummy, exDummy, be, codeInsertions);
-#ifdef DEBUG_PATH_PROFILES
- //debugging info
- cerr<<"After moving dummy code\n";
- for(map<Edge, getEdgeCode *>::iterator cd_i=codeInsertions.begin(),
- cd_e=codeInsertions.end(); cd_i != cd_e; ++cd_i){
- printEdge(cd_i->first);
- cerr<<cd_i->second->getCond()<<":"
- <<cd_i->second->getInc()<<"\n";
- }
- cerr<<"Dummy end------------\n";
-#endif
+ DEBUG(//debugging info
+ cerr<<"After moving dummy code\n";
+ for(map<Edge, getEdgeCode *>::iterator cd_i=codeInsertions.begin(),
+ cd_e=codeInsertions.end(); cd_i != cd_e; ++cd_i){
+ printEdge(cd_i->first);
+ cerr<<cd_i->second->getCond()<<":"
+ <<cd_i->second->getInc()<<"\n";
+ }
+ cerr<<"Dummy end------------\n");
//see what it looks like...
//now insert code along edges which have codes on them
//see what it looks like...
//now insert code along edges which have codes on them
map<Edge, getEdgeCode *> &insertions){
typedef vector<Edge >::const_iterator vec_iter;
map<Edge, getEdgeCode *> &insertions){
typedef vector<Edge >::const_iterator vec_iter;
-#ifdef DEBUG_PATH_PROFILES
- //print all back, st and ex dummy
- cerr<<"BackEdges---------------\n";
- for(vec_iter VI=be.begin(); VI!=be.end(); ++VI)
- printEdge(*VI);
- cerr<<"StEdges---------------\n";
- for(vec_iter VI=stDummy.begin(); VI!=stDummy.end(); ++VI)
- printEdge(*VI);
- cerr<<"ExitEdges---------------\n";
- for(vec_iter VI=exDummy.begin(); VI!=exDummy.end(); ++VI)
- printEdge(*VI);
- cerr<<"------end all edges\n";
-#endif
+ DEBUG( //print all back, st and ex dummy
+ cerr<<"BackEdges---------------\n";
+ for(vec_iter VI=be.begin(); VI!=be.end(); ++VI)
+ printEdge(*VI);
+ cerr<<"StEdges---------------\n";
+ for(vec_iter VI=stDummy.begin(); VI!=stDummy.end(); ++VI)
+ printEdge(*VI);
+ cerr<<"ExitEdges---------------\n";
+ for(vec_iter VI=exDummy.begin(); VI!=exDummy.end(); ++VI)
+ printEdge(*VI);
+ cerr<<"------end all edges\n");
std::vector<Edge> toErase;
for(map<Edge,getEdgeCode *>::iterator MI=insertions.begin(),
std::vector<Edge> toErase;
for(map<Edge,getEdgeCode *>::iterator MI=insertions.begin(),
Edge ed=MI->first;
getEdgeCode *edCd=MI->second;
bool dummyHasIt=false;
Edge ed=MI->first;
getEdgeCode *edCd=MI->second;
bool dummyHasIt=false;
-#ifdef DEBUG_PATH_PROFILES
- cerr<<"Current edge considered---\n";
- printEdge(ed);
-#endif
+
+ DEBUG(cerr<<"Current edge considered---\n";
+ printEdge(ed));
+
//now check if stDummy has ed
for(vec_iter VI=stDummy.begin(), VE=stDummy.end(); VI!=VE && !dummyHasIt;
++VI){
if(*VI==ed){
//now check if stDummy has ed
for(vec_iter VI=stDummy.begin(), VE=stDummy.end(); VI!=VE && !dummyHasIt;
++VI){
if(*VI==ed){
-#ifdef DEBUG_PATH_PROFILES
- cerr<<"Edge matched with stDummy\n";
-#endif
+ DEBUG(cerr<<"Edge matched with stDummy\n");
+
dummyHasIt=true;
bool dummyInBe=false;
//dummy edge with code
dummyHasIt=true;
bool dummyInBe=false;
//dummy edge with code
Node *dm=ed.getSecond();
if(*dm==*st){
//so this is the back edge to use
Node *dm=ed.getSecond();
if(*dm==*st){
//so this is the back edge to use
-#ifdef DEBUG_PATH_PROFILES
- cerr<<"Moving to backedge\n";
- printEdge(backEdge);
-#endif
+ DEBUG(cerr<<"Moving to backedge\n";
+ printEdge(backEdge));
+
getEdgeCode *ged=new getEdgeCode();
ged->setCdIn(edCd);
toErase.push_back(ed);
getEdgeCode *ged=new getEdgeCode();
ged->setCdIn(edCd);
toErase.push_back(ed);
++VI){
if(*VI==ed){
inExDummy=true;
++VI){
if(*VI==ed){
inExDummy=true;
-#ifdef DEBUG_PATH_PROFILES
- cerr<<"Edge matched with exDummy\n";
-#endif
+ DEBUG(cerr<<"Edge matched with exDummy\n");
bool dummyInBe2=false;
//dummy edge with code
for(vec_iter BE=be.begin(), BEE=be.end(); BE!=BEE && !dummyInBe2;
bool dummyInBe2=false;
//dummy edge with code
for(vec_iter BE=be.begin(), BEE=be.end(); BE!=BEE && !dummyInBe2;
-#ifdef DEBUG_PATH_PROFILES
- cerr<<"size of deletions: "<<toErase.size()<<"\n";
-#endif
+ DEBUG(cerr<<"size of deletions: "<<toErase.size()<<"\n");
for(vector<Edge >::iterator vmi=toErase.begin(), vme=toErase.end(); vmi!=vme;
++vmi)
insertions.erase(*vmi);
for(vector<Edge >::iterator vmi=toErase.begin(), vme=toErase.end(); vmi!=vme;
++vmi)
insertions.erase(*vmi);
-#ifdef DEBUG_PATH_PROFILES
- cerr<<"SIZE OF INSERTIONS AFTER DEL "<<insertions.size()<<"\n";
-#endif
+ DEBUG(cerr<<"SIZE OF INSERTIONS AFTER DEL "<<insertions.size()<<"\n");
}
//Do graph processing: to determine minimal edge increments,
}
//Do graph processing: to determine minimal edge increments,
//step 1-3 are already done on the graph when this function is called
//step 1-3 are already done on the graph when this function is called
-#ifdef DEBUG_PATH_PROFILES
- printGraph(g);
-#endif
+ DEBUG(printGraph(g));
+
//step 4: Get Max spanning tree of graph
//now insert exit to root edge
//step 4: Get Max spanning tree of graph
//now insert exit to root edge
//make g2 undirectional: this gives a better
//maximal spanning tree
g2.makeUnDirectional();
//make g2 undirectional: this gives a better
//maximal spanning tree
g2.makeUnDirectional();
-#ifdef DEBUG_PATH_PROFILES
- printGraph(g2);
-#endif
+ DEBUG(printGraph(g2));
+
Graph *t=g2.getMaxSpanningTree();
Graph *t=g2.getMaxSpanningTree();
-#ifdef DEBUG_PATH_PROFILES
- printGraph(*t);
-#endif
+ DEBUG(printGraph(*t));
+
//now edges of tree t have weights reversed
//(negative) because the algorithm used
//to find max spanning tree is
//now edges of tree t have weights reversed
//(negative) because the algorithm used
//to find max spanning tree is
//the tree so that now, all edge directions in the tree match
//the edge directions of corresponding edges in the directed graph
removeTreeEdges(g, *t);
//the tree so that now, all edge directions in the tree match
//the edge directions of corresponding edges in the directed graph
removeTreeEdges(g, *t);
-#ifdef DEBUG_PATH_PROFILES
- cerr<<"Spanning tree---------\n";
- printGraph(*t);
- cerr<<"-------end spanning tree\n";
-#endif
+
+ DEBUG(cerr<<"Spanning tree---------\n";
+ printGraph(*t);
+ cerr<<"-------end spanning tree\n");
+
//now remove the exit->root node
//and re-add it with weight 0
//since infinite weight is kinda confusing
//now remove the exit->root node
//and re-add it with weight 0
//since infinite weight is kinda confusing
-#ifdef DEBUG_PATH_PROFILES
- printGraph(g);
- printGraph(*t);
-#endif
+ DEBUG(printGraph(g);
+ printGraph(*t));
+
//step 5: Get edge increments
//Now we select a subset of all edges
//step 5: Get edge increments
//Now we select a subset of all edges
//if we consider just this subset, it still represents
//the path sum along any path in the graph
map<Edge, int> increment=getEdgeIncrements(g,*t);
//if we consider just this subset, it still represents
//the path sum along any path in the graph
map<Edge, int> increment=getEdgeIncrements(g,*t);
-#ifdef DEBUG_PATH_PROFILES
- //print edge increments for debugging
- for(map<Edge, int>::iterator M_I=increment.begin(), M_E=increment.end();
- M_I!=M_E; ++M_I){
- printEdge(M_I->first);
- cerr<<"Increment for above:"<<M_I->second<<"\n";
- }
-#endif
+
+ DEBUG(//print edge increments for debugging
+ for(map<Edge, int>::iterator MI=increment.begin(), ME = increment.end();
+ MI != ME; ++MI) {
+ printEdge(MI->first);
+ cerr << "Increment for above:" << MI->second << "\n";
+ });
//step 6: Get code insertions
//step 6: Get code insertions
map<Edge, getEdgeCode *> codeInsertions;
getCodeInsertions(g, codeInsertions, chords,increment);
map<Edge, getEdgeCode *> codeInsertions;
getCodeInsertions(g, codeInsertions, chords,increment);
-#ifdef DEBUG_PATH_PROFILES
- //print edges with code for debugging
- cerr<<"Code inserted in following---------------\n";
- for(map<Edge, getEdgeCode *>::iterator cd_i=codeInsertions->begin(),
- cd_e=codeInsertions->end(); cd_i!=cd_e; ++cd_i){
- printEdge(cd_i->first);
- cerr<<cd_i->second->getCond()<<":"<<cd_i->second->getInc()<<"\n";
- }
- cerr<<"-----end insertions\n";
-#endif
+ DEBUG (//print edges with code for debugging
+ cerr<<"Code inserted in following---------------\n";
+ for(map<Edge, getEdgeCode *>::iterator cd_i=codeInsertions.begin(),
+ cd_e=codeInsertions.end(); cd_i!=cd_e; ++cd_i){
+ printEdge(cd_i->first);
+ cerr<<cd_i->second->getCond()<<":"<<cd_i->second->getInc()<<"\n";
+ }
+ cerr<<"-----end insertions\n");
+
//step 7: move code on dummy edges over to the back edges
//Move the incoming dummy edge code and outgoing dummy
//edge code over to the corresponding back edge
moveDummyCode(stDummy, exDummy, be, codeInsertions);
//step 7: move code on dummy edges over to the back edges
//Move the incoming dummy edge code and outgoing dummy
//edge code over to the corresponding back edge
moveDummyCode(stDummy, exDummy, be, codeInsertions);
-#ifdef DEBUG_PATH_PROFILES
- //debugging info
- cerr<<"After moving dummy code\n";
- for(map<Edge, getEdgeCode *>::iterator cd_i=codeInsertions.begin(),
- cd_e=codeInsertions.end(); cd_i != cd_e; ++cd_i){
- printEdge(cd_i->first);
- cerr<<cd_i->second->getCond()<<":"
- <<cd_i->second->getInc()<<"\n";
- }
- cerr<<"Dummy end------------\n";
-#endif
+ DEBUG(//debugging info
+ cerr<<"After moving dummy code\n";
+ for(map<Edge, getEdgeCode *>::iterator cd_i=codeInsertions.begin(),
+ cd_e=codeInsertions.end(); cd_i != cd_e; ++cd_i){
+ printEdge(cd_i->first);
+ cerr<<cd_i->second->getCond()<<":"
+ <<cd_i->second->getInc()<<"\n";
+ }
+ cerr<<"Dummy end------------\n");
//see what it looks like...
//now insert code along edges which have codes on them
//see what it looks like...
//now insert code along edges which have codes on them
Graph g(nodes,edges, startNode, exitNode);
Graph g(nodes,edges, startNode, exitNode);
-#ifdef DEBUG_PATH_PROFILES
- printGraph(g);
-#endif
BasicBlock *fr=M->front();
BasicBlock *fr=M->front();
// by removing back edges for now, and adding them later on
vector<Edge> be;
g.getBackEdges(be);
// by removing back edges for now, and adding them later on
vector<Edge> be;
g.getBackEdges(be);
-#ifdef DEBUG_PATH_PROFILES
- cerr<<"Backedges:"<<be.size()<<endl;
-#endif
+ DEBUG(cerr << "Backedges:" << be.size() << "\n");
+
// Now we need to reflect the effect of back edges
// This is done by adding dummy edges
// If a->b is a back edge
// Now we need to reflect the effect of back edges
// This is done by adding dummy edges
// If a->b is a back edge