33 using namespace SVFUtil;
51 oCG->solveOfflineSCC(oscc);
60 while (!isWorklistEmpty())
62 NodeID nodeId = popFromWorklist();
63 collapsePWCNode(nodeId);
79 if (hasOfflineRep(nodeId))
82 NodeID oRep = getOfflineRep(nodeId);
84 NodeID rep = consCG->sccRepNode(oRep);
85 const PointsTo &pts = getPts(nodeId);
86 for (PointsTo::iterator ptIt = pts.begin(), ptEit = pts.end(); ptIt != ptEit; ++ptIt)
94 assert(!oCG->isaRef(tgt) &&
"Point-to target should not be a ref node!");
95 mergeNodeAndPts(tgt, rep);
105 node = sccRepNode(node);
106 rep = sccRepNode(rep);
107 if (!isaMergedNode(node))
109 if (unionPts(rep, node))
110 pushIntoWorklist(rep);
113 mergeNodeToRep(node, rep);
virtual void initialize()
static AndersenHCD * hcdAndersen
virtual void mergeSCC(NodeID nodeId)
const ConstraintEdge::ConstraintEdgeSetTy & getAddrOutEdges() const
virtual void initialize()
Initialize analysis.
virtual void solveWorklist()
void mergeNodeAndPts(NodeID node, NodeID tgt)
const ConstraintEdge::ConstraintEdgeSetTy & getDirectInEdges() const
Return constraint edges.