34 using namespace SVFUtil;
58 while (!nodeStack.empty())
60 NodeID nodeId = nodeStack.top();
62 collapsePWCNode(nodeId);
69 while (!isWorklistEmpty())
71 NodeID nodeId = popFromWorklist();
73 postProcessNode(nodeId);
84 if (sccRepNode(nodeId) != nodeId)
87 double propStart = stat->getClk();
90 double propEnd = stat->getClk();
91 timeOfProcessCopyGep += (propEnd - propStart) /
TIMEINTERVAL;
99 double insertStart = stat->getClk();
107 if (handleLoad(nodeId, *it))
114 if (handleStore(nodeId, *it))
118 double insertEnd = stat->getClk();
119 timeOfProcessLoadStore += (insertEnd - insertStart) /
TIMEINTERVAL;
127 bool changed =
false;
128 for (
PointsTo::iterator piter = getPts(nodeId).begin(), epiter = getPts(nodeId).end();
129 piter != epiter; ++piter)
131 if (processLoad(*piter, edge))
144 bool changed =
false;
145 for (
PointsTo::iterator piter = getPts(nodeId).begin(), epiter = getPts(nodeId).end();
146 piter != epiter; ++piter)
148 if (processStore(*piter, edge))
virtual void solveWorklist()
virtual void initialize()
virtual bool handleStore(NodeID id, const ConstraintEdge *store)
virtual bool handleLoad(NodeID id, const ConstraintEdge *load)
virtual void postProcessNode(NodeID nodeId)
static AndersenWaveDiff * diffWave
virtual void processNode(NodeID nodeId)
virtual void initialize()
Initialize analysis.
const_iterator outgoingLoadsEnd() const
const_iterator incomingStoresBegin() const
const_iterator incomingStoresEnd() const
ConstraintEdge::ConstraintEdgeSetTy::const_iterator const_iterator
const_iterator outgoingLoadsBegin() const
std::stack< NodeID > NodeStack