72 std::set<IntraPartitionDataflow*> activeParts;
78 std::set<IntraPartitionDataflow*> joinParts;
85 std::map<IntraPartitionDataflow*, std::list<partSplit*> > parts2splits;
89 std::map<IntraPartitionDataflow*, IntraPartitionDataflowCheckpoint*> parts2chkpts;
117 std::set<IntraPartitionDataflow*> split(
IntraPartitionDataflow* origA, std::vector<IntraPartitionDataflowCheckpoint*> partitionChkpts,
137 const std::map<IntraPartitionDataflow*, IntraPartitionDataflowCheckpoint*>& parts2chkpts)=0;
273 std::set<DataflowNode> joinNodes;
287 dfChkpt(that.dfChkpt), func(that.func)
289 this->joinNodes = that.joinNodes;
293 this->curNode = NULL;
295 this->partitionCond = that.partitionCond;
296 this->partitionIndex = that.partitionIndex;
297 this->fState = that.fState;
302 printable* partitionCond,
int partitionIndex,
304 dfChkpt(dfChkpt), func(func)
306 this->joinNodes = joinNodes;
310 this->curNode = NULL;
312 this->partitionCond = partitionCond;
313 this->partitionIndex = partitionIndex;
314 this->fState = fState;
324 std::string str(std::string indent=
"")
326 std::ostringstream outs;
327 outs << indent <<
"[IntraPartitionDataflowCheckpoint : \n";
328 outs << indent <<
" dfChkpt = \n"<<dfChkpt.str(indent+
" ")<<
"\n";
330 outs << indent <<
" curNode = <"<<curNode->getNode()->
class_name()<<
" | "<<curNode->getNode()->
unparseToString()<<
" | "<< curNode->getIndex() <<
">\n";
332 outs << indent <<
" curNode = NULL\n";
334 if(joinNodes.size()==0)
335 outs << indent <<
" joinNodes = None\n";
338 outs << indent <<
" joinNodes = \n";
339 for(std::set<DataflowNode>::iterator it=joinNodes.begin(); it!=joinNodes.end(); it++)
340 { outs << indent <<
" <"<<(*it).getNode()->class_name()<<
" | "<<(*it).getNode()->unparseToString()<<
">\n"; }
343 outs << indent <<
" partitionCond = \n"<<partitionCond->str(indent+
" ")<<
"\n";
345 if(partitionIndex>=0)
346 outs << indent <<
" partitionIndex = descendant "<<partitionIndex<<
"]";
348 outs << indent <<
" partitionIndex = all descendants ("<<partitionIndex<<
")]";
379 typedef enum {noSplit, splitNew, splitParent} splitType;
389 splitType& splitAnalysis, std::vector</*LogicalCond*/printable*>& splitConditions,
bool& joinNode)=0;
394 bool runAnalysis(
const Function& func,
NodeState* fState,
bool analyzeDueToCallers, std::set<Function> calleesUpdated);
407 typedef enum {retFalse, cont, normal} partitionTranferRet;
409 partitionTranferRet partitionTranfer(
411 const std::vector<Lattice*>& dfInfoBelow,
bool& splitPart, std::set<DataflowNode>& joinNodes,
416 bool propagateFWStateToNextNode(
417 const std::vector<Lattice*>& curNodeState,
DataflowNode curDFNode,
int nodeIndex,
418 const std::vector<Lattice*>& nextNodeState,
DataflowNode nextDFNode);