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
[email protected]
https://lists.sourceforge.net/lists/listinfo/open64-devel