svf-lib 1.0.2203 → 1.0.2205
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/SVF-linux/Release-build/bin/ae +0 -0
- package/SVF-linux/Release-build/bin/cfl +0 -0
- package/SVF-linux/Release-build/bin/dvf +0 -0
- package/SVF-linux/Release-build/bin/mta +0 -0
- package/SVF-linux/Release-build/bin/saber +0 -0
- package/SVF-linux/Release-build/bin/svf-ex +0 -0
- package/SVF-linux/Release-build/bin/wpa +0 -0
- package/SVF-linux/Release-build/include/Graphs/SCC.h +18 -2
- package/SVF-linux/Release-build/include/WPA/WPAFSSolver.h +8 -16
- package/SVF-linux/Release-build/lib/libSvfCore.a +0 -0
- package/SVF-osx/Release-build/bin/ae +0 -0
- package/SVF-osx/Release-build/bin/cfl +0 -0
- package/SVF-osx/Release-build/bin/dvf +0 -0
- package/SVF-osx/Release-build/bin/mta +0 -0
- package/SVF-osx/Release-build/bin/saber +0 -0
- package/SVF-osx/Release-build/bin/svf-ex +0 -0
- package/SVF-osx/Release-build/bin/wpa +0 -0
- package/SVF-osx/Release-build/include/Graphs/SCC.h +7 -2
- package/SVF-osx/Release-build/include/MSSA/MemRegion.h +0 -2
- package/SVF-osx/Release-build/include/WPA/WPAFSSolver.h +2 -2
- package/SVF-osx/Release-build/lib/libSvfCore.a +0 -0
- package/SVF-osx/Release-build/lib/libSvfLLVM.a +0 -0
- package/package.json +1 -1
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -123,14 +123,30 @@ public:
|
|
|
123
123
|
|
|
124
124
|
|
|
125
125
|
// Return a handle to the stack of nodes in topological
|
|
126
|
-
// order.
|
|
126
|
+
// order. This will be used to seed the initial solution
|
|
127
127
|
// and improve efficiency.
|
|
128
128
|
inline GNodeStack &topoNodeStack()
|
|
129
129
|
{
|
|
130
130
|
return _T;
|
|
131
131
|
}
|
|
132
132
|
|
|
133
|
-
|
|
133
|
+
/// Return a handle to the stack of nodes in reverse topological
|
|
134
|
+
/// order. This will be used to seed the initial solution
|
|
135
|
+
/// and improve efficiency.
|
|
136
|
+
inline GNodeStack revTopoNodeStack()
|
|
137
|
+
{
|
|
138
|
+
GNodeStack revTopoOrder;
|
|
139
|
+
GNodeStack topoOrder = topoNodeStack();
|
|
140
|
+
while(!topoOrder.empty())
|
|
141
|
+
{
|
|
142
|
+
NodeID nodeID = topoOrder.top();
|
|
143
|
+
topoOrder.pop();
|
|
144
|
+
revTopoOrder.push(nodeID);
|
|
145
|
+
}
|
|
146
|
+
return revTopoOrder;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
const inline GNODESCCInfoMap &GNodeSCCInfo() const
|
|
134
150
|
{
|
|
135
151
|
return _NodeSCCAuxInfo;
|
|
136
152
|
}
|
|
@@ -69,31 +69,23 @@ protected:
|
|
|
69
69
|
/// SCC detection
|
|
70
70
|
this->getSCCDetector()->find();
|
|
71
71
|
|
|
72
|
+
assert(nodeStack.empty() && "node stack is not empty, some nodes are not popped properly.");
|
|
73
|
+
|
|
72
74
|
/// Both rep and sub nodes need to be processed later.
|
|
73
75
|
/// Collect sub nodes from SCCDetector.
|
|
74
|
-
NodeStack revTopoStack;
|
|
75
|
-
|
|
76
|
-
while (!topoStack.empty())
|
|
76
|
+
NodeStack revTopoStack = this->getSCCDetector()->revTopoNodeStack();
|
|
77
|
+
while (!revTopoStack.empty())
|
|
77
78
|
{
|
|
78
|
-
NodeID nodeId =
|
|
79
|
-
|
|
79
|
+
NodeID nodeId = revTopoStack.top();
|
|
80
|
+
revTopoStack.pop();
|
|
80
81
|
const NodeBS& subNodes = this->getSCCDetector()->subNodes(nodeId);
|
|
81
82
|
for (NodeBS::iterator it = subNodes.begin(), eit = subNodes.end(); it != eit; ++it)
|
|
82
83
|
{
|
|
83
|
-
|
|
84
|
+
/// restore the topological order.
|
|
85
|
+
nodeStack.push(*it);
|
|
84
86
|
}
|
|
85
87
|
}
|
|
86
88
|
|
|
87
|
-
assert(nodeStack.empty() && "node stack is not empty, some nodes are not popped properly.");
|
|
88
|
-
|
|
89
|
-
/// restore the topological order.
|
|
90
|
-
while (!revTopoStack.empty())
|
|
91
|
-
{
|
|
92
|
-
NodeID nodeId = revTopoStack.top();
|
|
93
|
-
revTopoStack.pop();
|
|
94
|
-
nodeStack.push(nodeId);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
89
|
return nodeStack;
|
|
98
90
|
}
|
|
99
91
|
};
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -130,12 +130,17 @@ public:
|
|
|
130
130
|
return _T;
|
|
131
131
|
}
|
|
132
132
|
|
|
133
|
+
inline const GNodeStack& topoNodeStack() const
|
|
134
|
+
{
|
|
135
|
+
return _T;
|
|
136
|
+
}
|
|
137
|
+
|
|
133
138
|
/// Return a handle to the stack of nodes in reverse topological
|
|
134
139
|
/// order. This will be used to seed the initial solution
|
|
135
140
|
/// and improve efficiency.
|
|
136
|
-
inline
|
|
141
|
+
inline FIFOWorkList<NodeID> revTopoNodeStack() const
|
|
137
142
|
{
|
|
138
|
-
|
|
143
|
+
FIFOWorkList<NodeID> revTopoOrder;
|
|
139
144
|
GNodeStack topoOrder = topoNodeStack();
|
|
140
145
|
while(!topoOrder.empty())
|
|
141
146
|
{
|
|
@@ -268,8 +268,6 @@ private:
|
|
|
268
268
|
/// Get all the objects in callee's modref escaped via global objects (the chain pts of globals)
|
|
269
269
|
void getEscapObjviaGlobals(NodeBS& globs, const NodeBS& pts);
|
|
270
270
|
|
|
271
|
-
/// Get reverse topo call graph scc
|
|
272
|
-
void getCallGraphSCCRevTopoOrder(WorkList& worklist);
|
|
273
271
|
|
|
274
272
|
protected:
|
|
275
273
|
MRGenerator(BVDataPTAImpl* p, bool ptrOnly);
|
|
@@ -73,10 +73,10 @@ protected:
|
|
|
73
73
|
|
|
74
74
|
/// Both rep and sub nodes need to be processed later.
|
|
75
75
|
/// Collect sub nodes from SCCDetector.
|
|
76
|
-
|
|
76
|
+
FIFOWorkList<NodeID> revTopoStack = this->getSCCDetector()->revTopoNodeStack();
|
|
77
77
|
while (!revTopoStack.empty())
|
|
78
78
|
{
|
|
79
|
-
NodeID nodeId = revTopoStack.
|
|
79
|
+
NodeID nodeId = revTopoStack.front();
|
|
80
80
|
revTopoStack.pop();
|
|
81
81
|
const NodeBS& subNodes = this->getSCCDetector()->subNodes(nodeId);
|
|
82
82
|
for (NodeBS::iterator it = subNodes.begin(), eit = subNodes.end(); it != eit; ++it)
|
|
Binary file
|
|
Binary file
|