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