svf-tools 1.0.412 → 1.0.415
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 +3 -3
- package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/ContextDDA_8h_source.html +5 -5
- package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +9 -9
- package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/FSMPTA_8h_source.html +1 -1
- package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/FlowDDA_8h_source.html +5 -5
- package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp.html +1 -1
- package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +14 -14
- package/SVF-doxygen/html/html/FlowSensitiveTBHC_8h_source.html +6 -6
- package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +21 -21
- package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +8 -8
- package/SVF-doxygen/html/html/NodeIDAllocator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFGEdge_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFGNode_8h_source.html +89 -88
- package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +15 -15
- package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +19 -19
- package/SVF-doxygen/html/html/SVFG_8cpp_source.html +71 -69
- package/SVF-doxygen/html/html/SVFG_8h_source.html +41 -41
- package/SVF-doxygen/html/html/SVFUtil_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/SVFUtil_8h.html +2 -2
- package/SVF-doxygen/html/html/SVFUtil_8h_source.html +2 -2
- package/SVF-doxygen/html/html/SaberAnnotator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/VFGEdge_8h_source.html +1 -1
- package/SVF-doxygen/html/html/VFGNode_8h.html +1 -1
- package/SVF-doxygen/html/html/VFGNode_8h_source.html +197 -195
- package/SVF-doxygen/html/html/VFG_8cpp_source.html +89 -72
- package/SVF-doxygen/html/html/VFG_8h_source.html +39 -39
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8h_source.html +2 -2
- package/SVF-doxygen/html/html/WPAStat_8h_source.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode-members.html +46 -45
- package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode.html +24 -21
- package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode-members.html +46 -45
- package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode.html +25 -22
- package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode-members.html +45 -44
- package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode.html +59 -22
- package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode-members.html +46 -45
- package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode.html +61 -24
- package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode-members.html +51 -50
- package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode.html +50 -14
- package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode-members.html +44 -43
- package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode.html +23 -20
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode-members.html +52 -51
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +69 -32
- package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode-members.html +46 -45
- package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode.html +59 -24
- package/SVF-doxygen/html/html/classSVF_1_1CallDirSVFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CallIndSVFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode-members.html +52 -51
- package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +70 -33
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode-members.html +51 -50
- package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode.html +50 -14
- package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1DirectSVFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1DummyVersionPropSVFGNode-members.html +46 -45
- package/SVF-doxygen/html/html/classSVF_1_1DummyVersionPropSVFGNode.html +53 -17
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +32 -32
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +17 -17
- package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode-members.html +47 -46
- package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode.html +24 -21
- package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode-members.html +47 -46
- package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode.html +22 -19
- package/SVF-doxygen/html/html/classSVF_1_1FormalParmVFGNode-members.html +45 -44
- package/SVF-doxygen/html/html/classSVF_1_1FormalParmVFGNode.html +65 -28
- package/SVF-doxygen/html/html/classSVF_1_1FormalRetVFGNode-members.html +49 -48
- package/SVF-doxygen/html/html/classSVF_1_1FormalRetVFGNode.html +65 -28
- package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode-members.html +51 -50
- package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode.html +50 -14
- package/SVF-doxygen/html/html/classSVF_1_1IndirectSVFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode-members.html +58 -57
- package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +45 -42
- package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode-members.html +56 -55
- package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +40 -37
- package/SVF-doxygen/html/html/classSVF_1_1IntraDirSVFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1IntraIndSVFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode-members.html +56 -55
- package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode.html +26 -23
- package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode-members.html +57 -56
- package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +26 -23
- package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode-members.html +54 -53
- package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode.html +50 -14
- package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1MRSVFGNode-members.html +44 -43
- package/SVF-doxygen/html/html/classSVF_1_1MRSVFGNode.html +48 -13
- package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode-members.html +53 -52
- package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode.html +36 -33
- package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +32 -32
- package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +1 -2
- package/SVF-doxygen/html/html/classSVF_1_1NullPtrVFGNode-members.html +46 -45
- package/SVF-doxygen/html/html/classSVF_1_1NullPtrVFGNode.html +58 -21
- package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode-members.html +53 -52
- package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +71 -34
- package/SVF-doxygen/html/html/classSVF_1_1RetDirSVFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1RetIndSVFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +77 -77
- package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +29 -29
- package/SVF-doxygen/html/html/classSVF_1_1SaberAnnotator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode-members.html +51 -50
- package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode.html +35 -32
- package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode-members.html +54 -53
- package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode.html +51 -14
- package/SVF-doxygen/html/html/classSVF_1_1ThreadMHPIndSVFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode-members.html +55 -54
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +76 -39
- package/SVF-doxygen/html/html/classSVF_1_1VFG.html +70 -70
- package/SVF-doxygen/html/html/classSVF_1_1VFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1VFGNode-members.html +43 -42
- package/SVF-doxygen/html/html/classSVF_1_1VFGNode.html +41 -9
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +10 -10
- package/SVF-doxygen/html/html/functions_func_g.html +32 -12
- package/SVF-doxygen/html/html/functions_func_t.html +2 -2
- package/SVF-doxygen/html/html/functions_g.html +27 -7
- package/SVF-doxygen/html/html/functions_i.html +1 -1
- package/SVF-doxygen/html/html/functions_l.html +5 -5
- package/SVF-doxygen/html/html/functions_p.html +6 -6
- package/SVF-doxygen/html/html/functions_r.html +8 -8
- package/SVF-doxygen/html/html/functions_t.html +8 -6
- package/SVF-doxygen/html/html/functions_v.html +3 -3
- package/SVF-doxygen/html/html/namespaceSVF.html +1 -1
- package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +7 -7
- package/SVF-doxygen/html/html/namespacemembers_p.html +1 -1
- package/SVF-doxygen/html/html/namespacemembers_type_p.html +1 -1
- package/SVF-doxygen/html/html/search/all_10.js +5 -5
- package/SVF-doxygen/html/html/search/all_12.js +3 -3
- package/SVF-doxygen/html/html/search/all_13.js +3 -3
- package/SVF-doxygen/html/html/search/all_14.js +7 -7
- package/SVF-doxygen/html/html/search/all_16.js +2 -2
- package/SVF-doxygen/html/html/search/all_7.js +1 -0
- package/SVF-doxygen/html/html/search/all_9.js +1 -1
- package/SVF-doxygen/html/html/search/all_c.js +3 -3
- package/SVF-doxygen/html/html/search/all_d.js +1 -1
- package/SVF-doxygen/html/html/search/all_e.js +3 -3
- package/SVF-doxygen/html/html/search/all_f.js +1 -1
- package/SVF-doxygen/html/html/search/functions_10.js +1 -1
- package/SVF-doxygen/html/html/search/functions_11.js +1 -1
- package/SVF-doxygen/html/html/search/functions_6.js +1 -0
- package/SVF-doxygen/html/html/search/functions_8.js +1 -1
- package/SVF-doxygen/html/html/search/functions_e.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_f.js +1 -1
- package/SVF-doxygen/html/html/search/variables_14.js +4 -4
- package/SVF-doxygen/html/html/search/variables_d.js +1 -1
- package/SVF-doxygen/html/html/search/variables_e.js +2 -2
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01SVFG_01_5_01_4.html +48 -48
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html +36 -36
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1SVFGNodeLockSpan_01_4.html +1 -1
- package/include/Graphs/SVFGNode.h +6 -1
- package/include/Graphs/VFG.h +1 -1
- package/include/Graphs/VFGNode.h +38 -3
- package/include/Util/SVFUtil.h +1 -1
- package/lib/Graphs/SVFG.cpp +9 -0
- package/lib/Graphs/VFG.cpp +86 -0
- package/lib/Util/NodeIDAllocator.cpp +2 -2
- package/lib/WPA/AndersenStat.cpp +0 -8
- package/package.json +1 -1
|
@@ -68,17 +68,17 @@ $(function() {
|
|
|
68
68
|
<div class="contents">
|
|
69
69
|
<a href="FlowSensitive_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">//===- FlowSensitive.cpp -- Sparse flow-sensitive pointer analysis------------//</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"> * FlowSensitive.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: Oct 28, 2013</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> * Author: Yulei Sui</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="Options_8h.html">Util/Options.h</a>"</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "<a class="code" href="DCHG_8h.html">SVF-FE/DCHG.h</a>"</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include "<a class="code" href="SVFModule_8h.html">Util/SVFModule.h</a>"</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include "<a class="code" href="TypeBasedHeapCloning_8h.html">Util/TypeBasedHeapCloning.h</a>"</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include "<a class="code" href="WPAStat_8h.html">WPA/WPAStat.h</a>"</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#include "<a class="code" href="FlowSensitive_8h.html">WPA/FlowSensitive.h</a>"</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#include "<a class="code" href="Andersen_8h.html">WPA/Andersen.h</a>"</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#include "<a class="code" href="PointsTo_8h.html">MemoryModel/PointsTo.h</a>"</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keyword">using namespace </span>SVFUtil;</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> <a class="code" href="classSVF_1_1FlowSensitive.html">FlowSensitive</a>* <a class="code" href="classSVF_1_1FlowSensitive.html#a4ad2095dc708df07602de25e4a004776">FlowSensitive::fspta</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div><div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#ad6243c1317503bed39411dab47c83da7"> 48</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1FlowSensitive.html#ad6243c1317503bed39411dab47c83da7">FlowSensitive::initialize</a>()</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="classSVF_1_1PointerAnalysis.html#a431ec4f85eb0f029e5740b92fd9ceb32">PointerAnalysis::initialize</a>();</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  stat = <span class="keyword">new</span> <a class="code" href="classSVF_1_1FlowSensitiveStat.html">FlowSensitiveStat</a>(<span class="keyword">this</span>);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="comment">// TODO: support clustered aux. Andersen's.</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!<a class="code" href="classSVF_1_1Options.html#a8459d43a21bcf8a50fc55d14fcf5a81e">Options::ClusterAnder</a> && <span class="stringliteral">"FlowSensitive::initialize: clustering auxiliary Andersen's unsupported."</span>);</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  ander = <a class="code" href="classSVF_1_1AndersenWaveDiff.html#a48ff6fc4badc79ad3204ae9bd95cc540">AndersenWaveDiff::createAndersenWaveDiff</a>(getPAG());</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">// If cluster option is not set, it will give us a no-mapping points-to set.</span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!(<a class="code" href="classSVF_1_1Options.html#a9dc372635fc6f5ea2d902fc5c49fca8a">Options::ClusterFs</a> && <a class="code" href="classSVF_1_1Options.html#a75a38fff97f7f18f3945c953cabc168b">Options::PlainMappingFs</a>)</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  && <span class="stringliteral">"FS::init: plain-mapping and cluster-fs are mutually exclusive."</span>);</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9dc372635fc6f5ea2d902fc5c49fca8a">Options::ClusterFs</a>)</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  {</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  cluster();</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="comment">// Reset the points-to cache although empty so the new mapping could</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="comment">// be applied to the inserted empty set.</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  getPtCache().reset();</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  }</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a75a38fff97f7f18f3945c953cabc168b">Options::PlainMappingFs</a>)</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  {</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  plainMap();</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="comment">// As above.</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  getPtCache().reset();</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  }</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="comment">// When evaluating ctir aliases, we want the whole SVFG.</span></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>  svfg = <a class="code" href="classSVF_1_1Options.html#ad148549070b042aeddafca39ee949c77">Options::CTirAliasEval</a> ? memSSA.buildFullSVFG(ander) : memSSA.buildPTROnlySVFG(ander);</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>  setGraph(svfg);</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="comment">//AndersenWaveDiff::releaseAndersenWaveDiff();</span></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> </div><div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#a267f7198600dde3054feb40def7a6681"> 86</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a267f7198600dde3054feb40def7a6681">FlowSensitive::analyze</a>()</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> {</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keywordtype">bool</span> limitTimerSet = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a757815a2c758695176120509ceb0ce70">SVFUtil::startAnalysisLimitTimer</a>(<a class="code" href="classSVF_1_1Options.html#ad03c4697dd4da2b6adde112e3ee1884b">Options::FsTimeLimit</a>);</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  initialize();</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="keywordtype">double</span> start = stat->getClk(<span class="keyword">true</span>);</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">SVFUtil::pasMsg</a>(<span class="stringliteral">"Start Solving Constraints\n"</span>));</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keywordflow">do</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  {</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  numOfIteration++;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> </div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keywordflow">if</span>(0 == numOfIteration % OnTheFlyIterBudgetForStat)</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  dumpStat();</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>  callGraphSCC->find();</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  initWorklist();</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  solveWorklist();</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  }</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keywordflow">while</span> (updateCallGraph(getIndirectCallsites()));</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">SVFUtil::pasMsg</a>(<span class="stringliteral">"Finish Solving Constraints\n"</span>));</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="comment">// Reset the time-up alarm; analysis is done.</span></div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a168f7f7a3a8c70dbf2b5b4269cd4c7c5">SVFUtil::stopAnalysisLimitTimer</a>(limitTimerSet);</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span> </div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="keywordtype">double</span> end = stat->getClk(<span class="keyword">true</span>);</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  solveTime += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span> </div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#ad148549070b042aeddafca39ee949c77">Options::CTirAliasEval</a>)</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>  printCTirAliasStats();</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  }</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span> </div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  finalize();</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span> }</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div><div class="line"><a name="l00131"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#afed358369102f01f6fe88b1433e704c3"> 131</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1FlowSensitive.html#afed358369102f01f6fe88b1433e704c3">FlowSensitive::finalize</a>()</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span> {</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Options.html#a3061c75f7491dd737222b1b877721070">Options::DumpVFG</a>)</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  svfg->dump(<span class="stringliteral">"fs_solved"</span>, <span class="keyword">true</span>);</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <a class="code" href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">NodeStack</a>& nodeStack = <a class="code" href="classSVF_1_1WPASolver.html#aaa932894d00b69cfa741f9987a9cc6b8">WPASolver<SVFG*>::SCCDetect</a>();</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keywordflow">while</span> (nodeStack.empty() == <span class="keyword">false</span>)</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  {</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rep = nodeStack.top();</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  nodeStack.pop();</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& subNodes = getSCCDetector()->subNodes(rep);</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="keywordflow">if</span> (subNodes.count() > maxSCCSize)</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  maxSCCSize = subNodes.count();</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keywordflow">if</span> (subNodes.count() > 1)</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>  numOfNodesInSCC += subNodes.count();</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  numOfSCC++;</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="l00150"></a><span class="lineno"> 150</span> </div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="comment">// TODO: check -stat too.</span></div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9dc372635fc6f5ea2d902fc5c49fca8a">Options::ClusterFs</a>)</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  {</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<std::string, std::string></a> stats;</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PTData.html">PTDataTy</a> *ptd = getPTDataTy();</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="comment">// TODO: should we use liveOnly?</span></div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<PointsTo, unsigned></a> allPts = ptd-><a class="code" href="classSVF_1_1PTData.html#adbe2b955f119871b54dc502de84b94c4">getAllPts</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="comment">// TODO: parameterise final arg.</span></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#acbbc5c04c79846fe1cc46a3bd5a65aba">NodeIDAllocator::Clusterer::evaluate</a>(*<a class="code" href="classSVF_1_1PointsTo.html#a6c1885ddfcc72604463f7c4ea94d2f74">PointsTo::getCurrentBestNodeMapping</a>(), allPts, stats, <span class="keyword">true</span>);</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ac10cbda6a84ce890c9946a5ff35800b7">NodeIDAllocator::Clusterer::printStats</a>(<span class="stringliteral">"post-main: best"</span>, stats);</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span> </div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="comment">// Do the same for the candidates. TODO: probably temporary for eval. purposes.</span></div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <span class="keywordflow">for</span> (std::pair<<a class="code" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dd">hclust_fast_methods</a>, std::vector<NodeID>> &candidate : candidateMappings)</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  {</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="comment">// Can reuse stats, since we're always filling it with `evaluate`, it will always be overwritten.</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#acbbc5c04c79846fe1cc46a3bd5a65aba">NodeIDAllocator::Clusterer::evaluate</a>(candidate.second, allPts, stats, <span class="keyword">true</span>);</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ac10cbda6a84ce890c9946a5ff35800b7">NodeIDAllocator::Clusterer::printStats</a>(<span class="stringliteral">"post-main: candidate "</span> + <a class="code" href="namespaceSVF_1_1SVFUtil.html#a14a4c5124f2fd03ca3d898e2acd54160">SVFUtil::hclustMethodToString</a>(candidate.first), stats);</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  }</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  }</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span> </div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a57ff2bf45ede7a730a8adaba8e61179d">BVDataPTAImpl::finalize</a>();</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span> }</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span> </div><div class="line"><a name="l00177"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#a5f8a1493f7550a3f7a295e25d87bce12"> 177</a></span> <a class="code" href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">NodeStack</a>& <a class="code" href="classSVF_1_1FlowSensitive.html#a5f8a1493f7550a3f7a295e25d87bce12">FlowSensitive::SCCDetect</a>()</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span> {</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <span class="keywordtype">double</span> start = stat->getClk();</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  <a class="code" href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">NodeStack</a>& nodeStack = <a class="code" href="classSVF_1_1WPAFSSolver.html#a2d4cfae34bd4a55f1fe03881c87f8708">WPASVFGFSSolver::SCCDetect</a>();</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="keywordtype">double</span> end = stat->getClk();</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  sccTime += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="keywordflow">return</span> nodeStack;</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span> }</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span> </div><div class="line"><a name="l00189"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#a16f594356ea565eb1fed2acea516a16b"> 189</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a16f594356ea565eb1fed2acea516a16b">FlowSensitive::processNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId)</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span> {</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node = svfg->getSVFGNode(nodeId);</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="keywordflow">if</span> (processSVFGNode(node))</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  propagate(&node);</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span> </div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  clearAllDFOutVarFlag(node);</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span> }</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span> </div><div class="line"><a name="l00201"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#a979f89495966d71f9b470d832384ebd6"> 201</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a979f89495966d71f9b470d832384ebd6">FlowSensitive::processSVFGNode</a>(<a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node)</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span> {</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  <span class="keywordtype">double</span> start = stat->getClk();</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1AddrVFGNode.html">AddrSVFGNode</a>* addr = SVFUtil::dyn_cast<AddrSVFGNode>(node))</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  {</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  numOfProcessedAddr++;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <span class="keywordflow">if</span>(processAddr(addr))</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  }</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1CopyVFGNode.html">CopySVFGNode</a>* copy = SVFUtil::dyn_cast<CopySVFGNode>(node))</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  {</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  numOfProcessedCopy++;</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <span class="keywordflow">if</span>(processCopy(copy))</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  }</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1GepVFGNode.html">GepSVFGNode</a>* gep = SVFUtil::dyn_cast<GepSVFGNode>(node))</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  {</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  numOfProcessedGep++;</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  <span class="keywordflow">if</span>(processGep(gep))</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  }</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1LoadVFGNode.html">LoadSVFGNode</a>* load = SVFUtil::dyn_cast<LoadSVFGNode>(node))</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  {</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  numOfProcessedLoad++;</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="keywordflow">if</span>(processLoad(load))</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  }</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1StoreVFGNode.html">StoreSVFGNode</a>* store = SVFUtil::dyn_cast<StoreSVFGNode>(node))</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  {</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  numOfProcessedStore++;</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <span class="keywordflow">if</span>(processStore(store))</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  }</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1PHIVFGNode.html">PHISVFGNode</a>* phi = SVFUtil::dyn_cast<PHISVFGNode>(node))</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  {</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  numOfProcessedPhi++;</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="keywordflow">if</span> (processPhi(phi))</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  }</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa<MSSAPHISVFGNode>(node) || SVFUtil::isa<FormalINSVFGNode>(node)</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  || SVFUtil::isa<FormalOUTSVFGNode>(node) || SVFUtil::isa<ActualINSVFGNode>(node)</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  || SVFUtil::isa<ActualOUTSVFGNode>(node))</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  {</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  numOfProcessedMSSANode++;</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  }</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa<ActualParmSVFGNode>(node) || SVFUtil::isa<FormalParmSVFGNode>(node)</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  || SVFUtil::isa<ActualRetSVFGNode>(node) || SVFUtil::isa<FormalRetSVFGNode>(node)</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  || SVFUtil::isa<NullPtrSVFGNode>(node))</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  {</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  }</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa<CmpVFGNode>(node) || SVFUtil::isa<BinaryOPVFGNode>(node) || SVFUtil::dyn_cast<UnaryOPVFGNode>(node))</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  {</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span> </div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  }</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"unexpected kind of SVFG nodes"</span>);</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span> </div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <span class="keywordtype">double</span> end = stat->getClk();</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  processTime += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span> </div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span> }</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span> </div><div class="line"><a name="l00275"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#af849ab5a07049cb08e6b0d8023577862"> 275</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#af849ab5a07049cb08e6b0d8023577862">FlowSensitive::propFromSrcToDst</a>(<a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge)</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span> {</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  <span class="keywordtype">double</span> start = stat->getClk();</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span> </div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DirectSVFGEdge.html">DirectSVFGEdge</a>* dirEdge = SVFUtil::dyn_cast<DirectSVFGEdge>(edge))</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  changed = propAlongDirectEdge(dirEdge);</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1IndirectSVFGEdge.html">IndirectSVFGEdge</a>* indEdge = SVFUtil::dyn_cast<IndirectSVFGEdge>(edge))</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  changed = propAlongIndirectEdge(indEdge);</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"new kind of svfg edge?"</span>);</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span> </div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="keywordtype">double</span> end = stat->getClk();</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  propagationTime += (end - start) /<a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span> }</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span> </div><div class="line"><a name="l00295"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#ad3518931d3b8a0671cbeb975f853b956"> 295</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#ad3518931d3b8a0671cbeb975f853b956">FlowSensitive::propAlongDirectEdge</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1DirectSVFGEdge.html">DirectSVFGEdge</a>* edge)</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span> {</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <span class="keywordtype">double</span> start = stat->getClk();</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span> </div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* src = edge-><a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>();</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* dst = edge-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>();</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <span class="comment">// If this is an actual-param or formal-ret, top-level pointer's pts must be</span></div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="comment">// propagated from src to dst.</span></div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ActualParmVFGNode.html">ActualParmSVFGNode</a>* ap = SVFUtil::dyn_cast<ActualParmSVFGNode>(src))</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  changed = propagateFromAPToFP(ap, dst);</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1FormalRetVFGNode.html">FormalRetSVFGNode</a>* fp = SVFUtil::dyn_cast<FormalRetSVFGNode>(src))</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  changed = propagateFromFRToAR(fp, dst);</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  {</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <span class="comment">// Direct SVFG edge links between def and use of a top-level pointer.</span></div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <span class="comment">// There's no points-to information propagated along direct edge.</span></div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  <span class="comment">// Since the top-level pointer's value has been changed at src node,</span></div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  <span class="comment">// return TRUE to put dst node into the work list.</span></div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  }</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span> </div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  <span class="keywordtype">double</span> end = stat->getClk();</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  directPropaTime += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span> }</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span> </div><div class="line"><a name="l00326"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#a3574977acd161925cadcb05de6d3247d"> 326</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a3574977acd161925cadcb05de6d3247d">FlowSensitive::propagateFromAPToFP</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ActualParmVFGNode.html">ActualParmSVFGNode</a>* ap, <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* dst)</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span> {</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1FormalParmVFGNode.html">FormalParmSVFGNode</a>* fp = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="classSVF_1_1FormalParmVFGNode.html">FormalParmSVFGNode</a>>(dst);</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(fp && <span class="stringliteral">"expecting a formal param node"</span>);</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span> </div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> pagDst = fp-><a class="code" href="classSVF_1_1FormalParmVFGNode.html#ab1a9031c1fc5102e072b5035151c131c">getParam</a>()-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &srcCPts = getPts(ap-><a class="code" href="classSVF_1_1ActualParmVFGNode.html#a8932b197a076ab3069a9fe8b73e7fc32">getParam</a>()-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  <span class="keywordtype">bool</span> changed = unionPts(pagDst, srcCPts);</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span> </div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span> }</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span> </div><div class="line"><a name="l00342"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#a3abffe1434386b1ce349fbed0cfe0967"> 342</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a3abffe1434386b1ce349fbed0cfe0967">FlowSensitive::propagateFromFRToAR</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1FormalRetVFGNode.html">FormalRetSVFGNode</a>* fr, <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* dst)</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span> {</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1ActualRetVFGNode.html">ActualRetSVFGNode</a>* ar = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="classSVF_1_1ActualRetVFGNode.html">ActualRetSVFGNode</a>>(dst);</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(ar && <span class="stringliteral">"expecting an actual return node"</span>);</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span> </div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> pagDst = ar-><a class="code" href="classSVF_1_1ActualRetVFGNode.html#a4bcfddf05da46729c670b4f450f9d606">getRev</a>()-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> & srcCPts = getPts(fr-><a class="code" href="classSVF_1_1FormalRetVFGNode.html#a62a894e71fcf7a3db19c0488d96a7262">getRet</a>()-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  <span class="keywordtype">bool</span> changed = unionPts(pagDst, srcCPts);</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span> </div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span> }</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span> </div><div class="line"><a name="l00357"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#aeb1e002519123a67f8d18f78cda04bac"> 357</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#aeb1e002519123a67f8d18f78cda04bac">FlowSensitive::propAlongIndirectEdge</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1IndirectSVFGEdge.html">IndirectSVFGEdge</a>* edge)</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span> {</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <span class="keywordtype">double</span> start = stat->getClk();</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span> </div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* src = edge-><a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>();</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* dst = edge-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>();</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span> </div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span> </div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  <span class="comment">// Get points-to targets may be used by next SVFG node.</span></div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  <span class="comment">// Propagate points-to set for node used in dst.</span></div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& pts = edge-><a class="code" href="classSVF_1_1IndirectSVFGEdge.html#a30aca718d25924f1babdf348bb0ace71">getPointsTo</a>();</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  <span class="keywordflow">for</span> (NodeBS::iterator ptdIt = pts.begin(), ptdEit = pts.end(); ptdIt != ptdEit; ++ptdIt)</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  {</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptd = *ptdIt;</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span> </div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  <span class="keywordflow">if</span> (propVarPtsFromSrcToDst(ptd, src, dst))</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span> </div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  <span class="keywordflow">if</span> (isFieldInsensitive(ptd))</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  {</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& allFields = getAllFieldsObjVars(ptd);</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  <span class="keywordflow">for</span> (NodeBS::iterator fieldIt = allFields.begin(), fieldEit = allFields.end();</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  fieldIt != fieldEit; ++fieldIt)</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  {</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  <span class="keywordflow">if</span> (propVarPtsFromSrcToDst(*fieldIt, src, dst))</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  }</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  }</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  }</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span> </div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  <span class="keywordtype">double</span> end = stat->getClk();</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  indirectPropaTime += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span> }</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span> </div><div class="line"><a name="l00397"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#ae571767cc5936cf631a44976d8277e91"> 397</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#ae571767cc5936cf631a44976d8277e91">FlowSensitive::propVarPtsFromSrcToDst</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> var, <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* src, <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* dst)</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span> {</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  <span class="keywordflow">if</span> (SVFUtil::isa<StoreSVFGNode>(src))</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  {</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  <span class="keywordflow">if</span> (updateInFromOut(src, var, dst, var))</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  }</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  {</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  <span class="keywordflow">if</span> (updateInFromIn(src, var, dst, var))</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>  }</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span> }</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span> </div><div class="line"><a name="l00416"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#abb37c5e4e6fa4742e8dbcf397aea086e"> 416</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#abb37c5e4e6fa4742e8dbcf397aea086e">FlowSensitive::processAddr</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1AddrVFGNode.html">AddrSVFGNode</a>* addr)</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span> {</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  <span class="keywordtype">double</span> start = stat->getClk();</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcID = addr-><a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>();</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  <span class="keywordflow">if</span> (isFieldInsensitive(srcID))</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  srcID = getFIObjVar(srcID);</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  <span class="keywordtype">bool</span> changed = addPts(addr-><a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>(), srcID);</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  <span class="keywordtype">double</span> end = stat->getClk();</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  addrTime += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span> }</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span> </div><div class="line"><a name="l00433"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#aa401cc90de4e1c6842f08a43a28c5aa1"> 433</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#aa401cc90de4e1c6842f08a43a28c5aa1">FlowSensitive::processCopy</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CopyVFGNode.html">CopySVFGNode</a>* copy)</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span> {</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  <span class="keywordtype">double</span> start = stat->getClk();</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  <span class="keywordtype">bool</span> changed = unionPts(copy-><a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>(), copy-><a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>());</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  <span class="keywordtype">double</span> end = stat->getClk();</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  copyTime += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span> }</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span> </div><div class="line"><a name="l00445"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#aa36fd1387e948e83107431179d819067"> 445</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#aa36fd1387e948e83107431179d819067">FlowSensitive::processPhi</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PHIVFGNode.html">PHISVFGNode</a>* phi)</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span> {</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  <span class="keywordtype">double</span> start = stat->getClk();</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> pagDst = phi-><a class="code" href="classSVF_1_1PHIVFGNode.html#abd54e567a0826bbec277302e0c4f78a2">getRes</a>()-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericNode.html#ab6dc1ae41ae23b383f8add474caa7429">PHISVFGNode::OPVers::const_iterator</a> it = phi-><a class="code" href="classSVF_1_1PHIVFGNode.html#a2e00f6d582aa4ac9aa116cc6d5c79369">opVerBegin</a>(), eit = phi-><a class="code" href="classSVF_1_1PHIVFGNode.html#add18c60773871744123d12a037e78e20">opVerEnd</a>(); it != eit; ++it)</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  {</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = it->second->getId();</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>& srcPts = getPts(src);</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  <span class="keywordflow">if</span> (unionPts(pagDst, srcPts))</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  }</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span> </div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  <span class="keywordtype">double</span> end = stat->getClk();</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  phiTime += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span> }</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span> </div><div class="line"><a name="l00466"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#ae017c39ac471727d06868e0eacafd791"> 466</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#ae017c39ac471727d06868e0eacafd791">FlowSensitive::processGep</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1GepVFGNode.html">GepSVFGNode</a>* edge)</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span> {</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  <span class="keywordtype">double</span> start = stat->getClk();</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>& srcPts = getPts(edge-><a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>());</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span> </div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> tmpDstPts;</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1GepStmt.html">GepStmt</a>* gepStmt = SVFUtil::cast<GepStmt>(edge-><a class="code" href="classSVF_1_1StmtVFGNode.html#a4dd7615f42971da9b6ec1dc04f0ec4e6">getPAGEdge</a>());</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  <span class="keywordflow">if</span> (gepStmt-><a class="code" href="classSVF_1_1GepStmt.html#a0ddf180a0f7ba64fc8655687910e3788">isVariantFieldGep</a>())</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  {</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : srcPts)</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  {</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>  <span class="keywordflow">if</span> (isBlkObjOrConstantObj(o))</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  {</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  tmpDstPts.set(o);</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  }</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span> </div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  setObjFieldInsensitive(o);</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  tmpDstPts.set(getFIObjVar(o));</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  }</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  }</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  <span class="keywordflow">else</span> </div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  {</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : srcPts)</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  {</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  <span class="keywordflow">if</span> (isBlkObjOrConstantObj(o))</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  {</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>  tmpDstPts.set(o);</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  }</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span> </div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> fieldSrcPtdNode = getGepObjVar(o, gepStmt-><a class="code" href="classSVF_1_1GepStmt.html#abec33091e0dac0cdd5b95b6d7b0db3d8">getLocationSet</a>());</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  tmpDstPts.set(fieldSrcPtdNode);</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  }</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  }</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span> </div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  <span class="keywordflow">if</span> (unionPts(edge-><a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>(), tmpDstPts))</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span> </div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  <span class="keywordtype">double</span> end = stat->getClk();</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  gepTime += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span> }</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span> </div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span> </div><div class="line"><a name="l00518"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#a9968530b3dee876f55e6659530decf27"> 518</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a9968530b3dee876f55e6659530decf27">FlowSensitive::processLoad</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1LoadVFGNode.html">LoadSVFGNode</a>* load)</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span> {</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  <span class="keywordtype">double</span> start = stat->getClk();</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span> </div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstVar = load-><a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>();</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span> </div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>& srcPts = getPts(load-><a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>());</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> ptdIt = srcPts.<a class="code" href="classSVF_1_1PointsTo.html#aa53962e561399bf493d1f2b9137356f6">begin</a>(); ptdIt != srcPts.<a class="code" href="classSVF_1_1PointsTo.html#a8f741cdffbf3c5fe0f602cdca677dee6">end</a>(); ++ptdIt)</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  {</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptd = *ptdIt;</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span> </div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  <span class="keywordflow">if</span> (pag->isConstantObj(ptd) || pag->isNonPointerObj(ptd))</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span> </div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  <span class="keywordflow">if</span> (unionPtsFromIn(load, ptd, dstVar))</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span> </div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  <span class="keywordflow">if</span> (isFieldInsensitive(ptd))</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>  {</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& allFields = getAllFieldsObjVars(ptd);</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  <span class="keywordflow">for</span> (NodeBS::iterator fieldIt = allFields.begin(), fieldEit = allFields.end();</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>  fieldIt != fieldEit; ++fieldIt)</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  {</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  <span class="keywordflow">if</span> (unionPtsFromIn(load, *fieldIt, dstVar))</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  }</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  }</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  }</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span> </div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  <span class="keywordtype">double</span> end = stat->getClk();</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  loadTime += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span> }</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span> </div><div class="line"><a name="l00561"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#aa37d591d2d4f65957e840bef4d142a6a"> 561</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#aa37d591d2d4f65957e840bef4d142a6a">FlowSensitive::processStore</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreVFGNode.html">StoreSVFGNode</a>* store)</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span> {</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span> </div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> & dstPts = getPts(store-><a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>());</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span> </div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  <span class="keywordflow">if</span> (dstPts.<a class="code" href="classSVF_1_1PointsTo.html#ac4688413177b49b37dbbfd3ed188d59b">empty</a>())</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span> </div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  <span class="keywordtype">double</span> start = stat->getClk();</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span> </div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  <span class="keywordflow">if</span>(getPts(store-><a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>()).<a class="code" href="cuddInt_8c.html#a5beb39637a978181c7c17714ac96672e">empty</a>() == <span class="keyword">false</span>)</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  {</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> it = dstPts.<a class="code" href="classSVF_1_1PointsTo.html#aa53962e561399bf493d1f2b9137356f6">begin</a>(), eit = dstPts.<a class="code" href="classSVF_1_1PointsTo.html#a8f741cdffbf3c5fe0f602cdca677dee6">end</a>(); it != eit; ++it)</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  {</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptd = *it;</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span> </div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  <span class="keywordflow">if</span> (pag->isConstantObj(ptd) || pag->isNonPointerObj(ptd))</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span> </div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  <span class="keywordflow">if</span> (unionPtsFromTop(store, store-><a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>(), ptd))</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  }</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  }</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span> </div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  <span class="keywordtype">double</span> end = stat->getClk();</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  storeTime += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span> </div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  <span class="keywordtype">double</span> updateStart = stat->getClk();</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  <span class="comment">// also merge the DFInSet to DFOutSet.</span></div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span> <span class="comment"></span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> singleton;</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  <span class="keywordtype">bool</span> isSU = isStrongUpdate(store, singleton);</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  <span class="keywordflow">if</span> (isSU)</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  {</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  svfgHasSU.set(store-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  <span class="keywordflow">if</span> (strongUpdateOutFromIn(store, singleton))</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  }</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  {</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  svfgHasSU.reset(store-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  <span class="keywordflow">if</span> (weakUpdateOutFromIn(store))</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>  }</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>  <span class="keywordtype">double</span> updateEnd = stat->getClk();</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  updateTime += (updateEnd - updateStart) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span> </div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span> }</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span> </div><div class="line"><a name="l00621"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#a42a7e39e0e15576742f8ba7c32579ea2"> 621</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a42a7e39e0e15576742f8ba7c32579ea2">FlowSensitive::isStrongUpdate</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>& singleton)</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span> {</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  <span class="keywordtype">bool</span> isSU = <span class="keyword">false</span>;</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreVFGNode.html">StoreSVFGNode</a>* store = SVFUtil::dyn_cast<StoreSVFGNode>(node))</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  {</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>& dstCPSet = getPts(store->getPAGDstNodeID());</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  <span class="keywordflow">if</span> (dstCPSet.<a class="code" href="classSVF_1_1PointsTo.html#a879783ba6629e500af9aa7dfcda2563d">count</a>() == 1)</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  {</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  <a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> it = dstCPSet.<a class="code" href="classSVF_1_1PointsTo.html#aa53962e561399bf493d1f2b9137356f6">begin</a>();</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  singleton = *it;</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span> </div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  <span class="comment">// Strong update can be made if this points-to target is not heap, array or field-insensitive.</span></div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  <span class="keywordflow">if</span> (!isHeapMemObj(singleton) && !isArrayMemObj(singleton)</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  && pag->getBaseObj(singleton)->isFieldInsensitive() == <span class="keyword">false</span></div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  && !isLocalVarInRecursiveFun(singleton))</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>  {</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  isSU = <span class="keyword">true</span>;</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>  }</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  }</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>  }</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>  <span class="keywordflow">return</span> isSU;</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span> }</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span> </div><div class="line"><a name="l00648"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#a9d81537ec20196315a9a2541477ec5bf"> 648</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a9d81537ec20196315a9a2541477ec5bf">FlowSensitive::updateCallGraph</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ad95c842964e6ca46e51fb763fefec585">CallSiteToFunPtrMap</a>& callsites)</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span> {</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  <span class="keywordtype">double</span> start = stat->getClk();</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a35bd5f0fb2c146199e9f1aa6a19b4062">CallEdgeMap</a> newEdges;</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  onTheFlyCallGraphSolve(callsites, newEdges);</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span> </div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  <span class="comment">// Bound the new edges by the Andersen's call graph.</span></div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  <span class="comment">// TODO: we want this to be an assertion eventually.</span></div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a35bd5f0fb2c146199e9f1aa6a19b4062">CallEdgeMap</a> &andersCallEdgeMap = ander->getIndCallMap();</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>  <span class="keywordflow">for</span> (<span class="keyword">typename</span> CallEdgeMap::value_type &csfs : newEdges)</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  {</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *potentialCallSite = csfs.first;</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#ac1422cd8b449fdb4a1f7c539364e4c41">FunctionSet</a> &potentialFunctionSet = csfs.second;</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span> </div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  <span class="comment">// Check this callsite even calls anything per Andersen's.</span></div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  <span class="keyword">typename</span> CallEdgeMap::const_iterator andersFunctionSetIt</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  = andersCallEdgeMap.find(potentialCallSite);</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>  <span class="keywordflow">if</span> (andersFunctionSetIt == andersCallEdgeMap.end())</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>  {</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  potentialFunctionSet.clear();</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>  }</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span> </div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ac1422cd8b449fdb4a1f7c539364e4c41">FunctionSet</a> &andersFunctionSet = andersFunctionSetIt->second;</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  <span class="keywordflow">for</span> (FunctionSet::iterator potentialFunctionIt = potentialFunctionSet.begin();</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  potentialFunctionIt != potentialFunctionSet.end(); )</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  {</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *potentialFunction = *potentialFunctionIt;</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  <span class="keywordflow">if</span> (andersFunctionSet.find(potentialFunction) == andersFunctionSet.end())</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  {</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  <span class="comment">// potentialFunction is not in the Andersen's call graph -- remove it.</span></div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>  potentialFunctionIt = potentialFunctionSet.erase(potentialFunctionIt);</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  }</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  {</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  <span class="comment">// potentialFunction is in the Andersen's call graph -- keep it..</span></div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  ++potentialFunctionIt;</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  }</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  }</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  }</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span> </div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  <a class="code" href="classSVF_1_1FlowSensitive.html#a69289c48fa91f850da90de080b9d26e5">SVFGEdgeSetTy</a> svfgEdges;</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  connectCallerAndCallee(newEdges, svfgEdges);</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span> </div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  updateConnectedNodes(svfgEdges);</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span> </div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>  <span class="keywordtype">double</span> end = stat->getClk();</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>  updateCallGraphTime += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>  <span class="keywordflow">return</span> (!newEdges.empty());</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span> }</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span> </div><div class="line"><a name="l00701"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#ad7640ada31b5cb542e492e27ab4fe1af"> 701</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1FlowSensitive.html#ad7640ada31b5cb542e492e27ab4fe1af">FlowSensitive::connectCallerAndCallee</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a35bd5f0fb2c146199e9f1aa6a19b4062">CallEdgeMap</a>& newEdges, <a class="code" href="classSVF_1_1FlowSensitive.html#a69289c48fa91f850da90de080b9d26e5">SVFGEdgeSetTy</a>& edges)</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span> {</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  CallEdgeMap::const_iterator iter = newEdges.begin();</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  CallEdgeMap::const_iterator eiter = newEdges.end();</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  <span class="keywordflow">for</span> (; iter != eiter; iter++)</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>  {</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs = iter->first;</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ac1422cd8b449fdb4a1f7c539364e4c41">FunctionSet</a> & functions = iter->second;</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>  <span class="keywordflow">for</span> (FunctionSet::const_iterator func_iter = functions.begin(); func_iter != functions.end(); func_iter++)</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>  {</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* func = *func_iter;</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>  svfg->connectCallerAndCallee(cs, func, edges);</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>  }</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>  }</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span> }</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span> </div><div class="line"><a name="l00721"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#a1886b4964efa92cfff761493d12768b8"> 721</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a1886b4964efa92cfff761493d12768b8">FlowSensitive::updateConnectedNodes</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a69289c48fa91f850da90de080b9d26e5">SVFGEdgeSetTy</a>& edges)</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span> {</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>  <span class="keywordflow">for</span> (SVFGEdgeSetTy::const_iterator it = edges.begin(), eit = edges.end();</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>  it != eit; ++it)</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>  {</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = *it;</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>  <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* dstNode = edge-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>();</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>  <span class="keywordflow">if</span> (SVFUtil::isa<PHISVFGNode>(dstNode))</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>  {</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>  pushIntoWorklist(dstNode-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>  }</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<FormalINSVFGNode>(dstNode) || SVFUtil::isa<ActualOUTSVFGNode>(dstNode))</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>  {</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span> </div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>  <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* srcNode = edge-><a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>();</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span> </div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& pts = SVFUtil::cast<IndirectSVFGEdge>(edge)->getPointsTo();</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>  <span class="keywordflow">for</span> (NodeBS::iterator ptdIt = pts.begin(), ptdEit = pts.end(); ptdIt != ptdEit; ++ptdIt)</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>  {</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptd = *ptdIt;</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span> </div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>  <span class="keywordflow">if</span> (propVarPtsAfterCGUpdated(ptd, srcNode, dstNode))</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span> </div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>  <span class="keywordflow">if</span> (isFieldInsensitive(ptd))</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  {</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& allFields = getAllFieldsObjVars(ptd);</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>  <span class="keywordflow">for</span> (NodeBS::iterator fieldIt = allFields.begin(), fieldEit = allFields.end();</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>  fieldIt != fieldEit; ++fieldIt)</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>  {</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>  <span class="keywordflow">if</span> (propVarPtsAfterCGUpdated(*fieldIt, srcNode, dstNode))</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>  }</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>  }</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  }</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span> </div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>  <span class="keywordflow">if</span> (changed)</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>  pushIntoWorklist(dstNode-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>  }</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>  }</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span> }</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span> </div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span> </div><div class="line"><a name="l00773"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#a9e7fbc4c1d056fbef07498de8cbb1cd9"> 773</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a9e7fbc4c1d056fbef07498de8cbb1cd9">FlowSensitive::propVarPtsAfterCGUpdated</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> var, <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* src, <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* dst)</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span> {</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>  <span class="keywordflow">if</span> (SVFUtil::isa<StoreSVFGNode>(src))</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>  {</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>  <span class="keywordflow">if</span> (propDFOutToIn(src, var, dst, var))</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>  }</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  {</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>  <span class="keywordflow">if</span> (propDFInToIn(src, var, dst, var))</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>  }</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span> }</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span> </div><div class="line"><a name="l00788"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#a89d3b97b8077027514135c9201c4d02c"> 788</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a89d3b97b8077027514135c9201c4d02c">FlowSensitive::cluster</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span> {</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>  std::vector<std::pair<unsigned, unsigned>> keys;</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFIR::iterator</a> pit = pag->begin(); pit != pag->end(); ++pit) keys.push_back(std::make_pair(pit->first, 1));</div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span> </div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>  <a class="code" href="classSVF_1_1PointsTo.html#a849f670b38cb6f65fc23707a212591c7">PointsTo::MappingPtr</a> nodeMapping =</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>  std::make_shared<std::vector<NodeID>>(<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a33d502a0bd49307cd824e34b73157b9b">NodeIDAllocator::Clusterer::cluster</a>(ander, keys, candidateMappings, <span class="stringliteral">"aux-ander"</span>));</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>  <a class="code" href="classSVF_1_1PointsTo.html#a849f670b38cb6f65fc23707a212591c7">PointsTo::MappingPtr</a> reverseNodeMapping =</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>  std::make_shared<std::vector<NodeID>>(<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a36b25188130f4c21d145c950a70d616f">NodeIDAllocator::Clusterer::getReverseNodeMapping</a>(*nodeMapping));</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span> </div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>  <a class="code" href="classSVF_1_1PointsTo.html#a84eca4c7fc833f8ca4d119cd4da08ca8">PointsTo::setCurrentBestNodeMapping</a>(nodeMapping, reverseNodeMapping);</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span> }</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span> </div><div class="line"><a name="l00801"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#a5a8688102f3675cf414b01dc2ae51c6b"> 801</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a5a8688102f3675cf414b01dc2ae51c6b">FlowSensitive::plainMap</a>(<span class="keywordtype">void</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span> <span class="keyword"></span>{</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1Options.html#a2537be131132830c63d408133619a065">Options::NodeAllocStrat</a> == NodeIDAllocator::Strategy::DENSE</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>  && <span class="stringliteral">"FS::cluster: plain mapping requires dense allocation strategy."</span>);</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span> </div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>  <span class="keyword">const</span> <span class="keywordtype">size_t</span> numObjects = <a class="code" href="classSVF_1_1NodeIDAllocator.html#a2bd3ca30fc9669d9a0327544bdb4557b">NodeIDAllocator::get</a>()-><a class="code" href="classSVF_1_1NodeIDAllocator.html#ad63e43c65cb7d7cac7824f5cede5ec89">getNumObjects</a>();</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>  <a class="code" href="classSVF_1_1PointsTo.html#a849f670b38cb6f65fc23707a212591c7">PointsTo::MappingPtr</a> plainMapping = std::make_shared<std::vector<NodeID>>(numObjects);</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>  <a class="code" href="classSVF_1_1PointsTo.html#a849f670b38cb6f65fc23707a212591c7">PointsTo::MappingPtr</a> reversePlainMapping = std::make_shared<std::vector<NodeID>>(numObjects);</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> i = 0; i < plainMapping->size(); ++i)</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>  {</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>  plainMapping->at(i) = i;</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>  reversePlainMapping->at(i) = i;</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>  }</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span> </div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>  <a class="code" href="classSVF_1_1PointsTo.html#a84eca4c7fc833f8ca4d119cd4da08ca8">PointsTo::setCurrentBestNodeMapping</a>(plainMapping, reversePlainMapping);</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span> }</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span> </div><div class="line"><a name="l00818"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#a023d0b492deaba40c593332cf1b2e3f6"> 818</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a023d0b492deaba40c593332cf1b2e3f6">FlowSensitive::printCTirAliasStats</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span> {</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>  <a class="code" href="classSVF_1_1DCHGraph.html">DCHGraph</a> *dchg = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="classSVF_1_1DCHGraph.html">DCHGraph</a>>(chgraph);</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(dchg && <span class="stringliteral">"eval-ctir-aliases needs DCHG."</span>);</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span> </div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>  <span class="comment">// < SVFG node ID (loc), SVFIR node of interest (top-level pointer) >.</span></div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>  <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<std::pair<NodeID, NodeID></a>> cmpLocs;</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFG::iterator</a> npair = svfg->begin(); npair != svfg->end(); ++npair)</div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>  {</div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> loc = npair->first;</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a> *node = npair->second;</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span> </div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>  <span class="comment">// Only care about loads, stores, and GEPs.</span></div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a> *stmt = SVFUtil::dyn_cast<StmtSVFGNode>(node))</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  {</div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>  <span class="keywordflow">if</span> (!SVFUtil::isa<LoadSVFGNode>(stmt) && !SVFUtil::isa<StoreSVFGNode>(stmt)</div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>  && !SVFUtil::isa<GepSVFGNode>(stmt))</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  {</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>  }</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span> </div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a21d2fd8bbef0c6f6ddddb5387569a7fa">TypeBasedHeapCloning::getRawCTirMetadata</a>(stmt->getInst() ? stmt->getInst() : stmt->getPAGEdge()->getValue()))</div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>  {</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  }</div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span> </div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> p = 0;</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>  <span class="keywordflow">if</span> (SVFUtil::isa<LoadSVFGNode>(stmt))</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>  {</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  p = stmt->getPAGSrcNodeID();</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  }</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<StoreSVFGNode>(stmt))</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>  {</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  p = stmt->getPAGDstNodeID();</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  }</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<GepSVFGNode>(stmt))</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>  {</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>  p = stmt->getPAGSrcNodeID();</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  }</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  {</div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  <span class="comment">// Not interested.</span></div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>  }</div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span> </div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>  cmpLocs.insert(std::make_pair(loc, p));</div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>  }</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>  }</div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span> </div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span>  <span class="keywordtype">unsigned</span> mayAliases = 0, noAliases = 0;</div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>  countAliases(cmpLocs, &mayAliases, &noAliases);</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span> </div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>  <span class="keywordtype">unsigned</span> total = mayAliases + noAliases;</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <span class="stringliteral">"eval-ctir-aliases "</span></div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>  << total << <span class="stringliteral">" "</span></div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>  << mayAliases << <span class="stringliteral">" "</span></div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>  << noAliases << <span class="stringliteral">" "</span></div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span>  << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <span class="stringliteral">" "</span> << <span class="stringliteral">"TOTAL : "</span> << total << <span class="stringliteral">"\n"</span></div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>  << <span class="stringliteral">" "</span> << <span class="stringliteral">"MAY : "</span> << mayAliases << <span class="stringliteral">"\n"</span></div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span>  << <span class="stringliteral">" "</span> << <span class="stringliteral">"MAY % : "</span> << 100 * ((double)mayAliases/(<span class="keywordtype">double</span>)(total)) << <span class="stringliteral">"\n"</span></div><div class="line"><a name="l00879"></a><span class="lineno"> 879</span>  << <span class="stringliteral">" "</span> << <span class="stringliteral">"NO : "</span> << noAliases << <span class="stringliteral">"\n"</span></div><div class="line"><a name="l00880"></a><span class="lineno"> 880</span>  << <span class="stringliteral">" "</span> << <span class="stringliteral">"NO % : "</span> << 100 * ((double)noAliases/(<span class="keywordtype">double</span>)(total)) << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00881"></a><span class="lineno"> 881</span> }</div><div class="line"><a name="l00882"></a><span class="lineno"> 882</span> </div><div class="line"><a name="l00883"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#a94dc671f524ed3ed00f5a54b13f18e18"> 883</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a94dc671f524ed3ed00f5a54b13f18e18">FlowSensitive::countAliases</a>(<a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a><std::pair<NodeID, NodeID>> cmp, <span class="keywordtype">unsigned</span> *mayAliases, <span class="keywordtype">unsigned</span> *noAliases)</div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span> {</div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span>  <span class="keywordflow">for</span> (std::pair<NodeID, NodeID> locPA : cmp)</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span>  {</div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span>  <span class="comment">// loc doesn't make a difference for FSPTA.</span></div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> p = locPA.second;</div><div class="line"><a name="l00889"></a><span class="lineno"> 889</span>  <span class="keywordflow">for</span> (std::pair<NodeID, NodeID> locPB : cmp)</div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span>  {</div><div class="line"><a name="l00891"></a><span class="lineno"> 891</span>  <span class="keywordflow">if</span> (locPB == locPA) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span> </div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> q = locPB.second;</div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span> </div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span>  <span class="keywordflow">switch</span> (alias(p, q))</div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span>  {</div><div class="line"><a name="l00897"></a><span class="lineno"> 897</span>  <span class="keywordflow">case</span> <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943afdd83ddff93d38902f07775cd36df239">AliasResult::NoAlias</a>:</div><div class="line"><a name="l00898"></a><span class="lineno"> 898</span>  ++(*noAliases);</div><div class="line"><a name="l00899"></a><span class="lineno"> 899</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00900"></a><span class="lineno"> 900</span>  <span class="keywordflow">case</span> <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943aef15fd8989d8dd9576b3fbb2aabc118f">AliasResult::MayAlias</a>:</div><div class="line"><a name="l00901"></a><span class="lineno"> 901</span>  ++(*mayAliases);</div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="stringliteral">"Not May/NoAlias?"</span>);</div><div class="line"><a name="l00905"></a><span class="lineno"> 905</span>  }</div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span>  }</div><div class="line"><a name="l00907"></a><span class="lineno"> 907</span>  }</div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span> </div><div class="line"><a name="l00909"></a><span class="lineno"> 909</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_1Options_html_ad03c4697dd4da2b6adde112e3ee1884b"><div class="ttname"><a href="classSVF_1_1Options.html#ad03c4697dd4da2b6adde112e3ee1884b">SVF::Options::FsTimeLimit</a></div><div class="ttdeci">static const llvm::cl::opt< unsigned > FsTimeLimit</div><div class="ttdoc">Time limit for the main phase (i.e., the actual solving) of FS analyses. </div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00071">Options.h:71</a></div></div>
|
|
71
|
-
<div class="ttc" id="classSVF_1_1StoreVFGNode_html"><div class="ttname"><a href="classSVF_1_1StoreVFGNode.html">SVF::StoreVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#
|
|
71
|
+
<div class="ttc" id="classSVF_1_1StoreVFGNode_html"><div class="ttname"><a href="classSVF_1_1StoreVFGNode.html">SVF::StoreVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00240">VFGNode.h:240</a></div></div>
|
|
72
72
|
<div class="ttc" id="classSVF_1_1FlowSensitive_html_a3574977acd161925cadcb05de6d3247d"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a3574977acd161925cadcb05de6d3247d">SVF::FlowSensitive::propagateFromAPToFP</a></div><div class="ttdeci">virtual bool propagateFromAPToFP(const ActualParmSVFGNode *ap, const SVFGNode *dst)</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00326">FlowSensitive.cpp:326</a></div></div>
|
|
73
|
-
<div class="ttc" id="classSVF_1_1ActualParmVFGNode_html"><div class="ttname"><a href="classSVF_1_1ActualParmVFGNode.html">SVF::ActualParmVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#
|
|
73
|
+
<div class="ttc" id="classSVF_1_1ActualParmVFGNode_html"><div class="ttname"><a href="classSVF_1_1ActualParmVFGNode.html">SVF::ActualParmVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00856">VFGNode.h:856</a></div></div>
|
|
74
74
|
<div class="ttc" id="WPAStat_8h_html"><div class="ttname"><a href="WPAStat_8h.html">WPAStat.h</a></div></div>
|
|
75
|
-
<div class="ttc" id="classSVF_1_1AddrVFGNode_html"><div class="ttname"><a href="classSVF_1_1AddrVFGNode.html">SVF::AddrVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#
|
|
75
|
+
<div class="ttc" id="classSVF_1_1AddrVFGNode_html"><div class="ttname"><a href="classSVF_1_1AddrVFGNode.html">SVF::AddrVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00770">VFGNode.h:770</a></div></div>
|
|
76
76
|
<div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_a57ff2bf45ede7a730a8adaba8e61179d"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a57ff2bf45ede7a730a8adaba8e61179d">SVF::BVDataPTAImpl::finalize</a></div><div class="ttdeci">virtual void finalize()</div><div class="ttdoc">Finalization of pointer analysis, and normalize points-to information to Bit Vector representation...</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8cpp_source.html#l00072">PointerAnalysisImpl.cpp:72</a></div></div>
|
|
77
77
|
<div class="ttc" id="classSVF_1_1FlowSensitive_html_a89d3b97b8077027514135c9201c4d02c"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a89d3b97b8077027514135c9201c4d02c">SVF::FlowSensitive::cluster</a></div><div class="ttdeci">virtual void cluster(void)</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00788">FlowSensitive.cpp:788</a></div></div>
|
|
78
|
-
<div class="ttc" id="classSVF_1_1StmtVFGNode_html_a04986961ad507be9fcf141ab51787da8"><div class="ttname"><a href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">SVF::StmtVFGNode::getPAGDstNodeID</a></div><div class="ttdeci">NodeID getPAGDstNodeID() const</div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#
|
|
78
|
+
<div class="ttc" id="classSVF_1_1StmtVFGNode_html_a04986961ad507be9fcf141ab51787da8"><div class="ttname"><a href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">SVF::StmtVFGNode::getPAGDstNodeID</a></div><div class="ttdeci">NodeID getPAGDstNodeID() const</div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00146">VFGNode.h:146</a></div></div>
|
|
79
79
|
<div class="ttc" id="classSVF_1_1FlowSensitive_html"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html">SVF::FlowSensitive</a></div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8h_source.html#l00049">FlowSensitive.h:49</a></div></div>
|
|
80
80
|
<div class="ttc" id="classSVF_1_1Options_html_a9dc372635fc6f5ea2d902fc5c49fca8a"><div class="ttname"><a href="classSVF_1_1Options.html#a9dc372635fc6f5ea2d902fc5c49fca8a">SVF::Options::ClusterFs</a></div><div class="ttdeci">static const llvm::cl::opt< bool > ClusterFs</div><div class="ttdoc">Whether to cluster FS or VFS with the auxiliary Andersen&#39;s. </div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00043">Options.h:43</a></div></div>
|
|
81
|
-
<div class="ttc" id="classSVF_1_1FormalParmVFGNode_html_ab1a9031c1fc5102e072b5035151c131c"><div class="ttname"><a href="classSVF_1_1FormalParmVFGNode.html#ab1a9031c1fc5102e072b5035151c131c">SVF::FormalParmVFGNode::getParam</a></div><div class="ttdeci">const PAGNode * getParam() const</div><div class="ttdoc">Return parameter. </div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#
|
|
81
|
+
<div class="ttc" id="classSVF_1_1FormalParmVFGNode_html_ab1a9031c1fc5102e072b5035151c131c"><div class="ttname"><a href="classSVF_1_1FormalParmVFGNode.html#ab1a9031c1fc5102e072b5035151c131c">SVF::FormalParmVFGNode::getParam</a></div><div class="ttdeci">const PAGNode * getParam() const</div><div class="ttdoc">Return parameter. </div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00922">VFGNode.h:922</a></div></div>
|
|
82
82
|
<div class="ttc" id="classSVF_1_1FlowSensitive_html_aeb1e002519123a67f8d18f78cda04bac"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#aeb1e002519123a67f8d18f78cda04bac">SVF::FlowSensitive::propAlongIndirectEdge</a></div><div class="ttdeci">virtual bool propAlongIndirectEdge(const IndirectSVFGEdge *edge)</div><div class="ttdoc">Propagate points-to information along an INDIRECT SVFG edge. </div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00357">FlowSensitive.cpp:357</a></div></div>
|
|
83
83
|
<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#l00018">MTAResultValidator.h:18</a></div></div>
|
|
84
84
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a609eea630a8f88fe9eaba15ce7e48738"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">SVF::SVFUtil::pasMsg</a></div><div class="ttdeci">std::string pasMsg(std::string msg)</div><div class="ttdoc">Print each pass/phase message by converting a string into blue string output. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00101">SVFUtil.cpp:101</a></div></div>
|
|
@@ -95,17 +95,17 @@ $(function() {
|
|
|
95
95
|
<div class="ttc" id="classSVF_1_1SVFFunction_html"><div class="ttname"><a href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a></div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00219">BasicTypes.h:219</a></div></div>
|
|
96
96
|
<div class="ttc" id="classSVF_1_1FlowSensitive_html_aa37d591d2d4f65957e840bef4d142a6a"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#aa37d591d2d4f65957e840bef4d142a6a">SVF::FlowSensitive::processStore</a></div><div class="ttdeci">virtual bool processStore(const StoreSVFGNode *store)</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00561">FlowSensitive.cpp:561</a></div></div>
|
|
97
97
|
<div class="ttc" id="classSVF_1_1Options_html_a2537be131132830c63d408133619a065"><div class="ttname"><a href="classSVF_1_1Options.html#a2537be131132830c63d408133619a065">SVF::Options::NodeAllocStrat</a></div><div class="ttdeci">static const llvm::cl::opt< SVF::NodeIDAllocator::Strategy > NodeAllocStrat</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00034">Options.h:34</a></div></div>
|
|
98
|
-
<div class="ttc" id="classSVF_1_1CopyVFGNode_html"><div class="ttname"><a href="classSVF_1_1CopyVFGNode.html">SVF::CopyVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#
|
|
99
|
-
<div class="ttc" id="classSVF_1_1PHIVFGNode_html"><div class="ttname"><a href="classSVF_1_1PHIVFGNode.html">SVF::PHIVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#
|
|
98
|
+
<div class="ttc" id="classSVF_1_1CopyVFGNode_html"><div class="ttname"><a href="classSVF_1_1CopyVFGNode.html">SVF::CopyVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00281">VFGNode.h:281</a></div></div>
|
|
99
|
+
<div class="ttc" id="classSVF_1_1PHIVFGNode_html"><div class="ttname"><a href="classSVF_1_1PHIVFGNode.html">SVF::PHIVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00645">VFGNode.h:645</a></div></div>
|
|
100
100
|
<div class="ttc" id="classSVF_1_1FlowSensitive_html_a267f7198600dde3054feb40def7a6681"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a267f7198600dde3054feb40def7a6681">SVF::FlowSensitive::analyze</a></div><div class="ttdeci">virtual void analyze()</div><div class="ttdoc">Flow sensitive analysis. </div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00086">FlowSensitive.cpp:86</a></div></div>
|
|
101
101
|
<div class="ttc" id="classSVF_1_1WPASolver_html_aaa932894d00b69cfa741f9987a9cc6b8"><div class="ttname"><a href="classSVF_1_1WPASolver.html#aaa932894d00b69cfa741f9987a9cc6b8">SVF::WPASolver::SCCDetect</a></div><div class="ttdeci">virtual NodeStack & SCCDetect()</div><div class="ttdoc">SCC detection. </div><div class="ttdef"><b>Definition:</b> <a href="WPASolver_8h_source.html#l00090">WPASolver.h:90</a></div></div>
|
|
102
102
|
<div class="ttc" id="cuddInt_8c_html_a5beb39637a978181c7c17714ac96672e"><div class="ttname"><a href="cuddInt_8c.html#a5beb39637a978181c7c17714ac96672e">empty</a></div><div class="ttdeci">static DdNode * empty</div><div class="ttdef"><b>Definition:</b> <a href="cuddInt_8c_source.html#l28567">cuddInt.c:28567</a></div></div>
|
|
103
|
-
<div class="ttc" id="classSVF_1_1GepVFGNode_html"><div class="ttname"><a href="classSVF_1_1GepVFGNode.html">SVF::GepVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#
|
|
103
|
+
<div class="ttc" id="classSVF_1_1GepVFGNode_html"><div class="ttname"><a href="classSVF_1_1GepVFGNode.html">SVF::GepVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00604">VFGNode.h:604</a></div></div>
|
|
104
104
|
<div class="ttc" id="classSVF_1_1FlowSensitive_html_ad3518931d3b8a0671cbeb975f853b956"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#ad3518931d3b8a0671cbeb975f853b956">SVF::FlowSensitive::propAlongDirectEdge</a></div><div class="ttdeci">virtual bool propAlongDirectEdge(const DirectSVFGEdge *edge)</div><div class="ttdoc">Propagate points-to information along a DIRECT SVFG edge. </div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00295">FlowSensitive.cpp:295</a></div></div>
|
|
105
105
|
<div class="ttc" id="classSVF_1_1DCHGraph_html"><div class="ttname"><a href="classSVF_1_1DCHGraph.html">SVF::DCHGraph</a></div><div class="ttdoc">Dwarf based CHG. </div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00208">DCHG.h:208</a></div></div>
|
|
106
106
|
<div class="ttc" id="classSVF_1_1FlowSensitive_html_afed358369102f01f6fe88b1433e704c3"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#afed358369102f01f6fe88b1433e704c3">SVF::FlowSensitive::finalize</a></div><div class="ttdeci">virtual void finalize()</div><div class="ttdoc">Finalize analysis. </div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00131">FlowSensitive.cpp:131</a></div></div>
|
|
107
107
|
<div class="ttc" id="classSVF_1_1Options_html_ad148549070b042aeddafca39ee949c77"><div class="ttname"><a href="classSVF_1_1Options.html#ad148549070b042aeddafca39ee949c77">SVF::Options::CTirAliasEval</a></div><div class="ttdeci">static const llvm::cl::opt< bool > CTirAliasEval</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00238">Options.h:238</a></div></div>
|
|
108
|
-
<div class="ttc" id="classSVF_1_1StmtVFGNode_html_a4dd7615f42971da9b6ec1dc04f0ec4e6"><div class="ttname"><a href="classSVF_1_1StmtVFGNode.html#a4dd7615f42971da9b6ec1dc04f0ec4e6">SVF::StmtVFGNode::getPAGEdge</a></div><div class="ttdeci">const PAGEdge * getPAGEdge() const</div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#
|
|
108
|
+
<div class="ttc" id="classSVF_1_1StmtVFGNode_html_a4dd7615f42971da9b6ec1dc04f0ec4e6"><div class="ttname"><a href="classSVF_1_1StmtVFGNode.html#a4dd7615f42971da9b6ec1dc04f0ec4e6">SVF::StmtVFGNode::getPAGEdge</a></div><div class="ttdeci">const PAGEdge * getPAGEdge() const</div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00136">VFGNode.h:136</a></div></div>
|
|
109
109
|
<div class="ttc" id="namespaceSVF_html_a8234d4b959abc9123993bcff4eee34c1"><div class="ttname"><a href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">SVF::Map</a></div><div class="ttdeci">std::unordered_map< Key, Value, Hash, KeyEqual, Allocator > Map</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00102">SVFBasicTypes.h:102</a></div></div>
|
|
110
110
|
<div class="ttc" id="classSVF_1_1FlowSensitive_html_a9d81537ec20196315a9a2541477ec5bf"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a9d81537ec20196315a9a2541477ec5bf">SVF::FlowSensitive::updateCallGraph</a></div><div class="ttdeci">bool updateCallGraph(const CallSiteToFunPtrMap &callsites)</div><div class="ttdoc">Update call graph. </div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00648">FlowSensitive.cpp:648</a></div></div>
|
|
111
111
|
<div class="ttc" id="classSVF_1_1DirectSVFGEdge_html"><div class="ttname"><a href="classSVF_1_1DirectSVFGEdge.html">SVF::DirectSVFGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGEdge_8h_source.html#l00141">VFGEdge.h:141</a></div></div>
|
|
@@ -123,12 +123,12 @@ $(function() {
|
|
|
123
123
|
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a33d502a0bd49307cd824e34b73157b9b"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a33d502a0bd49307cd824e34b73157b9b">SVF::NodeIDAllocator::Clusterer::cluster</a></div><div class="ttdeci">static std::vector< NodeID > cluster(BVDataPTAImpl *pta, const std::vector< std::pair< NodeID, unsigned >> keys, std::vector< std::pair< hclust_fast_methods, std::vector< NodeID >>> &candidates, std::string evalSubtitle="")</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00188">NodeIDAllocator.cpp:188</a></div></div>
|
|
124
124
|
<div class="ttc" id="classSVF_1_1GenericEdge_html_aeaa31a2c8479e831b36ce2e2582ceb86"><div class="ttname"><a href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">SVF::GenericEdge::getDstNode</a></div><div class="ttdeci">NodeType * getDstNode() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00089">GenericGraph.h:89</a></div></div>
|
|
125
125
|
<div class="ttc" id="classSVF_1_1FlowSensitive_html_a5f8a1493f7550a3f7a295e25d87bce12"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a5f8a1493f7550a3f7a295e25d87bce12">SVF::FlowSensitive::SCCDetect</a></div><div class="ttdeci">virtual NodeStack & SCCDetect()</div><div class="ttdoc">SCC detection. </div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00177">FlowSensitive.cpp:177</a></div></div>
|
|
126
|
-
<div class="ttc" id="classSVF_1_1PHIVFGNode_html_a2e00f6d582aa4ac9aa116cc6d5c79369"><div class="ttname"><a href="classSVF_1_1PHIVFGNode.html#a2e00f6d582aa4ac9aa116cc6d5c79369">SVF::PHIVFGNode::opVerBegin</a></div><div class="ttdeci">OPVers::const_iterator opVerBegin() const</div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#
|
|
126
|
+
<div class="ttc" id="classSVF_1_1PHIVFGNode_html_a2e00f6d582aa4ac9aa116cc6d5c79369"><div class="ttname"><a href="classSVF_1_1PHIVFGNode.html#a2e00f6d582aa4ac9aa116cc6d5c79369">SVF::PHIVFGNode::opVerBegin</a></div><div class="ttdeci">OPVers::const_iterator opVerBegin() const</div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00684">VFGNode.h:684</a></div></div>
|
|
127
127
|
<div class="ttc" id="namespaceSVF_html_af739db846e47ba6b2fd15eaad31ab7fb"><div class="ttname"><a href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">SVF::Set</a></div><div class="ttdeci">std::unordered_set< Key, Hash, KeyEqual, Allocator > Set</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00097">SVFBasicTypes.h:97</a></div></div>
|
|
128
128
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a757815a2c758695176120509ceb0ce70"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a757815a2c758695176120509ceb0ce70">SVF::SVFUtil::startAnalysisLimitTimer</a></div><div class="ttdeci">bool startAnalysisLimitTimer(unsigned timeLimit)</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00424">SVFUtil.cpp:424</a></div></div>
|
|
129
129
|
<div class="ttc" id="classSVF_1_1FlowSensitive_html_abb37c5e4e6fa4742e8dbcf397aea086e"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#abb37c5e4e6fa4742e8dbcf397aea086e">SVF::FlowSensitive::processAddr</a></div><div class="ttdeci">virtual bool processAddr(const AddrSVFGNode *addr)</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00416">FlowSensitive.cpp:416</a></div></div>
|
|
130
130
|
<div class="ttc" id="fastcluster_8h_html_a4205a14ad66b3320d2e94c61d74913dd"><div class="ttname"><a href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dd">hclust_fast_methods</a></div><div class="ttdeci">hclust_fast_methods</div><div class="ttdef"><b>Definition:</b> <a href="fastcluster_8h_source.html#l00065">fastcluster.h:65</a></div></div>
|
|
131
|
-
<div class="ttc" id="classSVF_1_1ActualParmVFGNode_html_a8932b197a076ab3069a9fe8b73e7fc32"><div class="ttname"><a href="classSVF_1_1ActualParmVFGNode.html#a8932b197a076ab3069a9fe8b73e7fc32">SVF::ActualParmVFGNode::getParam</a></div><div class="ttdeci">const PAGNode * getParam() const</div><div class="ttdoc">Return parameter. </div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#
|
|
131
|
+
<div class="ttc" id="classSVF_1_1ActualParmVFGNode_html_a8932b197a076ab3069a9fe8b73e7fc32"><div class="ttname"><a href="classSVF_1_1ActualParmVFGNode.html#a8932b197a076ab3069a9fe8b73e7fc32">SVF::ActualParmVFGNode::getParam</a></div><div class="ttdeci">const PAGNode * getParam() const</div><div class="ttdoc">Return parameter. </div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00874">VFGNode.h:874</a></div></div>
|
|
132
132
|
<div class="ttc" id="classSVF_1_1PointsTo_html_a879783ba6629e500af9aa7dfcda2563d"><div class="ttname"><a href="classSVF_1_1PointsTo.html#a879783ba6629e500af9aa7dfcda2563d">SVF::PointsTo::count</a></div><div class="ttdeci">u32_t count(void) const</div><div class="ttdoc">Returns number of elements. </div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8cpp_source.html#l00106">PointsTo.cpp:106</a></div></div>
|
|
133
133
|
<div class="ttc" id="classSVF_1_1NodeIDAllocator_html_ad63e43c65cb7d7cac7824f5cede5ec89"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator.html#ad63e43c65cb7d7cac7824f5cede5ec89">SVF::NodeIDAllocator::getNumObjects</a></div><div class="ttdeci">NodeID getNumObjects(void) const</div><div class="ttdoc">Returns the total number of memory objects. </div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00077">NodeIDAllocator.h:77</a></div></div>
|
|
134
134
|
<div class="ttc" id="classSVF_1_1PointsTo_html_ac4688413177b49b37dbbfd3ed188d59b"><div class="ttname"><a href="classSVF_1_1PointsTo.html#ac4688413177b49b37dbbfd3ed188d59b">SVF::PointsTo::empty</a></div><div class="ttdeci">bool empty(void) const</div><div class="ttdoc">Returns true if set is empty. </div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8cpp_source.html#l00094">PointsTo.cpp:94</a></div></div>
|
|
@@ -137,30 +137,30 @@ $(function() {
|
|
|
137
137
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a14a4c5124f2fd03ca3d898e2acd54160"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a14a4c5124f2fd03ca3d898e2acd54160">SVF::SVFUtil::hclustMethodToString</a></div><div class="ttdeci">std::string hclustMethodToString(hclust_fast_methods method)</div><div class="ttdoc">Returns a string representation of a hclust method. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00367">SVFUtil.cpp:367</a></div></div>
|
|
138
138
|
<div class="ttc" id="classSVF_1_1FlowSensitive_html_a5a8688102f3675cf414b01dc2ae51c6b"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a5a8688102f3675cf414b01dc2ae51c6b">SVF::FlowSensitive::plainMap</a></div><div class="ttdeci">virtual void plainMap(void) const</div><div class="ttdoc">Sets the global best mapping as a plain mapping, i.e. n -> n. </div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00801">FlowSensitive.cpp:801</a></div></div>
|
|
139
139
|
<div class="ttc" id="classSVF_1_1WPAFSSolver_html_a2d4cfae34bd4a55f1fe03881c87f8708"><div class="ttname"><a href="classSVF_1_1WPAFSSolver.html#a2d4cfae34bd4a55f1fe03881c87f8708">SVF::WPAFSSolver::SCCDetect</a></div><div class="ttdeci">virtual NodeStack & SCCDetect()</div><div class="ttdoc">SCC detection. </div><div class="ttdef"><b>Definition:</b> <a href="WPAFSSolver_8h_source.html#l00067">WPAFSSolver.h:67</a></div></div>
|
|
140
|
-
<div class="ttc" id="classSVF_1_1StmtVFGNode_html_a791a01f5d3528f8a8bf19369b5c61c37"><div class="ttname"><a href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">SVF::StmtVFGNode::getPAGSrcNodeID</a></div><div class="ttdeci">NodeID getPAGSrcNodeID() const</div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#
|
|
140
|
+
<div class="ttc" id="classSVF_1_1StmtVFGNode_html_a791a01f5d3528f8a8bf19369b5c61c37"><div class="ttname"><a href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">SVF::StmtVFGNode::getPAGSrcNodeID</a></div><div class="ttdeci">NodeID getPAGSrcNodeID() const</div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00141">VFGNode.h:141</a></div></div>
|
|
141
141
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_ac1422cd8b449fdb4a1f7c539364e4c41"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#ac1422cd8b449fdb4a1f7c539364e4c41">SVF::PointerAnalysis::FunctionSet</a></div><div class="ttdeci">Set< const SVFFunction * > FunctionSet</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00110">PointerAnalysis.h:110</a></div></div>
|
|
142
142
|
<div class="ttc" id="namespaceSVF_html_a61c01e2e687ab3a001fb806737583943aef15fd8989d8dd9576b3fbb2aabc118f"><div class="ttname"><a href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943aef15fd8989d8dd9576b3fbb2aabc118f">SVF::MayAlias</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00195">SVFBasicTypes.h:195</a></div></div>
|
|
143
|
-
<div class="ttc" id="classSVF_1_1PHIVFGNode_html_abd54e567a0826bbec277302e0c4f78a2"><div class="ttname"><a href="classSVF_1_1PHIVFGNode.html#abd54e567a0826bbec277302e0c4f78a2">SVF::PHIVFGNode::getRes</a></div><div class="ttdeci">const PAGNode * getRes() const</div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#
|
|
143
|
+
<div class="ttc" id="classSVF_1_1PHIVFGNode_html_abd54e567a0826bbec277302e0c4f78a2"><div class="ttname"><a href="classSVF_1_1PHIVFGNode.html#abd54e567a0826bbec277302e0c4f78a2">SVF::PHIVFGNode::getRes</a></div><div class="ttdeci">const PAGNode * getRes() const</div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00676">VFGNode.h:676</a></div></div>
|
|
144
144
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_aed0b0b9f035057552a6a82154fd88e61"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVF::SVFUtil::outs</a></div><div class="ttdeci">std::ostream & outs()</div><div class="ttdoc">Overwrite llvm::outs() </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00049">SVFUtil.h:49</a></div></div>
|
|
145
145
|
<div class="ttc" id="classSVF_1_1PointsTo_html_a6c1885ddfcc72604463f7c4ea94d2f74"><div class="ttname"><a href="classSVF_1_1PointsTo.html#a6c1885ddfcc72604463f7c4ea94d2f74">SVF::PointsTo::getCurrentBestNodeMapping</a></div><div class="ttdeci">static MappingPtr getCurrentBestNodeMapping(void)</div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8cpp_source.html#l00345">PointsTo.cpp:345</a></div></div>
|
|
146
146
|
<div class="ttc" id="PointsTo_8h_html"><div class="ttname"><a href="PointsTo_8h.html">PointsTo.h</a></div></div>
|
|
147
147
|
<div class="ttc" id="classSVF_1_1Options_html_a75a38fff97f7f18f3945c953cabc168b"><div class="ttname"><a href="classSVF_1_1Options.html#a75a38fff97f7f18f3945c953cabc168b">SVF::Options::PlainMappingFs</a></div><div class="ttdeci">static const llvm::cl::opt< bool > PlainMappingFs</div><div class="ttdoc">Use an explicitly plain mapping with flow-sensitive (not null). </div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00046">Options.h:46</a></div></div>
|
|
148
148
|
<div class="ttc" id="classSVF_1_1FlowSensitiveStat_html"><div class="ttname"><a href="classSVF_1_1FlowSensitiveStat.html">SVF::FlowSensitiveStat</a></div><div class="ttdef"><b>Definition:</b> <a href="WPAStat_8h_source.html#l00085">WPAStat.h:85</a></div></div>
|
|
149
|
-
<div class="ttc" id="classSVF_1_1LoadVFGNode_html"><div class="ttname"><a href="classSVF_1_1LoadVFGNode.html">SVF::LoadVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#
|
|
149
|
+
<div class="ttc" id="classSVF_1_1LoadVFGNode_html"><div class="ttname"><a href="classSVF_1_1LoadVFGNode.html">SVF::LoadVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00199">VFGNode.h:199</a></div></div>
|
|
150
150
|
<div class="ttc" id="classSVF_1_1GenericEdge_html_ab47ca533c415841ef75456cbad439589"><div class="ttname"><a href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">SVF::GenericEdge::getSrcNode</a></div><div class="ttdeci">NodeType * getSrcNode() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00085">GenericGraph.h:85</a></div></div>
|
|
151
|
-
<div class="ttc" id="classSVF_1_1FormalRetVFGNode_html_a62a894e71fcf7a3db19c0488d96a7262"><div class="ttname"><a href="classSVF_1_1FormalRetVFGNode.html#a62a894e71fcf7a3db19c0488d96a7262">SVF::FormalRetVFGNode::getRet</a></div><div class="ttdeci">const PAGNode * getRet() const</div><div class="ttdoc">Return value at callee. </div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#
|
|
151
|
+
<div class="ttc" id="classSVF_1_1FormalRetVFGNode_html_a62a894e71fcf7a3db19c0488d96a7262"><div class="ttname"><a href="classSVF_1_1FormalRetVFGNode.html#a62a894e71fcf7a3db19c0488d96a7262">SVF::FormalRetVFGNode::getRet</a></div><div class="ttdeci">const PAGNode * getRet() const</div><div class="ttdoc">Return value at callee. </div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l01050">VFGNode.h:1050</a></div></div>
|
|
152
152
|
<div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a21d2fd8bbef0c6f6ddddb5387569a7fa"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a21d2fd8bbef0c6f6ddddb5387569a7fa">SVF::TypeBasedHeapCloning::getRawCTirMetadata</a></div><div class="ttdeci">static const MDNode * getRawCTirMetadata(const Value *)</div><div class="ttdoc">Returns raw ctir metadata of a Value. Returns null if it doesn&#39;t exist. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00483">TypeBasedHeapCloning.cpp:483</a></div></div>
|
|
153
153
|
<div class="ttc" id="classSVF_1_1FlowSensitive_html_a979f89495966d71f9b470d832384ebd6"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a979f89495966d71f9b470d832384ebd6">SVF::FlowSensitive::processSVFGNode</a></div><div class="ttdeci">bool processSVFGNode(SVFGNode *node)</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00201">FlowSensitive.cpp:201</a></div></div>
|
|
154
154
|
<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#l00178">SVFBasicTypes.h:178</a></div></div>
|
|
155
155
|
<div class="ttc" id="classSVF_1_1GepStmt_html_abec33091e0dac0cdd5b95b6d7b0db3d8"><div class="ttname"><a href="classSVF_1_1GepStmt.html#abec33091e0dac0cdd5b95b6d7b0db3d8">SVF::GepStmt::getLocationSet</a></div><div class="ttdeci">const LocationSet & getLocationSet() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00435">SVFStatements.h:435</a></div></div>
|
|
156
|
-
<div class="ttc" id="classSVF_1_1ActualRetVFGNode_html"><div class="ttname"><a href="classSVF_1_1ActualRetVFGNode.html">SVF::ActualRetVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#
|
|
156
|
+
<div class="ttc" id="classSVF_1_1ActualRetVFGNode_html"><div class="ttname"><a href="classSVF_1_1ActualRetVFGNode.html">SVF::ActualRetVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00977">VFGNode.h:977</a></div></div>
|
|
157
157
|
<div class="ttc" id="Options_8h_html"><div class="ttname"><a href="Options_8h.html">Options.h</a></div></div>
|
|
158
158
|
<div class="ttc" id="classSVF_1_1GepStmt_html_a0ddf180a0f7ba64fc8655687910e3788"><div class="ttname"><a href="classSVF_1_1GepStmt.html#a0ddf180a0f7ba64fc8655687910e3788">SVF::GepStmt::isVariantFieldGep</a></div><div class="ttdeci">bool isVariantFieldGep() const</div><div class="ttdoc">Gep statement with a variant field index (pointer arithmetic) for struct field access. </div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00459">SVFStatements.h:459</a></div></div>
|
|
159
159
|
<div class="ttc" id="classSVF_1_1FlowSensitive_html_a9968530b3dee876f55e6659530decf27"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a9968530b3dee876f55e6659530decf27">SVF::FlowSensitive::processLoad</a></div><div class="ttdeci">virtual bool processLoad(const LoadSVFGNode *load)</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00518">FlowSensitive.cpp:518</a></div></div>
|
|
160
160
|
<div class="ttc" id="SVFBasicTypes_8h_html_a2c64190a065f342897573a3ef4973adb"><div class="ttname"><a href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a></div><div class="ttdeci">#define DGENERAL</div><div class="ttdoc">General debug flag is for each phase of a pass, it is often in a colorful output format. </div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00156">SVFBasicTypes.h:156</a></div></div>
|
|
161
161
|
<div class="ttc" id="classSVF_1_1AndersenWaveDiff_html_a48ff6fc4badc79ad3204ae9bd95cc540"><div class="ttname"><a href="classSVF_1_1AndersenWaveDiff.html#a48ff6fc4badc79ad3204ae9bd95cc540">SVF::AndersenWaveDiff::createAndersenWaveDiff</a></div><div class="ttdeci">static AndersenWaveDiff * createAndersenWaveDiff(SVFIR *_pag)</div><div class="ttdoc">Create an singleton instance directly instead of invoking llvm pass manager. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00430">Andersen.h:430</a></div></div>
|
|
162
162
|
<div class="ttc" id="classSVF_1_1FlowSensitive_html_aa36fd1387e948e83107431179d819067"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#aa36fd1387e948e83107431179d819067">SVF::FlowSensitive::processPhi</a></div><div class="ttdeci">virtual bool processPhi(const PHISVFGNode *phi)</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00445">FlowSensitive.cpp:445</a></div></div>
|
|
163
|
-
<div class="ttc" id="classSVF_1_1ActualRetVFGNode_html_a4bcfddf05da46729c670b4f450f9d606"><div class="ttname"><a href="classSVF_1_1ActualRetVFGNode.html#a4bcfddf05da46729c670b4f450f9d606">SVF::ActualRetVFGNode::getRev</a></div><div class="ttdeci">const PAGNode * getRev() const</div><div class="ttdoc">Receive parameter at callsite. </div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#
|
|
163
|
+
<div class="ttc" id="classSVF_1_1ActualRetVFGNode_html_a4bcfddf05da46729c670b4f450f9d606"><div class="ttname"><a href="classSVF_1_1ActualRetVFGNode.html#a4bcfddf05da46729c670b4f450f9d606">SVF::ActualRetVFGNode::getRev</a></div><div class="ttdeci">const PAGNode * getRev() const</div><div class="ttdoc">Receive parameter at callsite. </div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l01003">VFGNode.h:1003</a></div></div>
|
|
164
164
|
<div class="ttc" id="DCHG_8h_html"><div class="ttname"><a href="DCHG_8h.html">DCHG.h</a></div></div>
|
|
165
165
|
<div class="ttc" id="classSVF_1_1CallICFGNode_html"><div class="ttname"><a href="classSVF_1_1CallICFGNode.html">SVF::CallICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00364">ICFGNode.h:364</a></div></div>
|
|
166
166
|
<div class="ttc" id="classSVF_1_1FlowSensitive_html_af849ab5a07049cb08e6b0d8023577862"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#af849ab5a07049cb08e6b0d8023577862">SVF::FlowSensitive::propFromSrcToDst</a></div><div class="ttdeci">virtual bool propFromSrcToDst(SVFGEdge *edge)</div><div class="ttdoc">Propagation. </div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00275">FlowSensitive.cpp:275</a></div></div>
|
|
@@ -171,17 +171,17 @@ $(function() {
|
|
|
171
171
|
<div class="ttc" id="classSVF_1_1NodeIDAllocator_html_a2bd3ca30fc9669d9a0327544bdb4557b"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator.html#a2bd3ca30fc9669d9a0327544bdb4557b">SVF::NodeIDAllocator::get</a></div><div class="ttdeci">static NodeIDAllocator * get(void)</div><div class="ttdoc">Return (singleton) allocator. </div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00025">NodeIDAllocator.cpp:25</a></div></div>
|
|
172
172
|
<div class="ttc" id="classSVF_1_1GenericNode_html_ac3e55ef37aefb411ea4c87b1aa3b1895"><div class="ttname"><a href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">SVF::GenericNode::getId</a></div><div class="ttdeci">NodeID getId() const</div><div class="ttdoc">Get ID. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00165">GenericGraph.h:165</a></div></div>
|
|
173
173
|
<div class="ttc" id="namespaceSVF_html_a740396763e377643790c8b803ab3e4ea"><div class="ttname"><a href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">SVF::NodeBS</a></div><div class="ttdeci">llvm::SparseBitVector NodeBS</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00088">SVFBasicTypes.h:88</a></div></div>
|
|
174
|
-
<div class="ttc" id="classSVF_1_1StmtVFGNode_html"><div class="ttname"><a href="classSVF_1_1StmtVFGNode.html">SVF::StmtVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#
|
|
174
|
+
<div class="ttc" id="classSVF_1_1StmtVFGNode_html"><div class="ttname"><a href="classSVF_1_1StmtVFGNode.html">SVF::StmtVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00116">VFGNode.h:116</a></div></div>
|
|
175
175
|
<div class="ttc" id="classSVF_1_1FlowSensitive_html_a9e7fbc4c1d056fbef07498de8cbb1cd9"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a9e7fbc4c1d056fbef07498de8cbb1cd9">SVF::FlowSensitive::propVarPtsAfterCGUpdated</a></div><div class="ttdeci">bool propVarPtsAfterCGUpdated(NodeID var, const SVFGNode *src, const SVFGNode *dst)</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00773">FlowSensitive.cpp:773</a></div></div>
|
|
176
176
|
<div class="ttc" id="SVFModule_8h_html"><div class="ttname"><a href="SVFModule_8h.html">SVFModule.h</a></div></div>
|
|
177
177
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a8182be247907420db00837cef9bcfa70"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type >::type dyn_cast(const Y &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00343">Casting.h:343</a></div></div>
|
|
178
178
|
<div class="ttc" id="classSVF_1_1FlowSensitive_html_a69289c48fa91f850da90de080b9d26e5"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a69289c48fa91f850da90de080b9d26e5">SVF::FlowSensitive::SVFGEdgeSetTy</a></div><div class="ttdeci">SVFG::SVFGEdgeSetTy SVFGEdgeSetTy</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8h_source.html#l00053">FlowSensitive.h:53</a></div></div>
|
|
179
179
|
<div class="ttc" id="classSVF_1_1FlowSensitive_html_ae571767cc5936cf631a44976d8277e91"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#ae571767cc5936cf631a44976d8277e91">SVF::FlowSensitive::propVarPtsFromSrcToDst</a></div><div class="ttdeci">virtual bool propVarPtsFromSrcToDst(NodeID var, const SVFGNode *src, const SVFGNode *dst)</div><div class="ttdoc">Propagate points-to information of a certain variable from src to dst. </div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00397">FlowSensitive.cpp:397</a></div></div>
|
|
180
|
-
<div class="ttc" id="classSVF_1_1FormalParmVFGNode_html"><div class="ttname"><a href="classSVF_1_1FormalParmVFGNode.html">SVF::FormalParmVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#
|
|
181
|
-
<div class="ttc" id="classSVF_1_1PHIVFGNode_html_add18c60773871744123d12a037e78e20"><div class="ttname"><a href="classSVF_1_1PHIVFGNode.html#add18c60773871744123d12a037e78e20">SVF::PHIVFGNode::opVerEnd</a></div><div class="ttdeci">OPVers::const_iterator opVerEnd() const</div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#
|
|
180
|
+
<div class="ttc" id="classSVF_1_1FormalParmVFGNode_html"><div class="ttname"><a href="classSVF_1_1FormalParmVFGNode.html">SVF::FormalParmVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00908">VFGNode.h:908</a></div></div>
|
|
181
|
+
<div class="ttc" id="classSVF_1_1PHIVFGNode_html_add18c60773871744123d12a037e78e20"><div class="ttname"><a href="classSVF_1_1PHIVFGNode.html#add18c60773871744123d12a037e78e20">SVF::PHIVFGNode::opVerEnd</a></div><div class="ttdeci">OPVers::const_iterator opVerEnd() const</div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00688">VFGNode.h:688</a></div></div>
|
|
182
182
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a168f7f7a3a8c70dbf2b5b4269cd4c7c5"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a168f7f7a3a8c70dbf2b5b4269cd4c7c5">SVF::SVFUtil::stopAnalysisLimitTimer</a></div><div class="ttdeci">void stopAnalysisLimitTimer(bool limitTimerSet)</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00445">SVFUtil.cpp:445</a></div></div>
|
|
183
183
|
<div class="ttc" id="classSVF_1_1IndirectSVFGEdge_html"><div class="ttname"><a href="classSVF_1_1IndirectSVFGEdge.html">SVF::IndirectSVFGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFGEdge_8h_source.html#l00042">SVFGEdge.h:42</a></div></div>
|
|
184
|
-
<div class="ttc" id="classSVF_1_1FormalRetVFGNode_html"><div class="ttname"><a href="classSVF_1_1FormalRetVFGNode.html">SVF::FormalRetVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#
|
|
184
|
+
<div class="ttc" id="classSVF_1_1FormalRetVFGNode_html"><div class="ttname"><a href="classSVF_1_1FormalRetVFGNode.html">SVF::FormalRetVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l01035">VFGNode.h:1035</a></div></div>
|
|
185
185
|
<div class="ttc" id="classSVF_1_1FlowSensitive_html_ad7640ada31b5cb542e492e27ab4fe1af"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#ad7640ada31b5cb542e492e27ab4fe1af">SVF::FlowSensitive::connectCallerAndCallee</a></div><div class="ttdeci">void connectCallerAndCallee(const CallEdgeMap &newEdges, SVFGEdgeSetTy &edges)</div><div class="ttdoc">Connect nodes in SVFG. </div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00701">FlowSensitive.cpp:701</a></div></div>
|
|
186
186
|
<div class="ttc" id="classSVF_1_1PTData_html_adbe2b955f119871b54dc502de84b94c4"><div class="ttname"><a href="classSVF_1_1PTData.html#adbe2b955f119871b54dc502de84b94c4">SVF::PTData::getAllPts</a></div><div class="ttdeci">virtual Map< DataSet, unsigned > getAllPts(bool liveOnly) const =0</div></div>
|
|
187
187
|
<div class="ttc" id="classSVF_1_1PointsTo_html"><div class="ttname"><a href="classSVF_1_1PointsTo.html">SVF::PointsTo</a></div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00027">PointsTo.h:27</a></div></div>
|