33 using namespace SVFUtil;
54 while (!candidates.empty())
56 NodeID nId = candidates.top();
57 revCandidates.push(nId);
60 if (_scc->subNodes(nId).count()>1 && !isVisited(nId))
64 while (!revCandidates.empty())
66 NodeID nId = revCandidates.top();
89 if (
NormalGepCGEdge* gepCGEdge = SVFUtil::dyn_cast<NormalGepCGEdge>(*eit))
90 offset = gepCGEdge->getConstantFieldIdx();
93 NodeID dstId = (*eit)->getDstID();
94 if (_scc->repNode(nodeId) == _scc->repNode(dstId) && !isVisited(dstId))
103 NodeID backNodeId = _S.top();
105 _revS.push(backNodeId);
111 s32_t _l = _D[nodeId] +_w - _D[backNodeId];
113 for (
auto cNodeId : _C)
114 _consG->getConstraintNode(cNodeId)->strides.set(_l);
119 s32_t _l = _D[nodeId] - _D[backNodeId];
121 for (
auto cNodeId : _C)
122 _consG->getConstraintNode(cNodeId)->strides.set(_l);
124 _C.insert(backNodeId);
127 while (!_revS.empty())
129 NodeID backedId = _revS.top();
void find(NodeStack &candidates)
void visit(NodeID nodeId, s32_t _w)
NodeBS strides
For stride-based field representation.
iterator directOutEdgeEnd()
ConstraintEdge::ConstraintEdgeSetTy::const_iterator const_iterator
iterator directOutEdgeBegin()
Iterators.
APOffset getConstantFieldIdx() const
Get location set of the gep edge.
std::stack< NodeID > NodeStack