This patch looks fine to me. Please check it in.
2011/4/29 Hui Shi <kalin....@gmail.com>
> Would gatekeeper help review this patch?
>
> https://bugs.open64.net/show_bug.cgi?id=767
> Nystrom alias issue: 456.gobmk base output difference on train data
>
> The wrong alias is caused in
> ConstraintGraphNode::collapseTypeIncompatibleNodes.
> It try to collpase a kid node's parent node into kid.
>
> In ConstraintGraphNode::collapse(cur), collpase node cur into this.
>
> // Merge cur with 'this' node
> ConstraintGraphNode *curParent = cur->parent();
>
> // When merging, merge with 'this's parent
> ConstraintGraphNode *thisParent = this->parent();
>
> if (curParent != thisParent) { // skip merging here because parent are
> same
> thisParent->merge(curParent);
> curParent->repParent(thisParent);
> }
>
> // When cur's parent is merged with this, we might have transfered
> // a parent copy edge from cur's parent to cur, which needs to be removed
> cur->deleteInOutEdges(); // delete all edges here
>
>
> Problem is no merge happen in this case, but node cur's all edge is
> deleted.
>
> Fix is
> 1. In ConstraintGraphNode::collapseTypeIncompatibleNodes, if collpased
> node is parent of collapsed target, switch the collapse node and target
> node.
> 2. add assertion ConstraintGraphNode::collapse, node cur is not parent of
> node this.
>
> Index: osprey/be/com/constraint_graph.cxx
> ===================================================================
> --- osprey/be/com/constraint_graph.cxx (revision 3575)
> +++ osprey/be/com/constraint_graph.cxx (working copy)
> @@ -3194,6 +3194,8 @@
> ("Not expecting this node: %d to be collasped", id()));
> FmtAssert(!cur->checkFlags(CG_NODE_FLAGS_COLLAPSED),
> ("Not expecting cur node: %d to be collasped", cur->id()));
> + FmtAssert(parent() != cur,
> + ("Not expecting cur node be parent of this "));
>
> // Merge cur with 'this' node
> ConstraintGraphNode *curParent = cur->parent();
> @@ -4333,6 +4335,12 @@
> FmtAssert(ptdNode->stInfo()->firstOffset()->nextOffset() == NULL,
> ("Only single offset expected"));
> ptdNode = ptdNode->stInfo()->firstOffset();
> + // can't collapse node's parent to its self.
> + if (ptdNode == repNode->parent()) {
> + ConstraintGraphNode *tmp = ptdNode;
> + ptdNode = repNode;
> + repNode = tmp;
> + }
> // SparseBitSetIterator caches ids when iterating. So of the
> 'effect'
> // of collapsing is not immediately visible, in which case we
> might
> // encounter collapsed nodes when iterating the pts
>
>
> Regards
> Shi ,Hui
>
>
>
> ------------------------------------------------------------------------------
> WhatsUp Gold - Download Free Network Management Software
> The most intuitive, comprehensive, and cost-effective network
> management toolset available today. Delivers lowest initial
> acquisition cost and overall TCO of any competing solution.
> http://p.sf.net/sfu/whatsupgold-sd
> _______________________________________________
> Open64-devel mailing list
> Open64-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/open64-devel
>
>
--
Regards,
Lai Jian-Xin
------------------------------------------------------------------------------
WhatsUp Gold - Download Free Network Management Software
The most intuitive, comprehensive, and cost-effective network
management toolset available today. Delivers lowest initial
acquisition cost and overall TCO of any competing solution.
http://p.sf.net/sfu/whatsupgold-sd
_______________________________________________
Open64-devel mailing list
Open64-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/open64-devel