Author: shihui
Date: 2011-04-13 06:37:18 -0400 (Wed, 13 Apr 2011)
New Revision: 3551

Modified:
   trunk/osprey/ipa/main/analyze/ipa_nystrom_alias_analyzer.cxx
Log:
Fix bug752:

Fix ssertion happens when find node point to a collapsed node. 
collapsed node is supposed to be not used in constraint graph analysis and 
points to.

Fix is in ConstraintGraph::buildCGipa, when adding points_to to a collapsed 
node, 
search collapsed parent chain instead of only search one level collpase parent.

Code Review: Jian-Xin


Modified: trunk/osprey/ipa/main/analyze/ipa_nystrom_alias_analyzer.cxx
===================================================================
--- trunk/osprey/ipa/main/analyze/ipa_nystrom_alias_analyzer.cxx        
2011-04-13 10:26:44 UTC (rev 3550)
+++ trunk/osprey/ipa/main/analyze/ipa_nystrom_alias_analyzer.cxx        
2011-04-13 10:37:18 UTC (rev 3551)
@@ -463,8 +463,11 @@
       if (pNode->checkFlags(CG_NODE_FLAGS_COLLAPSED)) {
         FmtAssert(pNode != pNode->parent(), ("Expecting a distinct parent "
                   "for COLLAPSED node: %d\n", pNode->id()));
-        change = cgNode->parent()->addPointsTo(
-                 ConstraintGraph::cgNode(pNode->collapsedParent()), CQ_GBL);
+        ConstraintGraphNode* collapseParent =
+                             ConstraintGraph::cgNode(pNode->collapsedParent());
+        while (collapseParent->checkFlags(CG_NODE_FLAGS_COLLAPSED))
+          collapseParent = 
ConstraintGraph::cgNode(collapseParent->collapsedParent());
+        change = cgNode->parent()->addPointsTo(collapseParent, CQ_GBL);
       } else
         change = cgNode->parent()->addPointsTo(pNode, CQ_GBL);
       // Mark a changed global as modified so that its outgoing edges
@@ -484,8 +487,11 @@
       if (pNode->checkFlags(CG_NODE_FLAGS_COLLAPSED)) {
         FmtAssert(pNode != pNode->parent(), ("Expecting a distinct parent "
                   "for COLLAPSED node: %d\n", pNode->id()));
-        change = cgNode->parent()->addPointsTo(
-                 ConstraintGraph::cgNode(pNode->collapsedParent()), CQ_HZ);
+        ConstraintGraphNode* collapseParent =
+                             ConstraintGraph::cgNode(pNode->collapsedParent());
+        while (collapseParent->checkFlags(CG_NODE_FLAGS_COLLAPSED))
+          collapseParent = 
ConstraintGraph::cgNode(collapseParent->collapsedParent());
+        change = cgNode->parent()->addPointsTo(collapseParent, CQ_HZ);
       } else
         change = cgNode->parent()->addPointsTo(pNode, CQ_HZ);
       // Mark a changed global as modified so that its outgoing edges
@@ -505,8 +511,11 @@
       if (pNode->checkFlags(CG_NODE_FLAGS_COLLAPSED)) {
         FmtAssert(pNode != pNode->parent(), ("Expecting a distinct parent "
                   "for COLLAPSED node: %d\n", pNode->id()));
-        change = cgNode->parent()->addPointsTo(
-                 ConstraintGraph::cgNode(pNode->collapsedParent()), CQ_DN);
+        ConstraintGraphNode* collapseParent =
+                             ConstraintGraph::cgNode(pNode->collapsedParent());
+        while (collapseParent->checkFlags(CG_NODE_FLAGS_COLLAPSED))
+          collapseParent = 
ConstraintGraph::cgNode(collapseParent->collapsedParent());
+        change = cgNode->parent()->addPointsTo(collapseParent, CQ_DN);
       } else
         change = cgNode->parent()->addPointsTo(pNode, CQ_DN);
       if (change && cgNode->parent()->cg() == globalCG()) {


------------------------------------------------------------------------------
Forrester Wave Report - Recovery time is now measured in hours and minutes
not days. Key insights are discussed in the 2010 Forrester Wave Report as
part of an in-depth evaluation of disaster recovery service providers.
Forrester found the best-in-class provider in terms of services and vision.
Read this report now!  http://p.sf.net/sfu/ibm-webcastpromo
_______________________________________________
Open64-devel mailing list
Open64-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/open64-devel

Reply via email to