From 40fe1f6e999b5fb902c035c005b4af73e727dcb0 Mon Sep 17 00:00:00 2001 From: Ken McMillan Date: Fri, 7 Jun 2013 11:50:01 -0700 Subject: [PATCH] adjusting stratified inlining in duality --- src/duality/duality_solver.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/duality/duality_solver.cpp b/src/duality/duality_solver.cpp index 142d8e457..4519efd7a 100644 --- a/src/duality/duality_solver.cpp +++ b/src/duality/duality_solver.cpp @@ -42,7 +42,7 @@ Revision History: #define NEW_EXPAND #define EARLY_EXPAND // #define TOP_DOWN -#define EFFORT_BOUNDED_STRAT +// #define EFFORT_BOUNDED_STRAT #define SKIP_UNDERAPPROX_NODES @@ -793,6 +793,18 @@ namespace Duality { #endif Edge *edge = node->map->Outgoing; std::vector &chs = edge->Children; + + // make sure we don't create a covered node in this process! + + for(unsigned i = 0; i < chs.size(); i++){ + Node *child = chs[i]; + if(TopoSort[child] < TopoSort[node->map]){ + Node *leaf = LeafMap[child]; + if(!indset->Contains(leaf)) + return node->Outgoing; + } + } + std::vector nchs(chs.size()); for(unsigned i = 0; i < chs.size(); i++){ Node *child = chs[i]; @@ -808,6 +820,7 @@ namespace Duality { if(StratifiedLeafMap.find(child) == StratifiedLeafMap.end()){ RPFP::Node *nchild = CreateNodeInstance(child,StratifiedLeafCount--); MakeLeaf(nchild); + nchild->Annotation.SetEmpty(); StratifiedLeafMap[child] = nchild; indset->SetDominated(nchild); }