Definition at line 251 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 1109 of file VersionedFlowSensitive.cpp.
1114{
1118
1120 std::stack<const SVFGNode *>
stack;
1121
1124
1126 {
1128 {
1130 }
1131 }
1132
1133
1135
1137}
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 1139 of file VersionedFlowSensitive.cpp.
1148{
1150
1154
1157
1158 for (
const SVFGEdge *e :
v->getOutEdges())
1159 {
1162
1165
1166
1167 if (!
ie->getPointsTo().test(
object))
continue;
1168
1169
1170
1172
1173
1174
1175
1177
1179 {
1182 }
1184 {
1186 }
1187 }
1188
1190 {
1192 do
1193 {
1199 }
1201
1202
1204 }
1205}
NodeID getId() const
Get ID.
The documentation for this class was generated from the following files: