Definition at line 249 of file VersionedFlowSensitive.h.
◆ NodeData
◆ detectSCCs()
Determines the strongly connected components of svfg following only edges labelled with object. partOf[n] = scc means nodes n is part of SCC scc. startingNodes contains the nodes to begin the search from. After completion, footprint will contain all edges which object appears on (as reached through the algorithm described above) sorted.
This is not a general SCC detection but specifically for versioning, so edges to delta nodes are skipped as they are prelabelled. Edges to stores are also skipped to as they yield a new version (they cannot be part of an SCC containing more than themselves). Skipped edges still form part of the footprint.
Definition at line 1115 of file VersionedFlowSensitive.cpp.
1120{
1124
1126 std::stack<const SVFGNode *>
stack;
1127
1130
1132 {
1134 {
1136 }
1137 }
1138
1139
1141
1143}
u32_t getTotalNodeNum() const
Get total number of node/edge.
static void visit(VersionedFlowSensitive *vfs, const NodeID object, std::vector< int > &partOf, std::vector< const IndirectSVFGEdge * > &footprint, std::vector< NodeData > &nodeData, std::stack< const SVFGNode * > &stack, int &index, int ¤tSCC, const SVFGNode *v)
Called by detectSCCs then called recursively.
llvm::IRBuilder IRBuilder
◆ visit()
Called by detectSCCs then called recursively.
Definition at line 1145 of file VersionedFlowSensitive.cpp.
1154{
1156
1160
1163
1164 for (
const SVFGEdge *e :
v->getOutEdges())
1165 {
1168
1171
1172
1173 if (!
ie->getPointsTo().test(
object))
continue;
1174
1175
1176
1178
1179
1180
1181
1183
1185 {
1188 }
1190 {
1192 }
1193 }
1194
1196 {
1198 do
1199 {
1205 }
1207
1208
1210 }
1211}
NodeID getId() const
Get ID.
The documentation for this class was generated from the following files: