svf-tools 1.0.533 → 1.0.536
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-doxygen/html/html/AndersenStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/AndersenWaveDiff_8cpp_source.html +1 -3
- package/SVF-doxygen/html/html/Andersen_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/Andersen_8h_source.html +5 -6
- package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/DCHG_8cpp_source.html +10 -10
- package/SVF-doxygen/html/html/DCHG_8h_source.html +5 -5
- package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/DataFlowUtil_8h_source.html +2 -2
- package/SVF-doxygen/html/html/ExtAPI_8cpp_source.html +43 -36
- package/SVF-doxygen/html/html/ExtAPI_8h.html +2 -0
- package/SVF-doxygen/html/html/ExtAPI_8h_source.html +80 -69
- package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MHP_8cpp.html +1 -1
- package/SVF-doxygen/html/html/MHP_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/MHP_8h_source.html +1 -1
- package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MTA_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/MTA_8h_source.html +2 -2
- package/SVF-doxygen/html/html/PCG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVF-FE_2BasicTypes_8h.html +80 -0
- package/SVF-doxygen/html/html/SVF-FE_2BasicTypes_8h_source.html +62 -22
- package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +4 -10
- package/SVF-doxygen/html/html/SVFIRBuilder_8h.html +0 -1
- package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +60 -62
- package/SVF-doxygen/html/html/SVFIR_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFUtil_8cpp_source.html +3 -1
- package/SVF-doxygen/html/html/SVFUtil_8h_source.html +7 -7
- package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/TCT_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/TCT_8h_source.html +1 -1
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/WPAFSSolver_8h_source.html +6 -6
- package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/WPASolver_8h_source.html +17 -18
- package/SVF-doxygen/html/html/annotated.html +2 -1
- package/SVF-doxygen/html/html/cfl_8cpp.html +1 -1
- package/SVF-doxygen/html/html/cfl_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +12 -13
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase-members.html +175 -176
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +5 -7
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +11 -10
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +5 -4
- package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff-members.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +160 -208
- package/SVF-doxygen/html/html/classSVF_1_1CallGraphBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +43 -43
- package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ExtAPI-members.html +19 -17
- package/SVF-doxygen/html/html/classSVF_1_1ExtAPI.html +230 -141
- package/SVF-doxygen/html/html/classSVF_1_1ExtAPI_1_1Operation-members.html +88 -0
- package/SVF-doxygen/html/html/classSVF_1_1ExtAPI_1_1Operation.html +344 -0
- package/SVF-doxygen/html/html/classSVF_1_1FSMPTA-members.html +240 -241
- package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +1 -3
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive-members.html +230 -231
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +5 -7
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MHP.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MTA.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PCG.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder-members.html +63 -64
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +306 -348
- package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1Steensgaard-members.html +187 -188
- package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +5 -7
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraphBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis-members.html +179 -180
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +1 -3
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive-members.html +281 -282
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +6 -8
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1WPAFSSolver-members.html +31 -32
- package/SVF-doxygen/html/html/classSVF_1_1WPAFSSolver.html +1 -3
- package/SVF-doxygen/html/html/classSVF_1_1WPAMinimumSolver-members.html +42 -43
- package/SVF-doxygen/html/html/classSVF_1_1WPAMinimumSolver.html +6 -8
- package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1WPASCCSolver-members.html +38 -39
- package/SVF-doxygen/html/html/classSVF_1_1WPASCCSolver.html +8 -10
- package/SVF-doxygen/html/html/classSVF_1_1WPASolver-members.html +29 -30
- package/SVF-doxygen/html/html/classSVF_1_1WPASolver.html +51 -86
- package/SVF-doxygen/html/html/classes.html +90 -90
- package/SVF-doxygen/html/html/functions_a.html +8 -5
- package/SVF-doxygen/html/html/functions_c.html +19 -20
- package/SVF-doxygen/html/html/functions_e.html +4 -7
- package/SVF-doxygen/html/html/functions_eval_e.html +2 -5
- package/SVF-doxygen/html/html/functions_func_c.html +12 -13
- package/SVF-doxygen/html/html/functions_func_g.html +23 -11
- package/SVF-doxygen/html/html/functions_func_m.html +0 -1
- package/SVF-doxygen/html/html/functions_func_o.html +7 -4
- package/SVF-doxygen/html/html/functions_func_p.html +1 -1
- package/SVF-doxygen/html/html/functions_func_s.html +11 -5
- package/SVF-doxygen/html/html/functions_g.html +21 -9
- package/SVF-doxygen/html/html/functions_i.html +3 -3
- package/SVF-doxygen/html/html/functions_l.html +3 -3
- package/SVF-doxygen/html/html/functions_m.html +0 -1
- package/SVF-doxygen/html/html/functions_n.html +4 -4
- package/SVF-doxygen/html/html/functions_o.html +21 -19
- package/SVF-doxygen/html/html/functions_p.html +7 -9
- package/SVF-doxygen/html/html/functions_r.html +4 -2
- package/SVF-doxygen/html/html/functions_s.html +22 -18
- package/SVF-doxygen/html/html/functions_v.html +3 -3
- package/SVF-doxygen/html/html/functions_vars_a.html +3 -0
- package/SVF-doxygen/html/html/functions_vars_o.html +3 -0
- package/SVF-doxygen/html/html/functions_w.html +11 -11
- package/SVF-doxygen/html/html/hierarchy.html +99 -98
- package/SVF-doxygen/html/html/namespaceSVF.html +741 -21
- package/SVF-doxygen/html/html/namespaceSVF_1_1LLVMUtil.html +3 -3
- package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +3 -1
- package/SVF-doxygen/html/html/namespacemembers.html +33 -0
- package/SVF-doxygen/html/html/namespacemembers_b.html +5 -2
- package/SVF-doxygen/html/html/namespacemembers_c.html +6 -0
- package/SVF-doxygen/html/html/namespacemembers_d.html +19 -1
- package/SVF-doxygen/html/html/namespacemembers_g.html +15 -3
- package/SVF-doxygen/html/html/namespacemembers_i.html +16 -4
- package/SVF-doxygen/html/html/namespacemembers_m.html +21 -0
- package/SVF-doxygen/html/html/namespacemembers_n.html +3 -0
- package/SVF-doxygen/html/html/namespacemembers_p.html +3 -0
- package/SVF-doxygen/html/html/namespacemembers_s.html +3 -0
- package/SVF-doxygen/html/html/namespacemembers_type.html +33 -0
- package/SVF-doxygen/html/html/namespacemembers_type_b.html +3 -0
- package/SVF-doxygen/html/html/namespacemembers_type_c.html +6 -0
- package/SVF-doxygen/html/html/namespacemembers_type_d.html +18 -0
- package/SVF-doxygen/html/html/namespacemembers_type_g.html +12 -0
- package/SVF-doxygen/html/html/namespacemembers_type_i.html +12 -0
- package/SVF-doxygen/html/html/namespacemembers_type_m.html +21 -0
- package/SVF-doxygen/html/html/namespacemembers_type_n.html +3 -0
- package/SVF-doxygen/html/html/namespacemembers_type_p.html +3 -0
- package/SVF-doxygen/html/html/namespacemembers_type_s.html +3 -0
- package/SVF-doxygen/html/html/namespacemembers_type_v.html +3 -0
- package/SVF-doxygen/html/html/namespacemembers_type_w.html +3 -0
- package/SVF-doxygen/html/html/namespacemembers_v.html +3 -0
- package/SVF-doxygen/html/html/namespacemembers_w.html +3 -0
- package/SVF-doxygen/html/html/search/all_1.js +12 -0
- package/SVF-doxygen/html/html/search/all_10.js +8 -7
- package/SVF-doxygen/html/html/search/all_11.js +2 -2
- package/SVF-doxygen/html/html/search/all_12.js +12 -9
- package/SVF-doxygen/html/html/search/all_13.js +3 -3
- package/SVF-doxygen/html/html/search/all_14.js +1 -1
- package/SVF-doxygen/html/html/search/all_15.js +4 -3
- package/SVF-doxygen/html/html/search/all_16.js +2 -1
- package/SVF-doxygen/html/html/search/all_2.js +1 -0
- package/SVF-doxygen/html/html/search/all_3.js +4 -2
- package/SVF-doxygen/html/html/search/all_4.js +6 -0
- package/SVF-doxygen/html/html/search/all_5.js +1 -2
- package/SVF-doxygen/html/html/search/all_7.js +9 -1
- package/SVF-doxygen/html/html/search/all_9.js +5 -1
- package/SVF-doxygen/html/html/search/all_c.js +2 -2
- package/SVF-doxygen/html/html/search/all_d.js +8 -1
- package/SVF-doxygen/html/html/search/all_e.js +2 -1
- package/SVF-doxygen/html/html/search/all_f.js +3 -2
- package/SVF-doxygen/html/html/search/classes_c.js +1 -0
- package/SVF-doxygen/html/html/search/enumvalues_4.js +1 -2
- package/SVF-doxygen/html/html/search/functions_11.js +2 -0
- package/SVF-doxygen/html/html/search/functions_2.js +1 -1
- package/SVF-doxygen/html/html/search/functions_6.js +5 -1
- package/SVF-doxygen/html/html/search/functions_c.js +1 -1
- package/SVF-doxygen/html/html/search/functions_e.js +1 -0
- package/SVF-doxygen/html/html/search/functions_f.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_0.js +11 -0
- package/SVF-doxygen/html/html/search/typedefs_1.js +1 -0
- package/SVF-doxygen/html/html/search/typedefs_10.js +1 -0
- package/SVF-doxygen/html/html/search/typedefs_13.js +1 -0
- package/SVF-doxygen/html/html/search/typedefs_14.js +1 -0
- package/SVF-doxygen/html/html/search/typedefs_2.js +2 -0
- package/SVF-doxygen/html/html/search/typedefs_3.js +6 -0
- package/SVF-doxygen/html/html/search/typedefs_6.js +4 -0
- package/SVF-doxygen/html/html/search/typedefs_7.js +4 -0
- package/SVF-doxygen/html/html/search/typedefs_b.js +7 -0
- package/SVF-doxygen/html/html/search/typedefs_c.js +1 -0
- package/SVF-doxygen/html/html/search/typedefs_e.js +1 -0
- package/SVF-doxygen/html/html/search/variables_1.js +1 -0
- package/SVF-doxygen/html/html/search/variables_13.js +1 -1
- package/SVF-doxygen/html/html/search/variables_14.js +1 -1
- package/SVF-doxygen/html/html/search/variables_f.js +1 -0
- package/SVF-doxygen/html/html/svf-ex_8cpp.html +1 -1
- package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +1 -1
- package/include/SVF-FE/BasicTypes.h +43 -0
- package/include/SVF-FE/SVFIRBuilder.h +0 -2
- package/include/Util/ExtAPI.h +49 -5
- package/include/Util/ExtAPI.json +1312 -320
- package/include/WPA/Andersen.h +1 -4
- package/include/WPA/WPASolver.h +1 -3
- package/lib/SVF-FE/SVFIRBuilder.cpp +219 -238
- package/lib/Util/ExtAPI.cpp +109 -0
- package/lib/WPA/AndersenWaveDiff.cpp +0 -14
- package/package.json +1 -1
|
@@ -77,7 +77,7 @@ $(function() {
|
|
|
77
77
|
<div class="ttc" id="classSVF_1_1AndersenStat_html_a8af8dd60987c4c99ea3727d9db87c187"><div class="ttname"><a href="classSVF_1_1AndersenStat.html#a8af8dd60987c4c99ea3727d9db87c187">SVF::AndersenStat::pta</a></div><div class="ttdeci">AndersenBase * pta</div><div class="ttdef"><b>Definition:</b> <a href="WPAStat_8h_source.html#l00052">WPAStat.h:52</a></div></div>
|
|
78
78
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a56368369bc37e37b13f19e5eb1890063"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a56368369bc37e37b13f19e5eb1890063">SVF::PointerAnalysis::containBlackHoleNode</a></div><div class="ttdeci">bool containBlackHoleNode(const PointsTo &pts)</div><div class="ttdoc">Determine whether a points-to contains a black hole or constant node. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00292">PointerAnalysis.h:292</a></div></div>
|
|
79
79
|
<div class="ttc" id="classSVF_1_1PTAStat_html_aeb6a52c31ecd004670e85f24b01d75d6"><div class="ttname"><a href="classSVF_1_1PTAStat.html#aeb6a52c31ecd004670e85f24b01d75d6">SVF::PTAStat::ProcessLoadStoreTime</a></div><div class="ttdeci">static const char * ProcessLoadStoreTime</div><div class="ttdoc">time of processing loads and stores </div><div class="ttdef"><b>Definition:</b> <a href="PTAStat_8h_source.html#l00056">PTAStat.h:56</a></div></div>
|
|
80
|
-
<div class="ttc" id="classSVF_1_1WPASolver_html_ab3369caa278da03e6e6697a839985cd6"><div class="ttname"><a href="classSVF_1_1WPASolver.html#ab3369caa278da03e6e6697a839985cd6">SVF::WPASolver::numOfIteration</a></div><div class="ttdeci">u32_t numOfIteration</div><div class="ttdoc">num of iterations during constaint solving </div><div class="ttdef"><b>Definition:</b> <a href="WPASolver_8h_source.html#
|
|
80
|
+
<div class="ttc" id="classSVF_1_1WPASolver_html_ab3369caa278da03e6e6697a839985cd6"><div class="ttname"><a href="classSVF_1_1WPASolver.html#ab3369caa278da03e6e6697a839985cd6">SVF::WPASolver::numOfIteration</a></div><div class="ttdeci">u32_t numOfIteration</div><div class="ttdoc">num of iterations during constaint solving </div><div class="ttdef"><b>Definition:</b> <a href="WPASolver_8h_source.html#l00204">WPASolver.h:204</a></div></div>
|
|
81
81
|
<div class="ttc" id="WPAStat_8h_html"><div class="ttname"><a href="WPAStat_8h.html">WPAStat.h</a></div></div>
|
|
82
82
|
<div class="ttc" id="classSVF_1_1AndersenStat_html_ac16491cbf4bcd22dc1a8acd25db20e10"><div class="ttname"><a href="classSVF_1_1AndersenStat.html#ac16491cbf4bcd22dc1a8acd25db20e10">SVF::AndersenStat::_MaxNumOfNodesInSCC</a></div><div class="ttdeci">static u32_t _MaxNumOfNodesInSCC</div><div class="ttdef"><b>Definition:</b> <a href="WPAStat_8h_source.html#l00061">WPAStat.h:61</a></div></div>
|
|
83
83
|
<div class="ttc" id="classSVF_1_1AndersenStat_html_ab8f8152b5e6127f2d9bdcbd22083da67"><div class="ttname"><a href="classSVF_1_1AndersenStat.html#ab8f8152b5e6127f2d9bdcbd22083da67">SVF::AndersenStat::_NumOfConstantPtr</a></div><div class="ttdeci">u32_t _NumOfConstantPtr</div><div class="ttdef"><b>Definition:</b> <a href="WPAStat_8h_source.html#l00063">WPAStat.h:63</a></div></div>
|
|
@@ -66,7 +66,7 @@ $(function() {
|
|
|
66
66
|
<div class="title">AndersenWaveDiff.cpp</div> </div>
|
|
67
67
|
</div><!--header-->
|
|
68
68
|
<div class="contents">
|
|
69
|
-
<a href="AndersenWaveDiff_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">//===- AndersenWaveDiff.cpp -- Wave propagation based Andersen's analysis with caching--//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// Copyright (C) <2013-2017> <Yulei Sui></span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">// along with this program. If not, see <http://www.gnu.org/licenses/>.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment">//===--------------------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * AndersenWaveDiff.cpp</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> *</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * Created on: 23/11/2013</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> * Author: yesen</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment"> */</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "<a class="code" href="Andersen_8h.html">WPA/Andersen.h</a>"</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "<a class="code" href="PointsTo_8h.html">MemoryModel/PointsTo.h</a>"</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">using namespace </span><a class="code" href="namespaceSVFUtil.html">SVFUtil</a>;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <a class="code" href="classSVF_1_1AndersenWaveDiff.html">AndersenWaveDiff</a>* <a class="code" href="classSVF_1_1AndersenWaveDiff.html#add4dcb6d74a8ce8747bcac5f740cd672">AndersenWaveDiff::diffWave</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div><div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenWaveDiff.html#a35cd97d5f7c1dcb65dd077f45ad864e9"> 41</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenWaveDiff.html#a35cd97d5f7c1dcb65dd077f45ad864e9">AndersenWaveDiff::solveWorklist</a>()</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> {</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="comment">// Initialize the nodeStack via a whole SCC detection</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="comment">// Nodes in nodeStack are in topological order by default.</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <a class="code" href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">NodeStack</a>& nodeStack = SCCDetect();</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="comment">// Process nodeStack and put the changed nodes into workList.</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keywordflow">while</span> (!nodeStack.empty())</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  {</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = nodeStack.top();</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  nodeStack.pop();</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  collapsePWCNode(nodeId);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="comment">// process nodes in nodeStack</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  processNode(nodeId);</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  collapseFields();</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  }</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="comment">// This modification is to make WAVE feasible to handle PWC analysis</span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordflow">if</span> (!mergePWC())</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <a class="code" href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">NodeStack</a> tmpWorklist;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordflow">while</span> (!isWorklistEmpty())</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = popFromWorklist();</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  collapsePWCNode(nodeId);</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="comment">// process nodes in nodeStack</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  processNode(nodeId);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  collapseFields();</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  tmpWorklist.push(nodeId);</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  }</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keywordflow">while</span> (!tmpWorklist.empty())</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  {</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = tmpWorklist.top();</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  tmpWorklist.pop();</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  pushIntoWorklist(nodeId);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  }</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  }</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="comment">// New nodes will be inserted into workList during processing.</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keywordflow">while</span> (!isWorklistEmpty())</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  {</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = popFromWorklist();</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="comment">// process nodes in worklist</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  postProcessNode(nodeId);</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  }</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> }</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div><div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenWaveDiff.html#afa1055cda6c910b24480505efd205895"> 91</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenWaveDiff.html#afa1055cda6c910b24480505efd205895">AndersenWaveDiff::processNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId)</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> {</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="comment">// This node may be merged during collapseNodePts() which means it is no longer a rep node</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="comment">// in the graph. Only rep node needs to be handled.</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="keywordflow">if</span> (sccRepNode(nodeId) != nodeId)</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keywordtype">double</span> propStart = stat->getClk();</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node = consCG->getConstraintNode(nodeId);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  handleCopyGep(node);</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keywordtype">double</span> propEnd = stat->getClk();</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  timeOfProcessCopyGep += (propEnd - propStart) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span> }</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div><div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenWaveDiff.html#aa0659a2787c1f9b1b6ec62900313475e"> 108</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenWaveDiff.html#aa0659a2787c1f9b1b6ec62900313475e">AndersenWaveDiff::postProcessNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId)</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span> {</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keywordtype">double</span> insertStart = stat->getClk();</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node = consCG->getConstraintNode(nodeId);</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="comment">// handle load</span></div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1ConstraintNode.html#ab1868f04de44f6fe1e9ac14f3d4ee56b">ConstraintNode::const_iterator</a> it = node-><a class="code" href="classSVF_1_1ConstraintNode.html#af69c7e623ab5a36644b6aeabaa1a1e28">outgoingLoadsBegin</a>(), eit = node-><a class="code" href="classSVF_1_1ConstraintNode.html#a134e8ed040d7749c2b9a02662115f746">outgoingLoadsEnd</a>();</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  it != eit; ++it)</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  {</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keywordflow">if</span> (handleLoad(nodeId, *it))</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  reanalyze = <span class="keyword">true</span>;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  }</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="comment">// handle store</span></div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1ConstraintNode.html#ab1868f04de44f6fe1e9ac14f3d4ee56b">ConstraintNode::const_iterator</a> it = node-><a class="code" href="classSVF_1_1ConstraintNode.html#a5a90b39f9e5769bde44a673806270714">incomingStoresBegin</a>(), eit = node-><a class="code" href="classSVF_1_1ConstraintNode.html#a8d58f5224728bb6811f12c94826167f6">incomingStoresEnd</a>();</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  it != eit; ++it)</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  {</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keywordflow">if</span> (handleStore(nodeId, *it))</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  reanalyze = <span class="keyword">true</span>;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  }</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span> </div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keywordtype">double</span> insertEnd = stat->getClk();</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  timeOfProcessLoadStore += (insertEnd - insertStart) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span> }</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span> </div><div class="line"><a name="l00136"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenWaveDiff.html#a7f2af504c4fb96e64371a8533c0525fe"> 136</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1AndersenWaveDiff.html#a7f2af504c4fb96e64371a8533c0525fe">AndersenWaveDiff::handleLoad</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId, <span class="keyword">const</span> <a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge)</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span> {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> piter = getPts(nodeId).begin(), epiter = getPts(nodeId).end();</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  piter != epiter; ++piter)</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  {</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="keywordflow">if</span> (processLoad(*piter, edge))</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  {</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  }</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  }</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span> }</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div><div class="line"><a name="l00153"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenWaveDiff.html#a775a74d57842b85301daeafe64c8a5c4"> 153</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1AndersenWaveDiff.html#a775a74d57842b85301daeafe64c8a5c4">AndersenWaveDiff::handleStore</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId, <span class="keyword">const</span> <a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge)</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span> {</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> piter = getPts(nodeId).begin(), epiter = getPts(nodeId).end();</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  piter != epiter; ++piter)</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  {</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keywordflow">if</span> (processStore(*piter, edge))</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  {</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  }</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  }</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span> }</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="comment">/*</span></div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="comment"> * Merge a node to its rep node</span></div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="comment"> */</span></div><div class="line"><a name="l00170"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenWaveDiff.html#acdc82c72b14e012551a460fa91a634db"> 170</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenWaveDiff.html#acdc82c72b14e012551a460fa91a634db">AndersenWaveDiff::mergeNodeToRep</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId,<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> newRepId)</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span> {</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <span class="keywordflow">if</span>(nodeId==newRepId)</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span> </div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  updatePropaPts(newRepId, nodeId);</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span> </div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <a class="code" href="classSVF_1_1Andersen.html#a36729160041bc3a3e2b0a92b29062848">Andersen::mergeNodeToRep</a>(nodeId, newRepId);</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span> }</div><div class="ttc" id="Andersen_8h_html"><div class="ttname"><a href="Andersen_8h.html">Andersen.h</a></div></div>
|
|
69
|
+
<a href="AndersenWaveDiff_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">//===- AndersenWaveDiff.cpp -- Wave propagation based Andersen's analysis with caching--//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// Copyright (C) <2013-2017> <Yulei Sui></span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">// along with this program. If not, see <http://www.gnu.org/licenses/>.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment">//===--------------------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * AndersenWaveDiff.cpp</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> *</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * Created on: 23/11/2013</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> * Author: yesen</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment"> */</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "<a class="code" href="Andersen_8h.html">WPA/Andersen.h</a>"</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "<a class="code" href="PointsTo_8h.html">MemoryModel/PointsTo.h</a>"</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">using namespace </span><a class="code" href="namespaceSVFUtil.html">SVFUtil</a>;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <a class="code" href="classSVF_1_1AndersenWaveDiff.html">AndersenWaveDiff</a>* <a class="code" href="classSVF_1_1AndersenWaveDiff.html#add4dcb6d74a8ce8747bcac5f740cd672">AndersenWaveDiff::diffWave</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div><div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenWaveDiff.html#a35cd97d5f7c1dcb65dd077f45ad864e9"> 41</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenWaveDiff.html#a35cd97d5f7c1dcb65dd077f45ad864e9">AndersenWaveDiff::solveWorklist</a>()</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> {</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="comment">// Initialize the nodeStack via a whole SCC detection</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="comment">// Nodes in nodeStack are in topological order by default.</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <a class="code" href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">NodeStack</a>& nodeStack = SCCDetect();</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="comment">// Process nodeStack and put the changed nodes into workList.</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keywordflow">while</span> (!nodeStack.empty())</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  {</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = nodeStack.top();</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  nodeStack.pop();</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  collapsePWCNode(nodeId);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="comment">// process nodes in nodeStack</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  processNode(nodeId);</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  collapseFields();</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  }</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="comment">// This modification is to make WAVE feasible to handle PWC analysis</span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordflow">if</span> (!mergePWC())</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <a class="code" href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">NodeStack</a> tmpWorklist;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordflow">while</span> (!isWorklistEmpty())</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = popFromWorklist();</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  collapsePWCNode(nodeId);</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="comment">// process nodes in nodeStack</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  processNode(nodeId);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  collapseFields();</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  tmpWorklist.push(nodeId);</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  }</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keywordflow">while</span> (!tmpWorklist.empty())</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  {</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = tmpWorklist.top();</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  tmpWorklist.pop();</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  pushIntoWorklist(nodeId);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  }</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  }</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="comment">// New nodes will be inserted into workList during processing.</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keywordflow">while</span> (!isWorklistEmpty())</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  {</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = popFromWorklist();</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="comment">// process nodes in worklist</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  postProcessNode(nodeId);</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  }</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> }</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div><div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenWaveDiff.html#afa1055cda6c910b24480505efd205895"> 91</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenWaveDiff.html#afa1055cda6c910b24480505efd205895">AndersenWaveDiff::processNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId)</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> {</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="comment">// This node may be merged during collapseNodePts() which means it is no longer a rep node</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="comment">// in the graph. Only rep node needs to be handled.</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="keywordflow">if</span> (sccRepNode(nodeId) != nodeId)</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keywordtype">double</span> propStart = stat->getClk();</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node = consCG->getConstraintNode(nodeId);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  handleCopyGep(node);</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keywordtype">double</span> propEnd = stat->getClk();</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  timeOfProcessCopyGep += (propEnd - propStart) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span> }</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div><div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenWaveDiff.html#aa0659a2787c1f9b1b6ec62900313475e"> 108</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenWaveDiff.html#aa0659a2787c1f9b1b6ec62900313475e">AndersenWaveDiff::postProcessNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId)</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span> {</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keywordtype">double</span> insertStart = stat->getClk();</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node = consCG->getConstraintNode(nodeId);</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="comment">// handle load</span></div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1ConstraintNode.html#ab1868f04de44f6fe1e9ac14f3d4ee56b">ConstraintNode::const_iterator</a> it = node-><a class="code" href="classSVF_1_1ConstraintNode.html#af69c7e623ab5a36644b6aeabaa1a1e28">outgoingLoadsBegin</a>(), eit = node-><a class="code" href="classSVF_1_1ConstraintNode.html#a134e8ed040d7749c2b9a02662115f746">outgoingLoadsEnd</a>();</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  it != eit; ++it)</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  {</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keywordflow">if</span> (handleLoad(nodeId, *it))</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  reanalyze = <span class="keyword">true</span>;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  }</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="comment">// handle store</span></div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1ConstraintNode.html#ab1868f04de44f6fe1e9ac14f3d4ee56b">ConstraintNode::const_iterator</a> it = node-><a class="code" href="classSVF_1_1ConstraintNode.html#a5a90b39f9e5769bde44a673806270714">incomingStoresBegin</a>(), eit = node-><a class="code" href="classSVF_1_1ConstraintNode.html#a8d58f5224728bb6811f12c94826167f6">incomingStoresEnd</a>();</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  it != eit; ++it)</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  {</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keywordflow">if</span> (handleStore(nodeId, *it))</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  reanalyze = <span class="keyword">true</span>;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  }</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span> </div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keywordtype">double</span> insertEnd = stat->getClk();</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  timeOfProcessLoadStore += (insertEnd - insertStart) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span> }</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span> </div><div class="line"><a name="l00136"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenWaveDiff.html#a7f2af504c4fb96e64371a8533c0525fe"> 136</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1AndersenWaveDiff.html#a7f2af504c4fb96e64371a8533c0525fe">AndersenWaveDiff::handleLoad</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId, <span class="keyword">const</span> <a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge)</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span> {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> piter = getPts(nodeId).begin(), epiter = getPts(nodeId).end();</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  piter != epiter; ++piter)</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  {</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="keywordflow">if</span> (processLoad(*piter, edge))</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  {</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  }</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  }</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span> }</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div><div class="line"><a name="l00153"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenWaveDiff.html#a775a74d57842b85301daeafe64c8a5c4"> 153</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1AndersenWaveDiff.html#a775a74d57842b85301daeafe64c8a5c4">AndersenWaveDiff::handleStore</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId, <span class="keyword">const</span> <a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge)</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span> {</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> piter = getPts(nodeId).begin(), epiter = getPts(nodeId).end();</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  piter != epiter; ++piter)</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  {</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keywordflow">if</span> (processStore(*piter, edge))</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  {</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  }</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  }</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span> }</div><div class="ttc" id="Andersen_8h_html"><div class="ttname"><a href="Andersen_8h.html">Andersen.h</a></div></div>
|
|
70
70
|
<div class="ttc" id="classSVF_1_1AndersenWaveDiff_html_a775a74d57842b85301daeafe64c8a5c4"><div class="ttname"><a href="classSVF_1_1AndersenWaveDiff.html#a775a74d57842b85301daeafe64c8a5c4">SVF::AndersenWaveDiff::handleStore</a></div><div class="ttdeci">virtual bool handleStore(NodeID id, const ConstraintEdge *store)</div><div class="ttdef"><b>Definition:</b> <a href="AndersenWaveDiff_8cpp_source.html#l00153">AndersenWaveDiff.cpp:153</a></div></div>
|
|
71
71
|
<div class="ttc" id="classSVF_1_1AndersenWaveDiff_html_afa1055cda6c910b24480505efd205895"><div class="ttname"><a href="classSVF_1_1AndersenWaveDiff.html#afa1055cda6c910b24480505efd205895">SVF::AndersenWaveDiff::processNode</a></div><div class="ttdeci">virtual void processNode(NodeID nodeId)</div><div class="ttdef"><b>Definition:</b> <a href="AndersenWaveDiff_8cpp_source.html#l00091">AndersenWaveDiff.cpp:91</a></div></div>
|
|
72
72
|
<div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00019">MTAResultValidator.h:19</a></div></div>
|
|
@@ -75,7 +75,6 @@ $(function() {
|
|
|
75
75
|
<div class="ttc" id="classSVF_1_1PointsTo_1_1PointsToIterator_html"><div class="ttname"><a href="classSVF_1_1PointsTo_1_1PointsToIterator.html">SVF::PointsTo::PointsToIterator</a></div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00181">PointsTo.h:181</a></div></div>
|
|
76
76
|
<div class="ttc" id="classSVF_1_1ConstraintNode_html_ab1868f04de44f6fe1e9ac14f3d4ee56b"><div class="ttname"><a href="classSVF_1_1ConstraintNode.html#ab1868f04de44f6fe1e9ac14f3d4ee56b">SVF::ConstraintNode::const_iterator</a></div><div class="ttdeci">ConstraintEdge::ConstraintEdgeSetTy::const_iterator const_iterator</div><div class="ttdef"><b>Definition:</b> <a href="ConsGNode_8h_source.html#l00045">ConsGNode.h:45</a></div></div>
|
|
77
77
|
<div class="ttc" id="classSVF_1_1ConstraintNode_html_a5a90b39f9e5769bde44a673806270714"><div class="ttname"><a href="classSVF_1_1ConstraintNode.html#a5a90b39f9e5769bde44a673806270714">SVF::ConstraintNode::incomingStoresBegin</a></div><div class="ttdeci">const_iterator incomingStoresBegin() const</div><div class="ttdef"><b>Definition:</b> <a href="ConsGNode_8h_source.html#l00283">ConsGNode.h:283</a></div></div>
|
|
78
|
-
<div class="ttc" id="classSVF_1_1AndersenWaveDiff_html_acdc82c72b14e012551a460fa91a634db"><div class="ttname"><a href="classSVF_1_1AndersenWaveDiff.html#acdc82c72b14e012551a460fa91a634db">SVF::AndersenWaveDiff::mergeNodeToRep</a></div><div class="ttdeci">virtual void mergeNodeToRep(NodeID nodeId, NodeID newRepId)</div><div class="ttdoc">Merge sub node to its rep. </div><div class="ttdef"><b>Definition:</b> <a href="AndersenWaveDiff_8cpp_source.html#l00170">AndersenWaveDiff.cpp:170</a></div></div>
|
|
79
78
|
<div class="ttc" id="classSVF_1_1AndersenWaveDiff_html_a35cd97d5f7c1dcb65dd077f45ad864e9"><div class="ttname"><a href="classSVF_1_1AndersenWaveDiff.html#a35cd97d5f7c1dcb65dd077f45ad864e9">SVF::AndersenWaveDiff::solveWorklist</a></div><div class="ttdeci">virtual void solveWorklist()</div><div class="ttdef"><b>Definition:</b> <a href="AndersenWaveDiff_8cpp_source.html#l00041">AndersenWaveDiff.cpp:41</a></div></div>
|
|
80
79
|
<div class="ttc" id="classSVF_1_1AndersenWaveDiff_html_add4dcb6d74a8ce8747bcac5f740cd672"><div class="ttname"><a href="classSVF_1_1AndersenWaveDiff.html#add4dcb6d74a8ce8747bcac5f740cd672">SVF::AndersenWaveDiff::diffWave</a></div><div class="ttdeci">static AndersenWaveDiff * diffWave</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00415">Andersen.h:415</a></div></div>
|
|
81
80
|
<div class="ttc" id="namespaceSVFUtil_html"><div class="ttname"><a href="namespaceSVFUtil.html">SVFUtil</a></div></div>
|
|
@@ -86,7 +85,6 @@ $(function() {
|
|
|
86
85
|
<div class="ttc" id="classSVF_1_1ConstraintNode_html"><div class="ttname"><a href="classSVF_1_1ConstraintNode.html">SVF::ConstraintNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ConsGNode_8h_source.html#l00040">ConsGNode.h:40</a></div></div>
|
|
87
86
|
<div class="ttc" id="classSVF_1_1AndersenWaveDiff_html_aa0659a2787c1f9b1b6ec62900313475e"><div class="ttname"><a href="classSVF_1_1AndersenWaveDiff.html#aa0659a2787c1f9b1b6ec62900313475e">SVF::AndersenWaveDiff::postProcessNode</a></div><div class="ttdeci">virtual void postProcessNode(NodeID nodeId)</div><div class="ttdef"><b>Definition:</b> <a href="AndersenWaveDiff_8cpp_source.html#l00108">AndersenWaveDiff.cpp:108</a></div></div>
|
|
88
87
|
<div class="ttc" id="SVFBasicTypes_8h_html_a1aeda3370621dc00e9a0fe8e7aabc736"><div class="ttname"><a href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a></div><div class="ttdeci">#define TIMEINTERVAL</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00182">SVFBasicTypes.h:182</a></div></div>
|
|
89
|
-
<div class="ttc" id="classSVF_1_1Andersen_html_a36729160041bc3a3e2b0a92b29062848"><div class="ttname"><a href="classSVF_1_1Andersen.html#a36729160041bc3a3e2b0a92b29062848">SVF::Andersen::mergeNodeToRep</a></div><div class="ttdeci">virtual void mergeNodeToRep(NodeID nodeId, NodeID newRepId)</div><div class="ttdoc">Merge sub node to its rep. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00814">Andersen.cpp:814</a></div></div>
|
|
90
88
|
<div class="ttc" id="classSVF_1_1ConstraintNode_html_af69c7e623ab5a36644b6aeabaa1a1e28"><div class="ttname"><a href="classSVF_1_1ConstraintNode.html#af69c7e623ab5a36644b6aeabaa1a1e28">SVF::ConstraintNode::outgoingLoadsBegin</a></div><div class="ttdeci">const_iterator outgoingLoadsBegin() const</div><div class="ttdef"><b>Definition:</b> <a href="ConsGNode_8h_source.html#l00258">ConsGNode.h:258</a></div></div>
|
|
91
89
|
<div class="ttc" id="namespaceSVF_html"><div class="ttname"><a href="namespaceSVF.html">SVF</a></div><div class="ttdoc">for isBitcode </div><div class="ttdef"><b>Definition:</b> <a href="CFGNormalizer_8h_source.html#l00035">CFGNormalizer.h:35</a></div></div>
|
|
92
90
|
<div class="ttc" id="classSVF_1_1ConstraintEdge_html"><div class="ttname"><a href="classSVF_1_1ConstraintEdge.html">SVF::ConstraintEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="ConsGEdge_8h_source.html#l00048">ConsGEdge.h:48</a></div></div>
|
|
@@ -113,7 +113,7 @@ $(function() {
|
|
|
113
113
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a077caa1b10ab84d101d79fc7ea50db2d"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a077caa1b10ab84d101d79fc7ea50db2d">SVF::SVFUtil::writeWrnMsg</a></div><div class="ttdeci">void writeWrnMsg(std::string msg)</div><div class="ttdoc">Writes a message run through wrnMsg. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00067">SVFUtil.cpp:67</a></div></div>
|
|
114
114
|
<div class="ttc" id="classSVF_1_1AndersenBase_html_a25b00d9ca71cbdd27530fc5d0dc84ee5"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a25b00d9ca71cbdd27530fc5d0dc84ee5">SVF::AndersenBase::numOfSfrs</a></div><div class="ttdeci">static u32_t numOfSfrs</div><div class="ttdoc">Number of processed Store edge. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00122">Andersen.h:122</a></div></div>
|
|
115
115
|
<div class="ttc" id="classSVF_1_1SVFVar_html_a3b61042079a6c9dc395f38925c6a1271"><div class="ttname"><a href="classSVF_1_1SVFVar.html#a3b61042079a6c9dc395f38925c6a1271">SVF::SVFVar::isPointer</a></div><div class="ttdeci">virtual bool isPointer() const</div><div class="ttdoc">Whether it is a pointer. </div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00112">SVFVariables.h:112</a></div></div>
|
|
116
|
-
<div class="ttc" id="classSVF_1_1Andersen_html_ac22a6946de30bc5887b9e4ec9259764f"><div class="ttname"><a href="classSVF_1_1Andersen.html#ac22a6946de30bc5887b9e4ec9259764f">SVF::Andersen::collapseFields</a></div><div class="ttdeci">void collapseFields()</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00468">Andersen.cpp:468</a></div></div>
|
|
116
|
+
<div class="ttc" id="classSVF_1_1Andersen_html_ac22a6946de30bc5887b9e4ec9259764f"><div class="ttname"><a href="classSVF_1_1Andersen.html#ac22a6946de30bc5887b9e4ec9259764f">SVF::Andersen::collapseFields</a></div><div class="ttdeci">void collapseFields()</div><div class="ttdoc">collapse positive weight cycles of a graph </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00468">Andersen.cpp:468</a></div></div>
|
|
117
117
|
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_ac10cbda6a84ce890c9946a5ff35800b7"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ac10cbda6a84ce890c9946a5ff35800b7">SVF::NodeIDAllocator::Clusterer::printStats</a></div><div class="ttdeci">static void printStats(std::string title, Map< std::string, std::string > &stats)</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00691">NodeIDAllocator.cpp:691</a></div></div>
|
|
118
118
|
<div class="ttc" id="classSVF_1_1AndersenBase_html_a2b763519509ce21cf40893c01f8357b6"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a2b763519509ce21cf40893c01f8357b6">SVF::AndersenBase::numOfProcessedStore</a></div><div class="ttdeci">static u32_t numOfProcessedStore</div><div class="ttdoc">Number of processed Load edge. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00121">Andersen.h:121</a></div></div>
|
|
119
119
|
<div class="ttc" id="cJSON_8cpp_html_ab6e2ea6dc7bd57d1483413449998230a"><div class="ttname"><a href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a></div><div class="ttdeci">cJSON * n</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l02558">cJSON.cpp:2558</a></div></div>
|
|
@@ -163,7 +163,7 @@ $(function() {
|
|
|
163
163
|
<div class="ttc" id="classSVF_1_1Andersen_html_a3f0048155f0b3a6899dac6f30553aa9e"><div class="ttname"><a href="classSVF_1_1Andersen.html#a3f0048155f0b3a6899dac6f30553aa9e">SVF::Andersen::collapseNodePts</a></div><div class="ttdeci">bool collapseNodePts(NodeID nodeId)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00526">Andersen.cpp:526</a></div></div>
|
|
164
164
|
<div class="ttc" id="classSVF_1_1Andersen_html_a36729160041bc3a3e2b0a92b29062848"><div class="ttname"><a href="classSVF_1_1Andersen.html#a36729160041bc3a3e2b0a92b29062848">SVF::Andersen::mergeNodeToRep</a></div><div class="ttdeci">virtual void mergeNodeToRep(NodeID nodeId, NodeID newRepId)</div><div class="ttdoc">Merge sub node to its rep. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00814">Andersen.cpp:814</a></div></div>
|
|
165
165
|
<div class="ttc" id="classSVF_1_1Options_html_a4c7eb57066c80c62ef394d644833214a"><div class="ttname"><a href="classSVF_1_1Options.html#a4c7eb57066c80c62ef394d644833214a">SVF::Options::WriteAnder</a></div><div class="ttdeci">static const llvm::cl::opt< std ::string > WriteAnder</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00234">Options.h:234</a></div></div>
|
|
166
|
-
<div class="ttc" id="classSVF_1_1Andersen_html_ae79bff0e9c49f15e7db00ed605824d98"><div class="ttname"><a href="classSVF_1_1Andersen.html#ae79bff0e9c49f15e7db00ed605824d98">SVF::Andersen::collapsePWCNode</a></div><div class="ttdeci">void collapsePWCNode(NodeID nodeId)</div><div class="ttdoc">Collapse a field object into its base for field insensitive anlaysis. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00459">Andersen.cpp:459</a></div></div>
|
|
166
|
+
<div class="ttc" id="classSVF_1_1Andersen_html_ae79bff0e9c49f15e7db00ed605824d98"><div class="ttname"><a href="classSVF_1_1Andersen.html#ae79bff0e9c49f15e7db00ed605824d98">SVF::Andersen::collapsePWCNode</a></div><div class="ttdeci">virtual void collapsePWCNode(NodeID nodeId)</div><div class="ttdoc">Collapse a field object into its base for field insensitive anlaysis. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00459">Andersen.cpp:459</a></div></div>
|
|
167
167
|
<div class="ttc" id="classSVF_1_1ConstraintNode_html_a19d3d2c996ba821227a836717e5443c8"><div class="ttname"><a href="classSVF_1_1ConstraintNode.html#a19d3d2c996ba821227a836717e5443c8">SVF::ConstraintNode::getGepOutEdges</a></div><div class="ttdeci">const ConstraintEdge::ConstraintEdgeSetTy & getGepOutEdges() const</div><div class="ttdef"><b>Definition:</b> <a href="ConsGNode_8h_source.html#l00136">ConsGNode.h:136</a></div></div>
|
|
168
168
|
<div class="ttc" id="Options_8h_html"><div class="ttname"><a href="Options_8h.html">Options.h</a></div></div>
|
|
169
169
|
<div class="ttc" id="classSVF_1_1Andersen_html_ae1ff65a411f2c4dfee0973ad4af48daf"><div class="ttname"><a href="classSVF_1_1Andersen.html#ae1ff65a411f2c4dfee0973ad4af48daf">SVF::Andersen::cluster</a></div><div class="ttdeci">virtual void cluster(void) const</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00842">Andersen.cpp:842</a></div></div>
|