Definition at line 252 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 1113 of file VersionedFlowSensitive.cpp.
1118{
1122
1124 std::stack<const SVFGNode *>
stack;
1125
1128
1130 {
1132 {
1134 }
1135 }
1136
1137
1139
1141}
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 1143 of file VersionedFlowSensitive.cpp.
1152{
1154
1158
1161
1162 for (
const SVFGEdge *e :
v->getOutEdges())
1163 {
1166
1169
1170
1171 if (!
ie->getPointsTo().test(
object))
continue;
1172
1173
1174
1176
1177
1178
1179
1181
1183 {
1186 }
1188 {
1190 }
1191 }
1192
1194 {
1196 do
1197 {
1203 }
1205
1206
1208 }
1209}
NodeID getId() const
Get ID.
The documentation for this class was generated from the following files: