svf-tools 1.0.604 → 1.0.605
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/AndersenSFR_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/Andersen_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/CFLGraphBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/CFLStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/CPPUtil_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/CSC_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/Casting_8h.html +3 -0
- package/SVF-doxygen/html/html/Casting_8h_source.html +22 -22
- package/SVF-doxygen/html/html/ConsG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +15 -15
- package/SVF-doxygen/html/html/ContextDDA_8h_source.html +3 -3
- package/SVF-doxygen/html/html/DCHG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/DCHG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +82 -74
- package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +14 -14
- package/SVF-doxygen/html/html/FlowDDA_8h_source.html +9 -9
- package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +27 -21
- package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +18 -18
- package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +1 -1
- package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/LLVMUtil_8h_source.html +1 -1
- package/SVF-doxygen/html/html/LocationSet_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MHP_8cpp_source.html +33 -38
- package/SVF-doxygen/html/html/MHP_8h_source.html +22 -22
- package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +1 -1
- package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +12 -11
- package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +11 -11
- package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/SVFValue_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +8 -1
- package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +11 -11
- package/SVF-doxygen/html/html/SymbolTableBuilder_8h_source.html +8 -8
- package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1AliasCFLGraphBuilder.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1CFLStat.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CSC.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +19 -19
- package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +228 -220
- package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +17 -17
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +64 -58
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +30 -38
- package/SVF-doxygen/html/html/classSVF_1_1IRAnnotator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1MHP.html +67 -83
- package/SVF-doxygen/html/html/classSVF_1_1MHPValidator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +53 -53
- package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1SVFCallInst.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +46 -33
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +8 -1
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +32 -32
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraphBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VFCFLGraphBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive_1_1SCC.html +1 -1
- package/SVF-doxygen/html/html/include_2MTA_2MTAResultValidator_8h_source.html +2 -2
- package/SVF-doxygen/html/html/namespaceSVF_1_1LLVMUtil.html +7 -7
- package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +50 -17
- package/SVF-doxygen/html/html/namespaceSVF_1_1cppUtil.html +2 -2
- package/SVF-doxygen/html/html/namespacemembers_func_i.html +7 -7
- package/SVF-doxygen/html/html/namespacemembers_i.html +8 -8
- package/SVF-doxygen/html/html/search/all_9.js +1 -1
- package/SVF-doxygen/html/html/search/functions_8.js +1 -1
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1cast__convert__val.html +3 -3
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1cast__convert__val_3_01To_00_01FromTy_00_01FromTy_01_4.html +3 -3
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1cast__retty.html +2 -2
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1cast__retty__impl.html +2 -2
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01From_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01const_01From_01_4.html +2 -2
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01const_01From_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01const_01From_01_5const_01_4.html +2 -2
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01std_1_1unique__ptr_3_01From_01_4_01_4.html +4 -4
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1cast__retty__wrap.html +2 -2
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1cast__retty__wrap_3_01To_00_01FromTy_00_01FromTy_01_4.html +2 -2
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1is__simple__type.html +2 -2
- package/SVF-doxygen/html/html/tools_2MTA_2MTAResultValidator_8h_source.html +1 -1
- package/include/DDA/DDAVFSolver.h +4 -8
- package/include/Graphs/SVFGOPT.h +2 -2
- package/include/MTA/MTAResultValidator.h +1 -1
- package/include/Util/Casting.h +7 -0
- package/lib/CFL/CFLStat.cpp +1 -1
- package/lib/DDA/ContextDDA.cpp +1 -1
- package/lib/Graphs/ConsG.cpp +2 -2
- package/lib/Graphs/SVFGOPT.cpp +15 -17
- package/lib/MTA/FSMPTA.cpp +7 -6
- package/lib/MTA/LockAnalysis.cpp +1 -1
- package/lib/MTA/MHP.cpp +215 -227
- package/lib/MemoryModel/LocationSet.cpp +1 -1
- package/lib/MemoryModel/PointerAnalysis.cpp +1 -1
- package/lib/SABER/SaberSVFGBuilder.cpp +1 -1
- package/lib/SABER/SrcSnkDDA.cpp +3 -3
- package/lib/SVF-LLVM/LLVMModule.cpp +1 -1
- package/lib/SVF-LLVM/LLVMUtil.cpp +1 -1
- package/lib/SVF-LLVM/SVFIRBuilder.cpp +4 -4
- package/lib/SVF-LLVM/SymbolTableBuilder.cpp +3 -2
- package/lib/SVFIR/SymbolTableInfo.cpp +1 -1
- package/lib/WPA/AndersenSFR.cpp +1 -1
- package/lib/WPA/FlowSensitive.cpp +23 -22
- package/package.json +1 -1
|
@@ -613,7 +613,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
613
613
|
<div class="ttc" id="classSVF_1_1SVFG_html_a0920e9f9896531959d74ae61013d96d6"><div class="ttname"><a href="classSVF_1_1SVFG.html#a0920e9f9896531959d74ae61013d96d6">SVF::SVFG::buildSVFG</a></div><div class="ttdeci">virtual void buildSVFG()</div><div class="ttdoc">Start building SVFG. </div><div class="ttdef"><b>Definition:</b> <a href="SVFG_8cpp_source.html#l00224">SVFG.cpp:224</a></div></div>
|
|
614
614
|
<div class="ttc" id="classSVF_1_1MemSSA_html"><div class="ttname"><a href="classSVF_1_1MemSSA.html">SVF::MemSSA</a></div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8h_source.html#l00052">MemSSA.h:52</a></div></div>
|
|
615
615
|
<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>
|
|
616
|
-
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a1010ef4fc52e312f2b22867a63a5810d"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a1010ef4fc52e312f2b22867a63a5810d">SVF::MTASVFGBuilder::connectMHPEdges</a></div><div class="ttdeci">void connectMHPEdges(PointerAnalysis *pta)</div><div class="ttdoc">Connect MHP indirect value-flow edges for two nodes that may-happen-in-parallel. </div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#
|
|
616
|
+
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a1010ef4fc52e312f2b22867a63a5810d"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a1010ef4fc52e312f2b22867a63a5810d">SVF::MTASVFGBuilder::connectMHPEdges</a></div><div class="ttdeci">void connectMHPEdges(PointerAnalysis *pta)</div><div class="ttdoc">Connect MHP indirect value-flow edges for two nodes that may-happen-in-parallel. </div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#l00706">FSMPTA.cpp:706</a></div></div>
|
|
617
617
|
<div class="ttc" id="classSVF_1_1MemSSA_html_ad40617a1907b9a6b8cc24888ce54a0ac"><div class="ttname"><a href="classSVF_1_1MemSSA.html#ad40617a1907b9a6b8cc24888ce54a0ac">SVF::MemSSA::getPTA</a></div><div class="ttdeci">BVDataPTAImpl * getPTA() const</div><div class="ttdoc">Return PTA. </div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8h_source.html#l00306">MemSSA.h:306</a></div></div>
|
|
618
618
|
<div class="ttc" id="classSVF_1_1SVFG_html_a49a910bc4ea6e98d1584e74a018badc9"><div class="ttname"><a href="classSVF_1_1SVFG.html#a49a910bc4ea6e98d1584e74a018badc9">SVF::SVFG::getMSSA</a></div><div class="ttdeci">MemSSA * getMSSA() const</div><div class="ttdoc">Get SVFG memory SSA. </div><div class="ttdef"><b>Definition:</b> <a href="SVFG_8h_source.html#l00138">SVFG.h:138</a></div></div>
|
|
619
619
|
<div class="ttc" id="classSVF_1_1SVFGBuilder_html_a26bc3b9c07472e454bc567cd8746caef"><div class="ttname"><a href="classSVF_1_1SVFGBuilder.html#a26bc3b9c07472e454bc567cd8746caef">SVF::SVFGBuilder::svfg</a></div><div class="ttdeci">SVFG * svfg</div><div class="ttdef"><b>Definition:</b> <a href="SVFGBuilder_8h_source.html#l00100">SVFGBuilder.h:100</a></div></div>
|
|
@@ -686,21 +686,21 @@ Additional Inherited Members</h2></td></tr>
|
|
|
686
686
|
<p>Connect <a class="el" href="classSVF_1_1MHP.html">MHP</a> indirect value-flow edges for two nodes that may-happen-in-parallel. </p>
|
|
687
687
|
<p>todo: we ignore rule 2 and 3. but so far I haven't added intra-thread value flow affected by fork and inter-thread value flow affected by join </p>
|
|
688
688
|
|
|
689
|
-
<p class="definition">Definition at line <a class="el" href="FSMPTA_8cpp_source.html#
|
|
690
|
-
<div class="fragment"><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>  <a class="code" href="classSVF_1_1PCG.html">PCG</a>* pcg = <span class="keyword">new</span> <a class="code" href="classSVF_1_1PCG.html">PCG</a>(pta);</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  <span class="keywordflow">if</span> ((<a class="code" href="classSVF_1_1MTASVFGBuilder.html#a2be0c1f7cc8872a6f27431b33811cbea">ADDEDGE_NONSPARSE</a>==<a class="code" href="classSVF_1_1Options.html#af129d2ff94af3f6830c0678cb4b72371">Options::AddModelFlag</a>) && <a class="code" href="classSVF_1_1Options.html#af2f66307e1d51947676f622c98ef0762">Options::UsePCG</a>)</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>  {</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>  pcg-><a class="code" href="classSVF_1_1PCG.html#a50b677ec622247a464cee7f0f45c5a53">analyze</a>();</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>  }</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a46d39980440040fc0ca50b3df7eead1a">collectLoadStoreSVFGNodes</a>();</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a13ac51421add3cb242ad823e18938c95">recordedges</a>.clear();</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a1c0de33bba2f05f14140d872c345ab38">edge2pts</a>.clear();</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span> </div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>  <span class="keywordflow">for</span> (SVFGNodeSet::const_iterator it1 = <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a772436f5edc7b4bed3a3e8f0e55ac5ce">stnodeSet</a>.begin(), eit1 = <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a772436f5edc7b4bed3a3e8f0e55ac5ce">stnodeSet</a>.end(); it1!=eit1; ++it1)</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>  {</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n1 = SVFUtil::cast<StmtSVFGNode>(*it1);</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* i1 = n1-><a class="code" href="classSVF_1_1StmtVFGNode.html#a3fb14833d95bb3550f904b5e236a5364">getInst</a>();</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> (SVFGNodeSet::const_iterator it2 = <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a6dfa9807255258f324557d188adea9b2">ldnodeSet</a>.begin(), eit2 = <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a6dfa9807255258f324557d188adea9b2">ldnodeSet</a>.end(); it2 != eit2; ++it2)</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>  {</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n2 = SVFUtil::cast<StmtSVFGNode>(*it2);</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* i2 = n2-><a class="code" href="classSVF_1_1StmtVFGNode.html#a3fb14833d95bb3550f904b5e236a5364">getInst</a>();</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MTASVFGBuilder.html#a2be0c1f7cc8872a6f27431b33811cbea">ADDEDGE_NONSPARSE</a>==<a class="code" href="classSVF_1_1Options.html#af129d2ff94af3f6830c0678cb4b72371">Options::AddModelFlag</a>)</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>  {</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#af2f66307e1d51947676f622c98ef0762">Options::UsePCG</a>)</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>  {</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>  <span class="keywordflow">if</span> (pcg-><a class="code" href="classSVF_1_1PCG.html#a0c4d2c2648638794a02d890293a2805d">mayHappenInParallel</a>(i1, i2) || <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a73024bf30aa3ec79e5953a7ea1f8feb7">mhp</a>-><a class="code" href="classSVF_1_1MHP.html#a15b624924254f5362a3d02fa539a24fb">mayHappenInParallel</a>(i1, i2))</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a82b52f8e70f51353cbd7476a509ff523">handleStoreLoadNonSparse</a>(n1, n2, pta);</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></div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>  {</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a82b52f8e70f51353cbd7476a509ff523">handleStoreLoadNonSparse</a>(n1, n2, pta);</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>  }</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>  }</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>  {</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a24921d1b1d79d7ef0b358be8d7a9e2c4">handleStoreLoad</a>(n1, n2, pta);</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>  }</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>  }</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>  <span class="keywordflow">for</span> (SVFGNodeSet::const_iterator it2 = <a class="code" href="cJSON_8cpp.html#a2599f74bdbbc1b3fd1ba8db3789a0be7">std::next</a>(it1), eit2 = <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a772436f5edc7b4bed3a3e8f0e55ac5ce">stnodeSet</a>.end(); it2!=eit2; ++it2)</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="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n2 = SVFUtil::cast<StmtSVFGNode>(*it2);</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* i2 = n2-><a class="code" href="classSVF_1_1StmtVFGNode.html#a3fb14833d95bb3550f904b5e236a5364">getInst</a>();</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MTASVFGBuilder.html#a2be0c1f7cc8872a6f27431b33811cbea">ADDEDGE_NONSPARSE</a> == <a class="code" href="classSVF_1_1Options.html#af129d2ff94af3f6830c0678cb4b72371">Options::AddModelFlag</a>)</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>  {</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#af2f66307e1d51947676f622c98ef0762">Options::UsePCG</a>)</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>  {</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  <span class="keywordflow">if</span>(pcg-><a class="code" href="classSVF_1_1PCG.html#a0c4d2c2648638794a02d890293a2805d">mayHappenInParallel</a>(i1, i2) || <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a73024bf30aa3ec79e5953a7ea1f8feb7">mhp</a>-><a class="code" href="classSVF_1_1MHP.html#a15b624924254f5362a3d02fa539a24fb">mayHappenInParallel</a>(i1, i2))</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a91ff57e51b0650963b4b5541fa0f7056">handleStoreStoreNonSparse</a>(n1, n2, pta);</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>  }</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>  {</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a91ff57e51b0650963b4b5541fa0f7056">handleStoreStoreNonSparse</a>(n1, n2, pta);</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>  <span class="keywordflow">else</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>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a29a14309cfa1d7c4454fb1237704e487">handleStoreStore</a>(n1, n2, pta);</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>  }</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>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Options.html#a6bec8aed8673d10d65cc3df9fad3383b">Options::ReadPrecisionTDEdge</a> && <a class="code" href="classSVF_1_1MTASVFGBuilder.html#adac31c16b9e84d3bee24ce09a82c467b">ADDEDGE_NORP</a>!=<a class="code" href="classSVF_1_1Options.html#af129d2ff94af3f6830c0678cb4b72371">Options::AddModelFlag</a>)</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>  {</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>  <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>,<a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>()<<<span class="stringliteral">"Read precision edge removing \n"</span>);</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>  <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a217a1ccdaec1abb103cf6b0373631234">DMTA</a>,<a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>()<<<span class="stringliteral">"Read precision edge removing \n"</span>);</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a5532751632ece036b3d6741908573b36">readPrecision</a>();</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>  }</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span> }</div><div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a73024bf30aa3ec79e5953a7ea1f8feb7"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a73024bf30aa3ec79e5953a7ea1f8feb7">SVF::MTASVFGBuilder::mhp</a></div><div class="ttdeci">MHP * mhp</div><div class="ttdoc">MHP class. </div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8h_source.html#l00170">FSMPTA.h:170</a></div></div>
|
|
689
|
+
<p class="definition">Definition at line <a class="el" href="FSMPTA_8cpp_source.html#l00706">706</a> of file <a class="el" href="FSMPTA_8cpp_source.html">FSMPTA.cpp</a>.</p>
|
|
690
|
+
<div class="fragment"><div class="line"><a name="l00707"></a><span class="lineno"> 707</span> {</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  <a class="code" href="classSVF_1_1PCG.html">PCG</a>* pcg = <span class="keyword">new</span> <a class="code" href="classSVF_1_1PCG.html">PCG</a>(pta);</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>  <span class="keywordflow">if</span> ((<a class="code" href="classSVF_1_1MTASVFGBuilder.html#a2be0c1f7cc8872a6f27431b33811cbea">ADDEDGE_NONSPARSE</a>==<a class="code" href="classSVF_1_1Options.html#af129d2ff94af3f6830c0678cb4b72371">Options::AddModelFlag</a>) && <a class="code" href="classSVF_1_1Options.html#af2f66307e1d51947676f622c98ef0762">Options::UsePCG</a>)</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>  pcg-><a class="code" href="classSVF_1_1PCG.html#a50b677ec622247a464cee7f0f45c5a53">analyze</a>();</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>  }</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a46d39980440040fc0ca50b3df7eead1a">collectLoadStoreSVFGNodes</a>();</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a13ac51421add3cb242ad823e18938c95">recordedges</a>.clear();</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a1c0de33bba2f05f14140d872c345ab38">edge2pts</a>.clear();</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span> </div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>  <span class="keywordflow">for</span> (SVFGNodeSet::const_iterator it1 = <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a772436f5edc7b4bed3a3e8f0e55ac5ce">stnodeSet</a>.begin(), eit1 = <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a772436f5edc7b4bed3a3e8f0e55ac5ce">stnodeSet</a>.end(); it1!=eit1; ++it1)</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>  {</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n1 = SVFUtil::cast<StmtSVFGNode>(*it1);</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* i1 = n1-><a class="code" href="classSVF_1_1StmtVFGNode.html#a3fb14833d95bb3550f904b5e236a5364">getInst</a>();</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span> </div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>  <span class="keywordflow">for</span> (SVFGNodeSet::const_iterator it2 = <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a6dfa9807255258f324557d188adea9b2">ldnodeSet</a>.begin(), eit2 = <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a6dfa9807255258f324557d188adea9b2">ldnodeSet</a>.end(); it2 != eit2; ++it2)</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_1StmtVFGNode.html">StmtSVFGNode</a>* n2 = SVFUtil::cast<StmtSVFGNode>(*it2);</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* i2 = n2-><a class="code" href="classSVF_1_1StmtVFGNode.html#a3fb14833d95bb3550f904b5e236a5364">getInst</a>();</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MTASVFGBuilder.html#a2be0c1f7cc8872a6f27431b33811cbea">ADDEDGE_NONSPARSE</a>==<a class="code" href="classSVF_1_1Options.html#af129d2ff94af3f6830c0678cb4b72371">Options::AddModelFlag</a>)</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>  {</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#af2f66307e1d51947676f622c98ef0762">Options::UsePCG</a>)</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>  {</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>  <span class="keywordflow">if</span> (pcg-><a class="code" href="classSVF_1_1PCG.html#a0c4d2c2648638794a02d890293a2805d">mayHappenInParallel</a>(i1, i2) || <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a73024bf30aa3ec79e5953a7ea1f8feb7">mhp</a>-><a class="code" href="classSVF_1_1MHP.html#a15b624924254f5362a3d02fa539a24fb">mayHappenInParallel</a>(i1, i2))</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a82b52f8e70f51353cbd7476a509ff523">handleStoreLoadNonSparse</a>(n1, n2, pta);</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>  }</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>  {</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a82b52f8e70f51353cbd7476a509ff523">handleStoreLoadNonSparse</a>(n1, n2, pta);</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</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>  <span class="keywordflow">else</span></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>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a24921d1b1d79d7ef0b358be8d7a9e2c4">handleStoreLoad</a>(n1, n2, pta);</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>  }</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> </div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  <span class="keywordflow">for</span> (SVFGNodeSet::const_iterator it2 = <a class="code" href="cJSON_8cpp.html#a2599f74bdbbc1b3fd1ba8db3789a0be7">std::next</a>(it1), eit2 = <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a772436f5edc7b4bed3a3e8f0e55ac5ce">stnodeSet</a>.end(); it2!=eit2; ++it2)</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>  {</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n2 = SVFUtil::cast<StmtSVFGNode>(*it2);</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* i2 = n2-><a class="code" href="classSVF_1_1StmtVFGNode.html#a3fb14833d95bb3550f904b5e236a5364">getInst</a>();</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MTASVFGBuilder.html#a2be0c1f7cc8872a6f27431b33811cbea">ADDEDGE_NONSPARSE</a> == <a class="code" href="classSVF_1_1Options.html#af129d2ff94af3f6830c0678cb4b72371">Options::AddModelFlag</a>)</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  {</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#af2f66307e1d51947676f622c98ef0762">Options::UsePCG</a>)</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  {</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>  <span class="keywordflow">if</span>(pcg-><a class="code" href="classSVF_1_1PCG.html#a0c4d2c2648638794a02d890293a2805d">mayHappenInParallel</a>(i1, i2) || <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a73024bf30aa3ec79e5953a7ea1f8feb7">mhp</a>-><a class="code" href="classSVF_1_1MHP.html#a15b624924254f5362a3d02fa539a24fb">mayHappenInParallel</a>(i1, i2))</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a91ff57e51b0650963b4b5541fa0f7056">handleStoreStoreNonSparse</a>(n1, n2, pta);</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">else</span></div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>  {</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a91ff57e51b0650963b4b5541fa0f7056">handleStoreStoreNonSparse</a>(n1, n2, pta);</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>  <span class="keywordflow">else</span></div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>  {</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a29a14309cfa1d7c4454fb1237704e487">handleStoreStore</a>(n1, n2, pta);</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>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Options.html#a6bec8aed8673d10d65cc3df9fad3383b">Options::ReadPrecisionTDEdge</a> && <a class="code" href="classSVF_1_1MTASVFGBuilder.html#adac31c16b9e84d3bee24ce09a82c467b">ADDEDGE_NORP</a>!=<a class="code" href="classSVF_1_1Options.html#af129d2ff94af3f6830c0678cb4b72371">Options::AddModelFlag</a>)</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>  {</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>  <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>,<a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>()<<<span class="stringliteral">"Read precision edge removing \n"</span>);</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>  <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a217a1ccdaec1abb103cf6b0373631234">DMTA</a>,<a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>()<<<span class="stringliteral">"Read precision edge removing \n"</span>);</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a5532751632ece036b3d6741908573b36">readPrecision</a>();</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> }</div><div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a73024bf30aa3ec79e5953a7ea1f8feb7"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a73024bf30aa3ec79e5953a7ea1f8feb7">SVF::MTASVFGBuilder::mhp</a></div><div class="ttdeci">MHP * mhp</div><div class="ttdoc">MHP class. </div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8h_source.html#l00170">FSMPTA.h:170</a></div></div>
|
|
691
691
|
<div class="ttc" id="classSVF_1_1SVFInstruction_html"><div class="ttname"><a href="classSVF_1_1SVFInstruction.html">SVF::SVFInstruction</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00570">SVFValue.h:570</a></div></div>
|
|
692
692
|
<div class="ttc" id="cJSON_8cpp_html_a2599f74bdbbc1b3fd1ba8db3789a0be7"><div class="ttname"><a href="cJSON_8cpp.html#a2599f74bdbbc1b3fd1ba8db3789a0be7">next</a></div><div class="ttdeci">item next</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l02224">cJSON.cpp:2224</a></div></div>
|
|
693
693
|
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a6dfa9807255258f324557d188adea9b2"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a6dfa9807255258f324557d188adea9b2">SVF::MTASVFGBuilder::ldnodeSet</a></div><div class="ttdeci">SVFGNodeSet ldnodeSet</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8h_source.html#l00167">FSMPTA.h:167</a></div></div>
|
|
694
694
|
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a46d39980440040fc0ca50b3df7eead1a"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a46d39980440040fc0ca50b3df7eead1a">SVF::MTASVFGBuilder::collectLoadStoreSVFGNodes</a></div><div class="ttdeci">void collectLoadStoreSVFGNodes()</div><div class="ttdoc">Collect all loads/stores SVFGNodes. </div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#l00064">FSMPTA.cpp:64</a></div></div>
|
|
695
695
|
<div class="ttc" id="classSVF_1_1PCG_html"><div class="ttname"><a href="classSVF_1_1PCG.html">SVF::PCG</a></div><div class="ttdef"><b>Definition:</b> <a href="PCG_8h_source.html#l00050">PCG.h:50</a></div></div>
|
|
696
|
-
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a5532751632ece036b3d6741908573b36"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a5532751632ece036b3d6741908573b36">SVF::MTASVFGBuilder::readPrecision</a></div><div class="ttdeci">void readPrecision()</div><div class="ttdoc">For o, n2-o->n1, n1 and n2 are write. Foreach n3:n1->n3, n2->n3; then remove n2->n1. </div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#
|
|
696
|
+
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a5532751632ece036b3d6741908573b36"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a5532751632ece036b3d6741908573b36">SVF::MTASVFGBuilder::readPrecision</a></div><div class="ttdeci">void readPrecision()</div><div class="ttdoc">For o, n2-o->n1, n1 and n2 are write. Foreach n3:n1->n3, n2->n3; then remove n2->n1. </div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#l00658">FSMPTA.cpp:658</a></div></div>
|
|
697
697
|
<div class="ttc" id="SVFType_8h_html_a2c64190a065f342897573a3ef4973adb"><div class="ttname"><a href="SVFType_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="SVFType_8h_source.html#l00424">SVFType.h:424</a></div></div>
|
|
698
|
-
<div class="ttc" id="classSVF_1_1MHP_html_a15b624924254f5362a3d02fa539a24fb"><div class="ttname"><a href="classSVF_1_1MHP.html#a15b624924254f5362a3d02fa539a24fb">SVF::MHP::mayHappenInParallel</a></div><div class="ttdeci">virtual bool mayHappenInParallel(const SVFInstruction *i1, const SVFInstruction *i2)</div><div class="ttdoc">Interface to query whether two instructions may happen-in-parallel. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8cpp_source.html#
|
|
698
|
+
<div class="ttc" id="classSVF_1_1MHP_html_a15b624924254f5362a3d02fa539a24fb"><div class="ttname"><a href="classSVF_1_1MHP.html#a15b624924254f5362a3d02fa539a24fb">SVF::MHP::mayHappenInParallel</a></div><div class="ttdeci">virtual bool mayHappenInParallel(const SVFInstruction *i1, const SVFInstruction *i2)</div><div class="ttdoc">Interface to query whether two instructions may happen-in-parallel. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8cpp_source.html#l00603">MHP.cpp:603</a></div></div>
|
|
699
699
|
<div class="ttc" id="classSVF_1_1Options_html_af129d2ff94af3f6830c0678cb4b72371"><div class="ttname"><a href="classSVF_1_1Options.html#af129d2ff94af3f6830c0678cb4b72371">SVF::Options::AddModelFlag</a></div><div class="ttdeci">static const llvm::cl::opt< u32_t > AddModelFlag</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00169">Options.h:169</a></div></div>
|
|
700
700
|
<div class="ttc" id="classSVF_1_1StmtVFGNode_html_a3fb14833d95bb3550f904b5e236a5364"><div class="ttname"><a href="classSVF_1_1StmtVFGNode.html#a3fb14833d95bb3550f904b5e236a5364">SVF::StmtVFGNode::getInst</a></div><div class="ttdeci">const SVFInstruction * getInst() const</div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00185">VFGNode.h:185</a></div></div>
|
|
701
|
-
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a24921d1b1d79d7ef0b358be8d7a9e2c4"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a24921d1b1d79d7ef0b358be8d7a9e2c4">SVF::MTASVFGBuilder::handleStoreLoad</a></div><div class="ttdeci">void handleStoreLoad(const StmtSVFGNode *n1, const StmtSVFGNode *n2, PointerAnalysis *pta)</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#
|
|
701
|
+
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a24921d1b1d79d7ef0b358be8d7a9e2c4"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a24921d1b1d79d7ef0b358be8d7a9e2c4">SVF::MTASVFGBuilder::handleStoreLoad</a></div><div class="ttdeci">void handleStoreLoad(const StmtSVFGNode *n1, const StmtSVFGNode *n2, PointerAnalysis *pta)</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#l00484">FSMPTA.cpp:484</a></div></div>
|
|
702
702
|
<div class="ttc" id="classSVF_1_1PCG_html_a50b677ec622247a464cee7f0f45c5a53"><div class="ttname"><a href="classSVF_1_1PCG.html#a50b677ec622247a464cee7f0f45c5a53">SVF::PCG::analyze</a></div><div class="ttdeci">virtual bool analyze()</div><div class="ttdoc">We start the pass here. </div><div class="ttdef"><b>Definition:</b> <a href="PCG_8cpp_source.html#l00043">PCG.cpp:43</a></div></div>
|
|
703
|
-
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a91ff57e51b0650963b4b5541fa0f7056"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a91ff57e51b0650963b4b5541fa0f7056">SVF::MTASVFGBuilder::handleStoreStoreNonSparse</a></div><div class="ttdeci">void handleStoreStoreNonSparse(const StmtSVFGNode *n1, const StmtSVFGNode *n2, PointerAnalysis *pta)</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#
|
|
703
|
+
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a91ff57e51b0650963b4b5541fa0f7056"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a91ff57e51b0650963b4b5541fa0f7056">SVF::MTASVFGBuilder::handleStoreStoreNonSparse</a></div><div class="ttdeci">void handleStoreStoreNonSparse(const StmtSVFGNode *n1, const StmtSVFGNode *n2, PointerAnalysis *pta)</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#l00475">FSMPTA.cpp:475</a></div></div>
|
|
704
704
|
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_adac31c16b9e84d3bee24ce09a82c467b"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#adac31c16b9e84d3bee24ce09a82c467b">SVF::MTASVFGBuilder::ADDEDGE_NORP</a></div><div class="ttdeci">static const u32_t ADDEDGE_NORP</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8h_source.html#l00193">FSMPTA.h:193</a></div></div>
|
|
705
705
|
<div class="ttc" id="SVFType_8h_html_a217a1ccdaec1abb103cf6b0373631234"><div class="ttname"><a href="SVFType_8h.html#a217a1ccdaec1abb103cf6b0373631234">DMTA</a></div><div class="ttdeci">#define DMTA</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00439">SVFType.h:439</a></div></div>
|
|
706
706
|
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a13ac51421add3cb242ad823e18938c95"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a13ac51421add3cb242ad823e18938c95">SVF::MTASVFGBuilder::recordedges</a></div><div class="ttdeci">Set< NodeIDPair > recordedges</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8h_source.html#l00173">FSMPTA.h:173</a></div></div>
|
|
@@ -708,11 +708,11 @@ Additional Inherited Members</h2></td></tr>
|
|
|
708
708
|
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a772436f5edc7b4bed3a3e8f0e55ac5ce"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a772436f5edc7b4bed3a3e8f0e55ac5ce">SVF::MTASVFGBuilder::stnodeSet</a></div><div class="ttdeci">SVFGNodeSet stnodeSet</div><div class="ttdoc">all stores/loads SVFGNodes </div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8h_source.html#l00166">FSMPTA.h:166</a></div></div>
|
|
709
709
|
<div class="ttc" id="classSVF_1_1PCG_html_a0c4d2c2648638794a02d890293a2805d"><div class="ttname"><a href="classSVF_1_1PCG.html#a0c4d2c2648638794a02d890293a2805d">SVF::PCG::mayHappenInParallel</a></div><div class="ttdeci">virtual bool mayHappenInParallel(const SVFInstruction *i1, const SVFInstruction *i2) const</div><div class="ttdoc">Interface to query whether two function may happen-in-parallel. </div><div class="ttdef"><b>Definition:</b> <a href="PCG_8cpp_source.html#l00077">PCG.cpp:77</a></div></div>
|
|
710
710
|
<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>
|
|
711
|
-
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a29a14309cfa1d7c4454fb1237704e487"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a29a14309cfa1d7c4454fb1237704e487">SVF::MTASVFGBuilder::handleStoreStore</a></div><div class="ttdeci">void handleStoreStore(const StmtSVFGNode *n1, const StmtSVFGNode *n2, PointerAnalysis *pta)</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#
|
|
711
|
+
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a29a14309cfa1d7c4454fb1237704e487"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a29a14309cfa1d7c4454fb1237704e487">SVF::MTASVFGBuilder::handleStoreStore</a></div><div class="ttdeci">void handleStoreStore(const StmtSVFGNode *n1, const StmtSVFGNode *n2, PointerAnalysis *pta)</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#l00518">FSMPTA.cpp:518</a></div></div>
|
|
712
712
|
<div class="ttc" id="classSVF_1_1Options_html_af2f66307e1d51947676f622c98ef0762"><div class="ttname"><a href="classSVF_1_1Options.html#af2f66307e1d51947676f622c98ef0762">SVF::Options::UsePCG</a></div><div class="ttdeci">static const llvm::cl::opt< bool > UsePCG</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00166">Options.h:166</a></div></div>
|
|
713
713
|
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a1c0de33bba2f05f14140d872c345ab38"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a1c0de33bba2f05f14140d872c345ab38">SVF::MTASVFGBuilder::edge2pts</a></div><div class="ttdeci">Map< NodeIDPair, PointsTo > edge2pts</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8h_source.html#l00174">FSMPTA.h:174</a></div></div>
|
|
714
714
|
<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>
|
|
715
|
-
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a82b52f8e70f51353cbd7476a509ff523"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a82b52f8e70f51353cbd7476a509ff523">SVF::MTASVFGBuilder::handleStoreLoadNonSparse</a></div><div class="ttdeci">void handleStoreLoadNonSparse(const StmtSVFGNode *n1, const StmtSVFGNode *n2, PointerAnalysis *pta)</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#
|
|
715
|
+
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a82b52f8e70f51353cbd7476a509ff523"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a82b52f8e70f51353cbd7476a509ff523">SVF::MTASVFGBuilder::handleStoreLoadNonSparse</a></div><div class="ttdeci">void handleStoreLoadNonSparse(const StmtSVFGNode *n1, const StmtSVFGNode *n2, PointerAnalysis *pta)</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#l00465">FSMPTA.cpp:465</a></div></div>
|
|
716
716
|
<div class="ttc" id="classSVF_1_1Options_html_a6bec8aed8673d10d65cc3df9fad3383b"><div class="ttname"><a href="classSVF_1_1Options.html#a6bec8aed8673d10d65cc3df9fad3383b">SVF::Options::ReadPrecisionTDEdge</a></div><div class="ttdeci">static const llvm::cl::opt< bool > ReadPrecisionTDEdge</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00168">Options.h:168</a></div></div>
|
|
717
717
|
<div class="ttc" id="SVFType_8h_html_a173ce1b9b505fdadf5613b663749d3b0"><div class="ttname"><a href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a></div><div class="ttdeci">#define DBOUT(TYPE, X)</div><div class="ttdoc">LLVM debug macros, define type of your DEBUG model of each pass. </div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00419">SVFType.h:419</a></div></div>
|
|
718
718
|
</div><!-- fragment -->
|
|
@@ -742,8 +742,8 @@ Additional Inherited Members</h2></td></tr>
|
|
|
742
742
|
</table>
|
|
743
743
|
</div><div class="memdoc">
|
|
744
744
|
|
|
745
|
-
<p class="definition">Definition at line <a class="el" href="FSMPTA_8cpp_source.html#
|
|
746
|
-
<div class="fragment"><div class="line"><a name="
|
|
745
|
+
<p class="definition">Definition at line <a class="el" href="FSMPTA_8cpp_source.html#l00344">344</a> of file <a class="el" href="FSMPTA_8cpp_source.html">FSMPTA.cpp</a>.</p>
|
|
746
|
+
<div class="fragment"><div class="line"><a name="l00345"></a><span class="lineno"> 345</span> {</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MTASVFGBuilder.html#a26f850fc0fe434f1972c151d7c3ad9fd">prevset</a>.find(n)!=<a class="code" href="classSVF_1_1MTASVFGBuilder.html#a26f850fc0fe434f1972c151d7c3ad9fd">prevset</a>.end())</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a26f850fc0fe434f1972c151d7c3ad9fd">prevset</a>[n];</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span> </div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a17da7e5da237c23873e17250d9746939">SVFGNodeIDSet</a> <a class="code" href="cJSON_8cpp.html#a8f132000c2609a05d1bfd83e25db97d5">prev</a>;</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a467e7b445394acb735b1b24ce39e966a">SVFGNodeSet</a> worklist;</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a467e7b445394acb735b1b24ce39e966a">SVFGNodeSet</a> visited;</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>  <span class="keywordflow">for</span> (SVFGEdge::SVFGEdgeSetTy::iterator iter = n-><a class="code" href="classSVF_1_1GenericNode.html#ae5b113921530eee6afe58a65d8e5b3a7">InEdgeBegin</a>(); iter != n-><a class="code" href="classSVF_1_1GenericNode.html#afe6a7b286d9af4992f41b59612fd2900">InEdgeEnd</a>(); ++iter)</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  {</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = *iter;</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <span class="keywordflow">if</span> (edge-><a class="code" href="classSVF_1_1VFGEdge.html#aa8f30d093d4950724a6688707326b57b">isIndirectVFGEdge</a>())</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  {</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  worklist.insert(edge-><a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>());</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  }</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> </div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  <span class="keywordflow">while</span> (!worklist.empty())</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="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node = *worklist.begin();</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  worklist.erase(worklist.begin());</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  visited.insert(node);</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  <span class="keywordflow">if</span> (SVFUtil::isa<StoreSVFGNode>(node))</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  prev.set(node-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  <span class="keywordflow">else</span></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>  <span class="keywordflow">for</span> (SVFGEdge::SVFGEdgeSetTy::iterator iter = node-><a class="code" href="classSVF_1_1GenericNode.html#ae5b113921530eee6afe58a65d8e5b3a7">InEdgeBegin</a>(); iter != node-><a class="code" href="classSVF_1_1GenericNode.html#afe6a7b286d9af4992f41b59612fd2900">InEdgeEnd</a>(); ++iter)</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>  <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = *iter;</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  <span class="keywordflow">if</span> (edge-><a class="code" href="classSVF_1_1VFGEdge.html#aa8f30d093d4950724a6688707326b57b">isIndirectVFGEdge</a>() && visited.find(edge-><a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>())==visited.end())</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  worklist.insert(edge-><a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>());</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  }</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  }</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  }</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a26f850fc0fe434f1972c151d7c3ad9fd">prevset</a>[<a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>]=<a class="code" href="cJSON_8cpp.html#a8f132000c2609a05d1bfd83e25db97d5">prev</a>;</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  <span class="keywordflow">return</span> <a class="code" href="cJSON_8cpp.html#a8f132000c2609a05d1bfd83e25db97d5">prev</a>;</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span> }</div><div class="ttc" id="classSVF_1_1VFGEdge_html_aa8f30d093d4950724a6688707326b57b"><div class="ttname"><a href="classSVF_1_1VFGEdge.html#aa8f30d093d4950724a6688707326b57b">SVF::VFGEdge::isIndirectVFGEdge</a></div><div class="ttdeci">bool isIndirectVFGEdge() const</div><div class="ttdef"><b>Definition:</b> <a href="VFGEdge_8h_source.html#l00080">VFGEdge.h:80</a></div></div>
|
|
747
747
|
<div class="ttc" id="classSVF_1_1GenericNode_html_ae5b113921530eee6afe58a65d8e5b3a7"><div class="ttname"><a href="classSVF_1_1GenericNode.html#ae5b113921530eee6afe58a65d8e5b3a7">SVF::GenericNode::InEdgeBegin</a></div><div class="ttdeci">iterator InEdgeBegin()</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00216">GenericGraph.h:216</a></div></div>
|
|
748
748
|
<div class="ttc" id="classSVF_1_1VFGEdge_html"><div class="ttname"><a href="classSVF_1_1VFGEdge.html">SVF::VFGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGEdge_8h_source.html#l00044">VFGEdge.h:44</a></div></div>
|
|
749
749
|
<div class="ttc" id="cJSON_8cpp_html_ab6e2ea6dc7bd57d1483413449998230a"><div class="ttname"><a href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a></div><div class="ttdeci">cJSON * n</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l02558">cJSON.cpp:2558</a></div></div>
|
|
@@ -782,8 +782,8 @@ Additional Inherited Members</h2></td></tr>
|
|
|
782
782
|
</table>
|
|
783
783
|
</div><div class="memdoc">
|
|
784
784
|
|
|
785
|
-
<p class="definition">Definition at line <a class="el" href="FSMPTA_8cpp_source.html#
|
|
786
|
-
<div class="fragment"><div class="line"><a name="
|
|
785
|
+
<p class="definition">Definition at line <a class="el" href="FSMPTA_8cpp_source.html#l00382">382</a> of file <a class="el" href="FSMPTA_8cpp_source.html">FSMPTA.cpp</a>.</p>
|
|
786
|
+
<div class="fragment"><div class="line"><a name="l00383"></a><span class="lineno"> 383</span> {</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MTASVFGBuilder.html#ac909a7aa7de6cda8d2a89a9c7d2f4262">succset</a>.find(n)!=<a class="code" href="classSVF_1_1MTASVFGBuilder.html#ac909a7aa7de6cda8d2a89a9c7d2f4262">succset</a>.end())</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#ac909a7aa7de6cda8d2a89a9c7d2f4262">succset</a>[n];</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>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a17da7e5da237c23873e17250d9746939">SVFGNodeIDSet</a> succ;</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a467e7b445394acb735b1b24ce39e966a">SVFGNodeSet</a> worklist;</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a467e7b445394acb735b1b24ce39e966a">SVFGNodeSet</a> visited;</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span> </div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  <span class="keywordflow">for</span> (SVFGEdge::SVFGEdgeSetTy::iterator iter = n-><a class="code" href="classSVF_1_1GenericNode.html#aa4f103330118c8976bf95e4bf53416eb">OutEdgeBegin</a>(); iter != n-><a class="code" href="classSVF_1_1GenericNode.html#a19a3366fd8a58290d0c740c46c3dcb3d">OutEdgeEnd</a>(); ++iter)</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>  <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = *iter;</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  <span class="keywordflow">if</span> (edge-><a class="code" href="classSVF_1_1VFGEdge.html#aa8f30d093d4950724a6688707326b57b">isIndirectVFGEdge</a>())</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  {</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  worklist.insert(edge-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>());</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  }</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> </div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  <span class="keywordflow">while</span> (!worklist.empty())</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="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node = *worklist.begin();</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  worklist.erase(worklist.begin());</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  visited.insert(node);</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  <span class="keywordflow">if</span> (SVFUtil::isa<StoreSVFGNode, LoadSVFGNode>(node))</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  succ.set(node-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  {</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>  <span class="keywordflow">for</span> (SVFGEdge::SVFGEdgeSetTy::iterator iter = node-><a class="code" href="classSVF_1_1GenericNode.html#aa4f103330118c8976bf95e4bf53416eb">OutEdgeBegin</a>(); iter != node-><a class="code" href="classSVF_1_1GenericNode.html#a19a3366fd8a58290d0c740c46c3dcb3d">OutEdgeEnd</a>(); ++iter)</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  {</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = *iter;</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  <span class="keywordflow">if</span> (edge-><a class="code" href="classSVF_1_1VFGEdge.html#aa8f30d093d4950724a6688707326b57b">isIndirectVFGEdge</a>() && visited.find(edge-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()) == visited.end())</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  worklist.insert(edge-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>());</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  }</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  }</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  }</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#ac909a7aa7de6cda8d2a89a9c7d2f4262">succset</a>[<a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>]=succ;</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  <span class="keywordflow">return</span> succ;</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span> }</div><div class="ttc" id="classSVF_1_1VFGEdge_html_aa8f30d093d4950724a6688707326b57b"><div class="ttname"><a href="classSVF_1_1VFGEdge.html#aa8f30d093d4950724a6688707326b57b">SVF::VFGEdge::isIndirectVFGEdge</a></div><div class="ttdeci">bool isIndirectVFGEdge() const</div><div class="ttdef"><b>Definition:</b> <a href="VFGEdge_8h_source.html#l00080">VFGEdge.h:80</a></div></div>
|
|
787
787
|
<div class="ttc" id="classSVF_1_1GenericNode_html_aa4f103330118c8976bf95e4bf53416eb"><div class="ttname"><a href="classSVF_1_1GenericNode.html#aa4f103330118c8976bf95e4bf53416eb">SVF::GenericNode::OutEdgeBegin</a></div><div class="ttdeci">iterator OutEdgeBegin()</div><div class="ttdoc">iterators </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00208">GenericGraph.h:208</a></div></div>
|
|
788
788
|
<div class="ttc" id="classSVF_1_1VFGEdge_html"><div class="ttname"><a href="classSVF_1_1VFGEdge.html">SVF::VFGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGEdge_8h_source.html#l00044">VFGEdge.h:44</a></div></div>
|
|
789
789
|
<div class="ttc" id="cJSON_8cpp_html_ab6e2ea6dc7bd57d1483413449998230a"><div class="ttname"><a href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a></div><div class="ttdeci">cJSON * n</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l02558">cJSON.cpp:2558</a></div></div>
|
|
@@ -831,8 +831,8 @@ Additional Inherited Members</h2></td></tr>
|
|
|
831
831
|
</table>
|
|
832
832
|
</div><div class="memdoc">
|
|
833
833
|
|
|
834
|
-
<p class="definition">Definition at line <a class="el" href="FSMPTA_8cpp_source.html#
|
|
835
|
-
<div class="fragment"><div class="line"><a name="
|
|
834
|
+
<p class="definition">Definition at line <a class="el" href="FSMPTA_8cpp_source.html#l00420">420</a> of file <a class="el" href="FSMPTA_8cpp_source.html">FSMPTA.cpp</a>.</p>
|
|
835
|
+
<div class="fragment"><div class="line"><a name="l00421"></a><span class="lineno"> 421</span> {</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span> </div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a17da7e5da237c23873e17250d9746939">SVFGNodeIDSet</a> succ;</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a467e7b445394acb735b1b24ce39e966a">SVFGNodeSet</a> worklist;</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a467e7b445394acb735b1b24ce39e966a">SVFGNodeSet</a> visited;</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span> </div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  <span class="keywordflow">for</span> (SVFGEdge::SVFGEdgeSetTy::iterator iter = n-><a class="code" href="classSVF_1_1GenericNode.html#aa4f103330118c8976bf95e4bf53416eb">OutEdgeBegin</a>(); iter != n-><a class="code" href="classSVF_1_1GenericNode.html#a19a3366fd8a58290d0c740c46c3dcb3d">OutEdgeEnd</a>(); ++iter)</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>  <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = *iter;</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  <span class="keywordflow">if</span> (edge-><a class="code" href="classSVF_1_1VFGEdge.html#aa8f30d093d4950724a6688707326b57b">isIndirectVFGEdge</a>())</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  {</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  <a class="code" href="classSVF_1_1IndirectSVFGEdge.html">IndirectSVFGEdge</a>* e = SVFUtil::cast<IndirectSVFGEdge>(edge);</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> pts = e-><a class="code" href="classSVF_1_1IndirectSVFGEdge.html#a30aca718d25924f1babdf348bb0ace71">getPointsTo</a>();</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  <span class="keywordflow">if</span>(pts.test(o))</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  worklist.insert(edge-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>());</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  }</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  }</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span> </div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  <span class="keywordflow">while</span> (!worklist.empty())</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>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node = *worklist.begin();</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  worklist.erase(worklist.begin());</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  visited.insert(node);</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  <span class="keywordflow">if</span> (SVFUtil::isa<StoreSVFGNode, LoadSVFGNode>(node))</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  succ.set(node-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  {</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  <span class="keywordflow">for</span> (SVFGEdge::SVFGEdgeSetTy::iterator iter = node-><a class="code" href="classSVF_1_1GenericNode.html#aa4f103330118c8976bf95e4bf53416eb">OutEdgeBegin</a>(); iter != node-><a class="code" href="classSVF_1_1GenericNode.html#a19a3366fd8a58290d0c740c46c3dcb3d">OutEdgeEnd</a>(); ++iter)</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  {</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = *iter;</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  <span class="keywordflow">if</span> (edge-><a class="code" href="classSVF_1_1VFGEdge.html#aa8f30d093d4950724a6688707326b57b">isIndirectVFGEdge</a>() && visited.find(edge-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()) == visited.end())</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  {</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  <a class="code" href="classSVF_1_1IndirectSVFGEdge.html">IndirectSVFGEdge</a>* e = SVFUtil::cast<IndirectSVFGEdge>(edge);</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> pts = e-><a class="code" href="classSVF_1_1IndirectSVFGEdge.html#a30aca718d25924f1babdf348bb0ace71">getPointsTo</a>();</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  <span class="keywordflow">if</span>(pts.test(o))</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  worklist.insert(edge-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>());</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>  }</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  }</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  }</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>  <span class="keywordflow">return</span> succ;</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span> }</div><div class="ttc" id="classSVF_1_1VFGEdge_html_aa8f30d093d4950724a6688707326b57b"><div class="ttname"><a href="classSVF_1_1VFGEdge.html#aa8f30d093d4950724a6688707326b57b">SVF::VFGEdge::isIndirectVFGEdge</a></div><div class="ttdeci">bool isIndirectVFGEdge() const</div><div class="ttdef"><b>Definition:</b> <a href="VFGEdge_8h_source.html#l00080">VFGEdge.h:80</a></div></div>
|
|
836
836
|
<div class="ttc" id="classSVF_1_1GenericNode_html_aa4f103330118c8976bf95e4bf53416eb"><div class="ttname"><a href="classSVF_1_1GenericNode.html#aa4f103330118c8976bf95e4bf53416eb">SVF::GenericNode::OutEdgeBegin</a></div><div class="ttdeci">iterator OutEdgeBegin()</div><div class="ttdoc">iterators </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00208">GenericGraph.h:208</a></div></div>
|
|
837
837
|
<div class="ttc" id="classSVF_1_1VFGEdge_html"><div class="ttname"><a href="classSVF_1_1VFGEdge.html">SVF::VFGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGEdge_8h_source.html#l00044">VFGEdge.h:44</a></div></div>
|
|
838
838
|
<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#l00095">GenericGraph.h:95</a></div></div>
|
|
@@ -890,14 +890,14 @@ Additional Inherited Members</h2></td></tr>
|
|
|
890
890
|
<p>Alias</p>
|
|
891
891
|
<p>Lock todo: we only consider all cxtstmt of one instruction in one lock span, otherwise we think this instruction is not locked This constrait is too strong. All cxt lock under different cxt cannot be identified. </p>
|
|
892
892
|
|
|
893
|
-
<p class="definition">Definition at line <a class="el" href="FSMPTA_8cpp_source.html#
|
|
894
|
-
<div class="fragment"><div class="line"><a name="
|
|
893
|
+
<p class="definition">Definition at line <a class="el" href="FSMPTA_8cpp_source.html#l00484">484</a> of file <a class="el" href="FSMPTA_8cpp_source.html">FSMPTA.cpp</a>.</p>
|
|
894
|
+
<div class="fragment"><div class="line"><a name="l00485"></a><span class="lineno"> 485</span> {</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* i1 = n1-><a class="code" href="classSVF_1_1StmtVFGNode.html#a3fb14833d95bb3550f904b5e236a5364">getInst</a>();</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* i2 = n2-><a class="code" href="classSVF_1_1StmtVFGNode.html#a3fb14833d95bb3550f904b5e236a5364">getInst</a>();</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MTASVFGBuilder.html#a21b3ee74434730fc792624d2eae2b168">ADDEDGE_NOMHP</a>!=<a class="code" href="classSVF_1_1Options.html#af129d2ff94af3f6830c0678cb4b72371">Options::AddModelFlag</a> && !<a class="code" href="classSVF_1_1MTASVFGBuilder.html#a73024bf30aa3ec79e5953a7ea1f8feb7">mhp</a>-><a class="code" href="classSVF_1_1MHP.html#a15b624924254f5362a3d02fa539a24fb">mayHappenInParallel</a>(i1, i2))</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MTASVFGBuilder.html#a9b81d7b2c238d443acadc748c6bd018d">ADDEDGE_NOALIAS</a>!=<a class="code" href="classSVF_1_1Options.html#af129d2ff94af3f6830c0678cb4b72371">Options::AddModelFlag</a> && !pta-><a class="code" href="classSVF_1_1PointerAnalysis.html#ae1323233941cdc9b99332e4b954a2217">alias</a>(n1-><a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>(), n2-><a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>()))</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span> </div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span> </div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> pts = pta-><a class="code" href="classSVF_1_1PointerAnalysis.html#a4dfb43679e9fa794ebad99b6584c32ec">getPts</a>(n1-><a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>());</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  pts &= pta-><a class="code" href="classSVF_1_1PointerAnalysis.html#a4dfb43679e9fa794ebad99b6584c32ec">getPts</a>(n2-><a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>());</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span> </div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span> </div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span> </div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MTASVFGBuilder.html#a82634524fba304c012980421b35ed8bd">ADDEDGE_NOLOCK</a>!=<a class="code" href="classSVF_1_1Options.html#af129d2ff94af3f6830c0678cb4b72371">Options::AddModelFlag</a> && <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a00bf5aaf3095bb271f2cbd3c35749ce2">lockana</a>-><a class="code" href="classSVF_1_1LockAnalysis.html#a213bd0dfeba620498dabcfa4fa3a018c">isProtectedByCommonLock</a>(i1, i2))</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  {</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MTASVFGBuilder.html#ac8339229ade604f4205b111bfc99f23f">isTailofSpan</a>(n1) && <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a5c32c2f5038aab15ec2da50c7c99b405">isHeadofSpan</a>(n2))</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a2e654f80c3680cd434fd04932a309a2d">addTDEdges</a>(n1-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), n2-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), pts);</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>  <span class="keywordflow">else</span></div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  {</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a2e654f80c3680cd434fd04932a309a2d">addTDEdges</a>(n1-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), n2-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), pts);</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  }</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span> }</div><div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a73024bf30aa3ec79e5953a7ea1f8feb7"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a73024bf30aa3ec79e5953a7ea1f8feb7">SVF::MTASVFGBuilder::mhp</a></div><div class="ttdeci">MHP * mhp</div><div class="ttdoc">MHP class. </div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8h_source.html#l00170">FSMPTA.h:170</a></div></div>
|
|
895
895
|
<div class="ttc" id="classSVF_1_1SVFInstruction_html"><div class="ttname"><a href="classSVF_1_1SVFInstruction.html">SVF::SVFInstruction</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00570">SVFValue.h:570</a></div></div>
|
|
896
896
|
<div class="ttc" id="classSVF_1_1LockAnalysis_html_a213bd0dfeba620498dabcfa4fa3a018c"><div class="ttname"><a href="classSVF_1_1LockAnalysis.html#a213bd0dfeba620498dabcfa4fa3a018c">SVF::LockAnalysis::isProtectedByCommonLock</a></div><div class="ttdeci">bool isProtectedByCommonLock(const SVFInstruction *i1, const SVFInstruction *i2)</div><div class="ttdef"><b>Definition:</b> <a href="LockAnalysis_8cpp_source.html#l00556">LockAnalysis.cpp:556</a></div></div>
|
|
897
897
|
<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>
|
|
898
898
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a4dfb43679e9fa794ebad99b6584c32ec"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a4dfb43679e9fa794ebad99b6584c32ec">SVF::PointerAnalysis::getPts</a></div><div class="ttdeci">virtual const PointsTo & getPts(NodeID ptr)=0</div><div class="ttdoc">Get points-to targets of a pointer. It needs to be implemented in child class. </div></div>
|
|
899
899
|
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a21b3ee74434730fc792624d2eae2b168"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a21b3ee74434730fc792624d2eae2b168">SVF::MTASVFGBuilder::ADDEDGE_NOMHP</a></div><div class="ttdeci">static const u32_t ADDEDGE_NOMHP</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8h_source.html#l00190">FSMPTA.h:190</a></div></div>
|
|
900
|
-
<div class="ttc" id="classSVF_1_1MHP_html_a15b624924254f5362a3d02fa539a24fb"><div class="ttname"><a href="classSVF_1_1MHP.html#a15b624924254f5362a3d02fa539a24fb">SVF::MHP::mayHappenInParallel</a></div><div class="ttdeci">virtual bool mayHappenInParallel(const SVFInstruction *i1, const SVFInstruction *i2)</div><div class="ttdoc">Interface to query whether two instructions may happen-in-parallel. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8cpp_source.html#
|
|
900
|
+
<div class="ttc" id="classSVF_1_1MHP_html_a15b624924254f5362a3d02fa539a24fb"><div class="ttname"><a href="classSVF_1_1MHP.html#a15b624924254f5362a3d02fa539a24fb">SVF::MHP::mayHappenInParallel</a></div><div class="ttdeci">virtual bool mayHappenInParallel(const SVFInstruction *i1, const SVFInstruction *i2)</div><div class="ttdoc">Interface to query whether two instructions may happen-in-parallel. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8cpp_source.html#l00603">MHP.cpp:603</a></div></div>
|
|
901
901
|
<div class="ttc" id="classSVF_1_1Options_html_af129d2ff94af3f6830c0678cb4b72371"><div class="ttname"><a href="classSVF_1_1Options.html#af129d2ff94af3f6830c0678cb4b72371">SVF::Options::AddModelFlag</a></div><div class="ttdeci">static const llvm::cl::opt< u32_t > AddModelFlag</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00169">Options.h:169</a></div></div>
|
|
902
902
|
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a2e654f80c3680cd434fd04932a309a2d"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a2e654f80c3680cd434fd04932a309a2d">SVF::MTASVFGBuilder::addTDEdges</a></div><div class="ttdeci">SVFGEdge * addTDEdges(NodeID srcId, NodeID dstId, PointsTo &pts)</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#l00125">FSMPTA.cpp:125</a></div></div>
|
|
903
903
|
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a9b81d7b2c238d443acadc748c6bd018d"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a9b81d7b2c238d443acadc748c6bd018d">SVF::MTASVFGBuilder::ADDEDGE_NOALIAS</a></div><div class="ttdeci">static const u32_t ADDEDGE_NOALIAS</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8h_source.html#l00191">FSMPTA.h:191</a></div></div>
|
|
@@ -905,7 +905,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
905
905
|
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a82634524fba304c012980421b35ed8bd"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a82634524fba304c012980421b35ed8bd">SVF::MTASVFGBuilder::ADDEDGE_NOLOCK</a></div><div class="ttdeci">static const u32_t ADDEDGE_NOLOCK</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8h_source.html#l00192">FSMPTA.h:192</a></div></div>
|
|
906
906
|
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a00bf5aaf3095bb271f2cbd3c35749ce2"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a00bf5aaf3095bb271f2cbd3c35749ce2">SVF::MTASVFGBuilder::lockana</a></div><div class="ttdeci">LockAnalysis * lockana</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8h_source.html#l00171">FSMPTA.h:171</a></div></div>
|
|
907
907
|
<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>
|
|
908
|
-
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_ac8339229ade604f4205b111bfc99f23f"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#ac8339229ade604f4205b111bfc99f23f">SVF::MTASVFGBuilder::isTailofSpan</a></div><div class="ttdeci">bool isTailofSpan(const StmtSVFGNode *n, LockAnalysis::LockSpan lspan)</div><div class="ttdoc">whether is a last write in the lock span. </div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#
|
|
908
|
+
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_ac8339229ade604f4205b111bfc99f23f"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#ac8339229ade604f4205b111bfc99f23f">SVF::MTASVFGBuilder::isTailofSpan</a></div><div class="ttdeci">bool isTailofSpan(const StmtSVFGNode *n, LockAnalysis::LockSpan lspan)</div><div class="ttdoc">whether is a last write in the lock span. </div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#l00285">FSMPTA.cpp:285</a></div></div>
|
|
909
909
|
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a5c32c2f5038aab15ec2da50c7c99b405"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a5c32c2f5038aab15ec2da50c7c99b405">SVF::MTASVFGBuilder::isHeadofSpan</a></div><div class="ttdeci">bool isHeadofSpan(const StmtSVFGNode *n, LockAnalysis::LockSpan lspan)</div><div class="ttdoc">whether is a first write in the lock span. </div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#l00201">FSMPTA.cpp:201</a></div></div>
|
|
910
910
|
<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#l00171">GenericGraph.h:171</a></div></div>
|
|
911
911
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_ae1323233941cdc9b99332e4b954a2217"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#ae1323233941cdc9b99332e4b954a2217">SVF::PointerAnalysis::alias</a></div><div class="ttdeci">virtual AliasResult alias(const SVFValue *V1, const SVFValue *V2)=0</div><div class="ttdoc">Interface exposed to users of our pointer analysis, given Value infos. </div></div>
|
|
@@ -953,8 +953,8 @@ Additional Inherited Members</h2></td></tr>
|
|
|
953
953
|
</table>
|
|
954
954
|
</div><div class="memdoc">
|
|
955
955
|
|
|
956
|
-
<p class="definition">Definition at line <a class="el" href="FSMPTA_8cpp_source.html#
|
|
957
|
-
<div class="fragment"><div class="line"><a name="
|
|
956
|
+
<p class="definition">Definition at line <a class="el" href="FSMPTA_8cpp_source.html#l00465">465</a> of file <a class="el" href="FSMPTA_8cpp_source.html">FSMPTA.cpp</a>.</p>
|
|
957
|
+
<div class="fragment"><div class="line"><a name="l00466"></a><span class="lineno"> 466</span> {</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> pts = pta-><a class="code" href="classSVF_1_1PointerAnalysis.html#a4dfb43679e9fa794ebad99b6584c32ec">getPts</a>(n1-><a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>());</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  pts &= pta-><a class="code" href="classSVF_1_1PointerAnalysis.html#a4dfb43679e9fa794ebad99b6584c32ec">getPts</a>(n2-><a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>());</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span> </div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a2e654f80c3680cd434fd04932a309a2d">addTDEdges</a>(n1-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), n2-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), pts);</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span> }</div><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>
|
|
958
958
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a4dfb43679e9fa794ebad99b6584c32ec"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a4dfb43679e9fa794ebad99b6584c32ec">SVF::PointerAnalysis::getPts</a></div><div class="ttdeci">virtual const PointsTo & getPts(NodeID ptr)=0</div><div class="ttdoc">Get points-to targets of a pointer. It needs to be implemented in child class. </div></div>
|
|
959
959
|
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a2e654f80c3680cd434fd04932a309a2d"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a2e654f80c3680cd434fd04932a309a2d">SVF::MTASVFGBuilder::addTDEdges</a></div><div class="ttdeci">SVFGEdge * addTDEdges(NodeID srcId, NodeID dstId, PointsTo &pts)</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#l00125">FSMPTA.cpp:125</a></div></div>
|
|
960
960
|
<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>
|
|
@@ -1003,8 +1003,8 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1003
1003
|
</table>
|
|
1004
1004
|
</div><div class="memdoc">
|
|
1005
1005
|
|
|
1006
|
-
<p class="definition">Definition at line <a class="el" href="FSMPTA_8cpp_source.html#
|
|
1007
|
-
<div class="fragment"><div class="line"><a name="
|
|
1006
|
+
<p class="definition">Definition at line <a class="el" href="FSMPTA_8cpp_source.html#l00547">547</a> of file <a class="el" href="FSMPTA_8cpp_source.html">FSMPTA.cpp</a>.</p>
|
|
1007
|
+
<div class="fragment"><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>  <span class="keywordflow">if</span> (!pta-><a class="code" href="classSVF_1_1PointerAnalysis.html#ae1323233941cdc9b99332e4b954a2217">alias</a>(n1-><a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>(), n2-><a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>()))</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span> </div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span> <span class="comment">// PointsTo pts = pta->getPts(n1->getPAGDstNodeID());</span></div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span> <span class="comment">// pts &= pta->getPts(n2->getPAGSrcNodeID());</span></div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span> <span class="comment">//</span></div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span> <span class="comment">// const SVFInstruction* i1 = n1->getInst();</span></div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span> <span class="comment">// const SVFInstruction* i2 = n2->getInst();</span></div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span> <span class="comment">//</span></div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span> <span class="comment">// NodeBS comlocks1;</span></div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span> <span class="comment">// NodeBS comlocks2;</span></div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span> <span class="comment">// lockana->getCommonLocks(i1, i2, comlocks1, comlocks2);</span></div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span> <span class="comment">//</span></div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span> <span class="comment">// outs()<<comlocks1.count() << " "<< comlocks2.count()<<"\n";</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> </div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span> <span class="comment">// if(comlocks1.count() && comlocks2.count()) {</span></div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span> <span class="comment">// bool n1istail = false;</span></div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span> <span class="comment">// for (NodeBS::iterator it1 = comlocks1.begin(), ie1 = comlocks1.end(); it1 != ie1; ++it1) {</span></div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span> <span class="comment">// LockAnalysis::LockSpan lspan1 = lockana->getSpanfromCxtLock(*it1);</span></div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span> <span class="comment">// /// exist lock span, n1 is tail;</span></div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span> <span class="comment">// if (isTailofSpan(n1, lspan1))</span></div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span> <span class="comment">// n1istail = true;</span></div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span> <span class="comment">// }</span></div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span> <span class="comment">//</span></div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span> <span class="comment">// bool n2ishead = false;</span></div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span> <span class="comment">// for (NodeBS::iterator it2 = comlocks2.begin(), ie2 = comlocks2.end(); it2 != ie2; ++it2) {</span></div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span> <span class="comment">// LockAnalysis::LockSpan lspan2 = lockana->getSpanfromCxtLock(*it2);</span></div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span> <span class="comment">// /// exist lock span, n2 is head;</span></div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span> <span class="comment">// if (isHeadofSpan(n2, lspan2))</span></div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span> <span class="comment">// n2ishead = true;</span></div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span> <span class="comment">// }</span></div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span> <span class="comment">//</span></div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span> <span class="comment">// if (n1istail && n2ishead)</span></div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span> <span class="comment">// addTDEdges(n1->getId(), n2->getId(), pts);</span></div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span> <span class="comment">// } else {</span></div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span> <span class="comment">// addTDEdges(n1->getId(), n2->getId(), pts);</span></div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span> <span class="comment">// }</span></div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span> }</div><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>
|
|
1008
1008
|
<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>
|
|
1009
1009
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_ae1323233941cdc9b99332e4b954a2217"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#ae1323233941cdc9b99332e4b954a2217">SVF::PointerAnalysis::alias</a></div><div class="ttdeci">virtual AliasResult alias(const SVFValue *V1, const SVFValue *V2)=0</div><div class="ttdoc">Interface exposed to users of our pointer analysis, given Value infos. </div></div>
|
|
1010
1010
|
</div><!-- fragment -->
|
|
@@ -1053,21 +1053,21 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1053
1053
|
<p>Alias</p>
|
|
1054
1054
|
<p>Lock </p>
|
|
1055
1055
|
|
|
1056
|
-
<p class="definition">Definition at line <a class="el" href="FSMPTA_8cpp_source.html#
|
|
1057
|
-
<div class="fragment"><div class="line"><a name="
|
|
1056
|
+
<p class="definition">Definition at line <a class="el" href="FSMPTA_8cpp_source.html#l00518">518</a> of file <a class="el" href="FSMPTA_8cpp_source.html">FSMPTA.cpp</a>.</p>
|
|
1057
|
+
<div class="fragment"><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="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* i1 = n1-><a class="code" href="classSVF_1_1StmtVFGNode.html#a3fb14833d95bb3550f904b5e236a5364">getInst</a>();</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* i2 = n2-><a class="code" href="classSVF_1_1StmtVFGNode.html#a3fb14833d95bb3550f904b5e236a5364">getInst</a>();</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MTASVFGBuilder.html#a21b3ee74434730fc792624d2eae2b168">ADDEDGE_NOMHP</a>!=<a class="code" href="classSVF_1_1Options.html#af129d2ff94af3f6830c0678cb4b72371">Options::AddModelFlag</a> && !<a class="code" href="classSVF_1_1MTASVFGBuilder.html#a73024bf30aa3ec79e5953a7ea1f8feb7">mhp</a>-><a class="code" href="classSVF_1_1MHP.html#a15b624924254f5362a3d02fa539a24fb">mayHappenInParallel</a>(i1, i2))</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MTASVFGBuilder.html#a9b81d7b2c238d443acadc748c6bd018d">ADDEDGE_NOALIAS</a>!=<a class="code" href="classSVF_1_1Options.html#af129d2ff94af3f6830c0678cb4b72371">Options::AddModelFlag</a> && !pta-><a class="code" href="classSVF_1_1PointerAnalysis.html#ae1323233941cdc9b99332e4b954a2217">alias</a>(n1-><a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>(), n2-><a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>()))</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span> </div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> pts = pta-><a class="code" href="classSVF_1_1PointerAnalysis.html#a4dfb43679e9fa794ebad99b6584c32ec">getPts</a>(n1-><a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>());</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  pts &= pta-><a class="code" href="classSVF_1_1PointerAnalysis.html#a4dfb43679e9fa794ebad99b6584c32ec">getPts</a>(n2-><a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>());</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span> </div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MTASVFGBuilder.html#a82634524fba304c012980421b35ed8bd">ADDEDGE_NOLOCK</a>!=<a class="code" href="classSVF_1_1Options.html#af129d2ff94af3f6830c0678cb4b72371">Options::AddModelFlag</a> && <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a00bf5aaf3095bb271f2cbd3c35749ce2">lockana</a>-><a class="code" href="classSVF_1_1LockAnalysis.html#a213bd0dfeba620498dabcfa4fa3a018c">isProtectedByCommonLock</a>(i1, i2))</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  {</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MTASVFGBuilder.html#ac8339229ade604f4205b111bfc99f23f">isTailofSpan</a>(n1) && <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a5c32c2f5038aab15ec2da50c7c99b405">isHeadofSpan</a>(n2))</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a2e654f80c3680cd434fd04932a309a2d">addTDEdges</a>(n1-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), n2-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), pts);</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MTASVFGBuilder.html#ac8339229ade604f4205b111bfc99f23f">isTailofSpan</a>(n2) && <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a5c32c2f5038aab15ec2da50c7c99b405">isHeadofSpan</a>(n1))</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a2e654f80c3680cd434fd04932a309a2d">addTDEdges</a>(n2-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), n1-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), pts);</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  }</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  {</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a2e654f80c3680cd434fd04932a309a2d">addTDEdges</a>(n1-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), n2-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), pts);</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a2e654f80c3680cd434fd04932a309a2d">addTDEdges</a>(n2-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), n1-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), pts);</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  }</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span> }</div><div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a73024bf30aa3ec79e5953a7ea1f8feb7"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a73024bf30aa3ec79e5953a7ea1f8feb7">SVF::MTASVFGBuilder::mhp</a></div><div class="ttdeci">MHP * mhp</div><div class="ttdoc">MHP class. </div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8h_source.html#l00170">FSMPTA.h:170</a></div></div>
|
|
1058
1058
|
<div class="ttc" id="classSVF_1_1SVFInstruction_html"><div class="ttname"><a href="classSVF_1_1SVFInstruction.html">SVF::SVFInstruction</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00570">SVFValue.h:570</a></div></div>
|
|
1059
1059
|
<div class="ttc" id="classSVF_1_1LockAnalysis_html_a213bd0dfeba620498dabcfa4fa3a018c"><div class="ttname"><a href="classSVF_1_1LockAnalysis.html#a213bd0dfeba620498dabcfa4fa3a018c">SVF::LockAnalysis::isProtectedByCommonLock</a></div><div class="ttdeci">bool isProtectedByCommonLock(const SVFInstruction *i1, const SVFInstruction *i2)</div><div class="ttdef"><b>Definition:</b> <a href="LockAnalysis_8cpp_source.html#l00556">LockAnalysis.cpp:556</a></div></div>
|
|
1060
1060
|
<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>
|
|
1061
1061
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a4dfb43679e9fa794ebad99b6584c32ec"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a4dfb43679e9fa794ebad99b6584c32ec">SVF::PointerAnalysis::getPts</a></div><div class="ttdeci">virtual const PointsTo & getPts(NodeID ptr)=0</div><div class="ttdoc">Get points-to targets of a pointer. It needs to be implemented in child class. </div></div>
|
|
1062
1062
|
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a21b3ee74434730fc792624d2eae2b168"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a21b3ee74434730fc792624d2eae2b168">SVF::MTASVFGBuilder::ADDEDGE_NOMHP</a></div><div class="ttdeci">static const u32_t ADDEDGE_NOMHP</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8h_source.html#l00190">FSMPTA.h:190</a></div></div>
|
|
1063
|
-
<div class="ttc" id="classSVF_1_1MHP_html_a15b624924254f5362a3d02fa539a24fb"><div class="ttname"><a href="classSVF_1_1MHP.html#a15b624924254f5362a3d02fa539a24fb">SVF::MHP::mayHappenInParallel</a></div><div class="ttdeci">virtual bool mayHappenInParallel(const SVFInstruction *i1, const SVFInstruction *i2)</div><div class="ttdoc">Interface to query whether two instructions may happen-in-parallel. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8cpp_source.html#
|
|
1063
|
+
<div class="ttc" id="classSVF_1_1MHP_html_a15b624924254f5362a3d02fa539a24fb"><div class="ttname"><a href="classSVF_1_1MHP.html#a15b624924254f5362a3d02fa539a24fb">SVF::MHP::mayHappenInParallel</a></div><div class="ttdeci">virtual bool mayHappenInParallel(const SVFInstruction *i1, const SVFInstruction *i2)</div><div class="ttdoc">Interface to query whether two instructions may happen-in-parallel. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8cpp_source.html#l00603">MHP.cpp:603</a></div></div>
|
|
1064
1064
|
<div class="ttc" id="classSVF_1_1Options_html_af129d2ff94af3f6830c0678cb4b72371"><div class="ttname"><a href="classSVF_1_1Options.html#af129d2ff94af3f6830c0678cb4b72371">SVF::Options::AddModelFlag</a></div><div class="ttdeci">static const llvm::cl::opt< u32_t > AddModelFlag</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00169">Options.h:169</a></div></div>
|
|
1065
1065
|
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a2e654f80c3680cd434fd04932a309a2d"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a2e654f80c3680cd434fd04932a309a2d">SVF::MTASVFGBuilder::addTDEdges</a></div><div class="ttdeci">SVFGEdge * addTDEdges(NodeID srcId, NodeID dstId, PointsTo &pts)</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#l00125">FSMPTA.cpp:125</a></div></div>
|
|
1066
1066
|
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a9b81d7b2c238d443acadc748c6bd018d"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a9b81d7b2c238d443acadc748c6bd018d">SVF::MTASVFGBuilder::ADDEDGE_NOALIAS</a></div><div class="ttdeci">static const u32_t ADDEDGE_NOALIAS</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8h_source.html#l00191">FSMPTA.h:191</a></div></div>
|
|
1067
1067
|
<div class="ttc" id="classSVF_1_1StmtVFGNode_html_a3fb14833d95bb3550f904b5e236a5364"><div class="ttname"><a href="classSVF_1_1StmtVFGNode.html#a3fb14833d95bb3550f904b5e236a5364">SVF::StmtVFGNode::getInst</a></div><div class="ttdeci">const SVFInstruction * getInst() const</div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00185">VFGNode.h:185</a></div></div>
|
|
1068
1068
|
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a82634524fba304c012980421b35ed8bd"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a82634524fba304c012980421b35ed8bd">SVF::MTASVFGBuilder::ADDEDGE_NOLOCK</a></div><div class="ttdeci">static const u32_t ADDEDGE_NOLOCK</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8h_source.html#l00192">FSMPTA.h:192</a></div></div>
|
|
1069
1069
|
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a00bf5aaf3095bb271f2cbd3c35749ce2"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a00bf5aaf3095bb271f2cbd3c35749ce2">SVF::MTASVFGBuilder::lockana</a></div><div class="ttdeci">LockAnalysis * lockana</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8h_source.html#l00171">FSMPTA.h:171</a></div></div>
|
|
1070
|
-
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_ac8339229ade604f4205b111bfc99f23f"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#ac8339229ade604f4205b111bfc99f23f">SVF::MTASVFGBuilder::isTailofSpan</a></div><div class="ttdeci">bool isTailofSpan(const StmtSVFGNode *n, LockAnalysis::LockSpan lspan)</div><div class="ttdoc">whether is a last write in the lock span. </div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#
|
|
1070
|
+
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_ac8339229ade604f4205b111bfc99f23f"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#ac8339229ade604f4205b111bfc99f23f">SVF::MTASVFGBuilder::isTailofSpan</a></div><div class="ttdeci">bool isTailofSpan(const StmtSVFGNode *n, LockAnalysis::LockSpan lspan)</div><div class="ttdoc">whether is a last write in the lock span. </div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#l00285">FSMPTA.cpp:285</a></div></div>
|
|
1071
1071
|
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a5c32c2f5038aab15ec2da50c7c99b405"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a5c32c2f5038aab15ec2da50c7c99b405">SVF::MTASVFGBuilder::isHeadofSpan</a></div><div class="ttdeci">bool isHeadofSpan(const StmtSVFGNode *n, LockAnalysis::LockSpan lspan)</div><div class="ttdoc">whether is a first write in the lock span. </div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#l00201">FSMPTA.cpp:201</a></div></div>
|
|
1072
1072
|
<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#l00171">GenericGraph.h:171</a></div></div>
|
|
1073
1073
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_ae1323233941cdc9b99332e4b954a2217"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#ae1323233941cdc9b99332e4b954a2217">SVF::PointerAnalysis::alias</a></div><div class="ttdeci">virtual AliasResult alias(const SVFValue *V1, const SVFValue *V2)=0</div><div class="ttdoc">Interface exposed to users of our pointer analysis, given Value infos. </div></div>
|
|
@@ -1115,8 +1115,8 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1115
1115
|
</table>
|
|
1116
1116
|
</div><div class="memdoc">
|
|
1117
1117
|
|
|
1118
|
-
<p class="definition">Definition at line <a class="el" href="FSMPTA_8cpp_source.html#
|
|
1119
|
-
<div class="fragment"><div class="line"><a name="
|
|
1118
|
+
<p class="definition">Definition at line <a class="el" href="FSMPTA_8cpp_source.html#l00475">475</a> of file <a class="el" href="FSMPTA_8cpp_source.html">FSMPTA.cpp</a>.</p>
|
|
1119
|
+
<div class="fragment"><div class="line"><a name="l00476"></a><span class="lineno"> 476</span> {</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> pts = pta-><a class="code" href="classSVF_1_1PointerAnalysis.html#a4dfb43679e9fa794ebad99b6584c32ec">getPts</a>(n1-><a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>());</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>  pts &= pta-><a class="code" href="classSVF_1_1PointerAnalysis.html#a4dfb43679e9fa794ebad99b6584c32ec">getPts</a>(n2-><a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>());</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>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a2e654f80c3680cd434fd04932a309a2d">addTDEdges</a>(n1-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), n2-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), pts);</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a2e654f80c3680cd434fd04932a309a2d">addTDEdges</a>(n2-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), n1-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), pts);</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span> }</div><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>
|
|
1120
1120
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a4dfb43679e9fa794ebad99b6584c32ec"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a4dfb43679e9fa794ebad99b6584c32ec">SVF::PointerAnalysis::getPts</a></div><div class="ttdeci">virtual const PointsTo & getPts(NodeID ptr)=0</div><div class="ttdoc">Get points-to targets of a pointer. It needs to be implemented in child class. </div></div>
|
|
1121
1121
|
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a2e654f80c3680cd434fd04932a309a2d"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a2e654f80c3680cd434fd04932a309a2d">SVF::MTASVFGBuilder::addTDEdges</a></div><div class="ttdeci">SVFGEdge * addTDEdges(NodeID srcId, NodeID dstId, PointsTo &pts)</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#l00125">FSMPTA.cpp:125</a></div></div>
|
|
1122
1122
|
<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#l00171">GenericGraph.h:171</a></div></div>
|
|
@@ -1164,8 +1164,8 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1164
1164
|
</table>
|
|
1165
1165
|
</div><div class="memdoc">
|
|
1166
1166
|
|
|
1167
|
-
<p class="definition">Definition at line <a class="el" href="FSMPTA_8cpp_source.html#
|
|
1168
|
-
<div class="fragment"><div class="line"><a name="
|
|
1167
|
+
<p class="definition">Definition at line <a class="el" href="FSMPTA_8cpp_source.html#l00588">588</a> of file <a class="el" href="FSMPTA_8cpp_source.html">FSMPTA.cpp</a>.</p>
|
|
1168
|
+
<div class="fragment"><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>  <span class="keywordflow">if</span> (!pta-><a class="code" href="classSVF_1_1PointerAnalysis.html#ae1323233941cdc9b99332e4b954a2217">alias</a>(n1-><a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>(), n2-><a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>()))</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span> </div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span> <span class="comment">// PointsTo pts = pta->getPts(n1->getPAGDstNodeID());</span></div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span> <span class="comment">// pts &= pta->getPts(n2->getPAGDstNodeID());</span></div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span> <span class="comment">//</span></div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span> <span class="comment">// const SVFInstruction* i1 = n1->getInst();</span></div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span> <span class="comment">// const SVFInstruction* i2 = n2->getInst();</span></div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span> </div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span> </div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span> <span class="comment">// NodeBS comlocks1;</span></div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span> <span class="comment">// NodeBS comlocks2;</span></div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span> <span class="comment">// lockana->getCommonLocks(i1, i2, comlocks1, comlocks2);</span></div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span> <span class="comment">// if(comlocks1.count() && comlocks2.count()) {</span></div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span> <span class="comment">// bool n1istail = false;</span></div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span> <span class="comment">// for (NodeBS::iterator it1 = comlocks1.begin(), ie1 = comlocks1.end(); it1 != ie1; ++it1) {</span></div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span> <span class="comment">// LockAnalysis::LockSpan lspan1 = lockana->getSpanfromCxtLock(*it1);</span></div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span> <span class="comment">// /// exist lock span, n1 is tail;</span></div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span> <span class="comment">// if (isTailofSpan(n1, lspan1))</span></div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span> <span class="comment">// n1istail = true;</span></div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span> <span class="comment">// }</span></div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span> <span class="comment">// bool n2ishead = false;</span></div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span> <span class="comment">// for (NodeBS::iterator it2 = comlocks2.begin(), ie2 = comlocks2.end(); it2 != ie2; ++it2) {</span></div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span> <span class="comment">// LockAnalysis::LockSpan lspan2 = lockana->getSpanfromCxtLock(*it2);</span></div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span> <span class="comment">// /// exist lock span, n2 is head;</span></div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span> <span class="comment">// if (isHeadofSpan(n2, lspan2))</span></div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span> <span class="comment">// n2ishead = true;</span></div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span> <span class="comment">// }</span></div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span> <span class="comment">// if (n1istail && n2ishead)</span></div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span> <span class="comment">// addTDEdges(n1->getId(), n2->getId(), pts);</span></div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span> <span class="comment">//</span></div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span> <span class="comment">//</span></div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span> <span class="comment">//</span></div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span> <span class="comment">// bool n2istail = false;</span></div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span> <span class="comment">// for (NodeBS::iterator it2 = comlocks2.begin(), ie2 = comlocks2.end(); it2 != ie2; ++it2) {</span></div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span> <span class="comment">// LockAnalysis::LockSpan lspan2 = lockana->getSpanfromCxtLock(*it2);</span></div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span> <span class="comment">// /// exist lock span, n2 is tail;</span></div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span> <span class="comment">// if (isTailofSpan(n2, lspan2))</span></div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span> <span class="comment">// n2istail = true;</span></div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span> <span class="comment">// }</span></div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span> <span class="comment">// bool n1ishead = false;</span></div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span> <span class="comment">// for (NodeBS::iterator it1 = comlocks1.begin(), ie1 = comlocks1.end(); it1 != ie1; ++it1) {</span></div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span> <span class="comment">// LockAnalysis::LockSpan lspan1 = lockana->getSpanfromCxtLock(*it1);</span></div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span> <span class="comment">// /// exist lock span, n1 is head;</span></div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span> <span class="comment">// if (isHeadofSpan(n1, lspan1))</span></div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span> <span class="comment">// n1ishead = true;</span></div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span> <span class="comment">// }</span></div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span> <span class="comment">// if (n2istail && n1ishead)</span></div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span> <span class="comment">// addTDEdges(n2->getId(), n1->getId(), pts);</span></div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span> <span class="comment">//</span></div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span> <span class="comment">// } else {</span></div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span> <span class="comment">// addTDEdges(n1->getId(), n2->getId(), pts);</span></div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span> <span class="comment">// addTDEdges(n2->getId(), n1->getId(), pts);</span></div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span> <span class="comment">// }</span></div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span> }</div><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>
|
|
1169
1169
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_ae1323233941cdc9b99332e4b954a2217"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#ae1323233941cdc9b99332e4b954a2217">SVF::PointerAnalysis::alias</a></div><div class="ttdeci">virtual AliasResult alias(const SVFValue *V1, const SVFValue *V2)=0</div><div class="ttdoc">Interface exposed to users of our pointer analysis, given Value infos. </div></div>
|
|
1170
1170
|
</div><!-- fragment -->
|
|
1171
1171
|
</div>
|
|
@@ -1210,7 +1210,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1210
1210
|
<div class="fragment"><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>  <a class="code" href="classSVF_1_1SVFGNodeLockSpan.html">SVFGNodeLockSpan</a> pair(n,lspan);</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MTASVFGBuilder.html#af65f6553c6a7184401e249d777cd520e">pairheadmap</a>.find(pair) != <a class="code" href="classSVF_1_1MTASVFGBuilder.html#af65f6553c6a7184401e249d777cd520e">pairheadmap</a>.end())</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#af65f6553c6a7184401e249d777cd520e">pairheadmap</a>[pair];</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>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a17da7e5da237c23873e17250d9746939">SVFGNodeIDSet</a> <a class="code" href="cJSON_8cpp.html#a8f132000c2609a05d1bfd83e25db97d5">prev</a> = <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a7b034f9f8f01823ecfb7f6c17e47b502">getPrevNodes</a>(n);</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span> </div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1SparseBitVector.html#a0421e3336137b232edc442ece00a8a9c">SVFGNodeIDSet::iterator</a> it = prev.begin(), eit = prev.end(); it != eit; ++it)</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>  assert (SVFUtil::isa<StoreSVFGNode>(<a class="code" href="classSVF_1_1SVFGBuilder.html#a26bc3b9c07472e454bc567cd8746caef">svfg</a>-><a class="code" href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">getSVFGNode</a>(*it)) && <span class="stringliteral">"prev is not a store node"</span>);</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* prevNode = <a class="code" href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">SVFUtil::dyn_cast</a><<a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>>(<a class="code" href="classSVF_1_1SVFGBuilder.html#a26bc3b9c07472e454bc567cd8746caef">svfg</a>-><a class="code" href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">getSVFGNode</a>(*it));</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* prevIns = prevNode-><a class="code" href="classSVF_1_1StmtVFGNode.html#a3fb14833d95bb3550f904b5e236a5364">getInst</a>();</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> </div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MTASVFGBuilder.html#a00bf5aaf3095bb271f2cbd3c35749ce2">lockana</a>-><a class="code" href="classSVF_1_1LockAnalysis.html#a7d2072c3c0ae571077a2aa2c3586451d">hasOneCxtInLockSpan</a>(prevIns, lspan))</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>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#af65f6553c6a7184401e249d777cd520e">pairheadmap</a>[pair]=<span class="keyword">false</span>;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  }</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  }</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#af65f6553c6a7184401e249d777cd520e">pairheadmap</a>[pair]=<span class="keyword">true</span>;</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span> }</div><div class="ttc" id="classSVF_1_1SVFInstruction_html"><div class="ttname"><a href="classSVF_1_1SVFInstruction.html">SVF::SVFInstruction</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00570">SVFValue.h:570</a></div></div>
|
|
1211
1211
|
<div class="ttc" id="classSVF_1_1LockAnalysis_html_a7d2072c3c0ae571077a2aa2c3586451d"><div class="ttname"><a href="classSVF_1_1LockAnalysis.html#a7d2072c3c0ae571077a2aa2c3586451d">SVF::LockAnalysis::hasOneCxtInLockSpan</a></div><div class="ttdeci">bool hasOneCxtInLockSpan(const SVFInstruction *I, LockSpan lspan) const</div><div class="ttdoc">Check if one instruction&#39;s context stmt is in a lock span. </div><div class="ttdef"><b>Definition:</b> <a href="LockAnalysis_8h_source.html#l00272">LockAnalysis.h:272</a></div></div>
|
|
1212
1212
|
<div class="ttc" id="classSVF_1_1SVFG_html_a7ace06b6c893b31f7dec2abe54e33e11"><div class="ttname"><a href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">SVF::SVFG::getSVFGNode</a></div><div class="ttdeci">SVFGNode * getSVFGNode(NodeID id) const</div><div class="ttdoc">Get a SVFG node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFG_8h_source.html#l00150">SVFG.h:150</a></div></div>
|
|
1213
|
-
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_af6e96694d983643a66c238cce01bff0e"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if_t<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type > dyn_cast(const Y &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#
|
|
1213
|
+
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_af6e96694d983643a66c238cce01bff0e"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if_t<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type > dyn_cast(const Y &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00405">Casting.h:405</a></div></div>
|
|
1214
1214
|
<div class="ttc" id="classSVF_1_1SVFGNodeLockSpan_html"><div class="ttname"><a href="classSVF_1_1SVFGNodeLockSpan.html">SVF::SVFGNodeLockSpan</a></div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8h_source.html#l00051">FSMPTA.h:51</a></div></div>
|
|
1215
1215
|
<div class="ttc" id="classSVF_1_1SparseBitVector_html_a0421e3336137b232edc442ece00a8a9c"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a0421e3336137b232edc442ece00a8a9c">SVF::SparseBitVector::iterator</a></div><div class="ttdeci">SparseBitVectorIterator iterator</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00675">SparseBitVector.h:675</a></div></div>
|
|
1216
1216
|
<div class="ttc" id="classSVF_1_1StmtVFGNode_html_a3fb14833d95bb3550f904b5e236a5364"><div class="ttname"><a href="classSVF_1_1StmtVFGNode.html#a3fb14833d95bb3550f904b5e236a5364">SVF::StmtVFGNode::getInst</a></div><div class="ttdeci">const SVFInstruction * getInst() const</div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00185">VFGNode.h:185</a></div></div>
|
|
@@ -1220,7 +1220,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1220
1220
|
<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>
|
|
1221
1221
|
<div class="ttc" id="cJSON_8cpp_html_a8f132000c2609a05d1bfd83e25db97d5"><div class="ttname"><a href="cJSON_8cpp.html#a8f132000c2609a05d1bfd83e25db97d5">prev</a></div><div class="ttdeci">newitem prev</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l02285">cJSON.cpp:2285</a></div></div>
|
|
1222
1222
|
<div class="ttc" id="classSVF_1_1SVFGBuilder_html_a26bc3b9c07472e454bc567cd8746caef"><div class="ttname"><a href="classSVF_1_1SVFGBuilder.html#a26bc3b9c07472e454bc567cd8746caef">SVF::SVFGBuilder::svfg</a></div><div class="ttdeci">SVFG * svfg</div><div class="ttdef"><b>Definition:</b> <a href="SVFGBuilder_8h_source.html#l00100">SVFGBuilder.h:100</a></div></div>
|
|
1223
|
-
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a7b034f9f8f01823ecfb7f6c17e47b502"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a7b034f9f8f01823ecfb7f6c17e47b502">SVF::MTASVFGBuilder::getPrevNodes</a></div><div class="ttdeci">SVFGNodeIDSet getPrevNodes(const StmtSVFGNode *n)</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#
|
|
1223
|
+
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a7b034f9f8f01823ecfb7f6c17e47b502"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a7b034f9f8f01823ecfb7f6c17e47b502">SVF::MTASVFGBuilder::getPrevNodes</a></div><div class="ttdeci">SVFGNodeIDSet getPrevNodes(const StmtSVFGNode *n)</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#l00344">FSMPTA.cpp:344</a></div></div>
|
|
1224
1224
|
</div><!-- fragment -->
|
|
1225
1225
|
</div>
|
|
1226
1226
|
</div>
|
|
@@ -1261,14 +1261,14 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1261
1261
|
<p class="definition">Definition at line <a class="el" href="FSMPTA_8cpp_source.html#l00225">225</a> of file <a class="el" href="FSMPTA_8cpp_source.html">FSMPTA.cpp</a>.</p>
|
|
1262
1262
|
<div class="fragment"><div class="line"><a name="l00226"></a><span class="lineno"> 226</span> {</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span> </div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a17da7e5da237c23873e17250d9746939">SVFGNodeIDSet</a> <a class="code" href="cJSON_8cpp.html#a8f132000c2609a05d1bfd83e25db97d5">prev</a> = <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a7b034f9f8f01823ecfb7f6c17e47b502">getPrevNodes</a>(n);</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span> </div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1SparseBitVector.html#a0421e3336137b232edc442ece00a8a9c">SVFGNodeIDSet::iterator</a> it = prev.begin(), eit = prev.end(); it != eit; ++it)</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  {</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  assert (SVFUtil::isa<StoreSVFGNode>(<a class="code" href="classSVF_1_1SVFGBuilder.html#a26bc3b9c07472e454bc567cd8746caef">svfg</a>-><a class="code" href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">getSVFGNode</a>(*it)) && <span class="stringliteral">"prev is not a store node"</span>);</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* prevNode = <a class="code" href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">SVFUtil::dyn_cast</a><<a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>>(<a class="code" href="classSVF_1_1SVFGBuilder.html#a26bc3b9c07472e454bc567cd8746caef">svfg</a>-><a class="code" href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">getSVFGNode</a>(*it));</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* prevIns = prevNode-><a class="code" href="classSVF_1_1StmtVFGNode.html#a3fb14833d95bb3550f904b5e236a5364">getInst</a>();</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <span class="keywordflow">if</span> (mergespan.find(prevIns)!=mergespan.end())</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  }</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span> }</div><div class="ttc" id="classSVF_1_1SVFInstruction_html"><div class="ttname"><a href="classSVF_1_1SVFInstruction.html">SVF::SVFInstruction</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00570">SVFValue.h:570</a></div></div>
|
|
1263
1263
|
<div class="ttc" id="classSVF_1_1SVFG_html_a7ace06b6c893b31f7dec2abe54e33e11"><div class="ttname"><a href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">SVF::SVFG::getSVFGNode</a></div><div class="ttdeci">SVFGNode * getSVFGNode(NodeID id) const</div><div class="ttdoc">Get a SVFG node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFG_8h_source.html#l00150">SVFG.h:150</a></div></div>
|
|
1264
|
-
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_af6e96694d983643a66c238cce01bff0e"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if_t<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type > dyn_cast(const Y &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#
|
|
1264
|
+
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_af6e96694d983643a66c238cce01bff0e"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if_t<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type > dyn_cast(const Y &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00405">Casting.h:405</a></div></div>
|
|
1265
1265
|
<div class="ttc" id="classSVF_1_1SparseBitVector_html_a0421e3336137b232edc442ece00a8a9c"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a0421e3336137b232edc442ece00a8a9c">SVF::SparseBitVector::iterator</a></div><div class="ttdeci">SparseBitVectorIterator iterator</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00675">SparseBitVector.h:675</a></div></div>
|
|
1266
1266
|
<div class="ttc" id="classSVF_1_1StmtVFGNode_html_a3fb14833d95bb3550f904b5e236a5364"><div class="ttname"><a href="classSVF_1_1StmtVFGNode.html#a3fb14833d95bb3550f904b5e236a5364">SVF::StmtVFGNode::getInst</a></div><div class="ttdeci">const SVFInstruction * getInst() const</div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00185">VFGNode.h:185</a></div></div>
|
|
1267
1267
|
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a17da7e5da237c23873e17250d9746939"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a17da7e5da237c23873e17250d9746939">SVF::MTASVFGBuilder::SVFGNodeIDSet</a></div><div class="ttdeci">NodeBS SVFGNodeIDSet</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8h_source.html#l00106">FSMPTA.h:106</a></div></div>
|
|
1268
1268
|
<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>
|
|
1269
1269
|
<div class="ttc" id="cJSON_8cpp_html_a8f132000c2609a05d1bfd83e25db97d5"><div class="ttname"><a href="cJSON_8cpp.html#a8f132000c2609a05d1bfd83e25db97d5">prev</a></div><div class="ttdeci">newitem prev</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l02285">cJSON.cpp:2285</a></div></div>
|
|
1270
1270
|
<div class="ttc" id="classSVF_1_1SVFGBuilder_html_a26bc3b9c07472e454bc567cd8746caef"><div class="ttname"><a href="classSVF_1_1SVFGBuilder.html#a26bc3b9c07472e454bc567cd8746caef">SVF::SVFGBuilder::svfg</a></div><div class="ttdeci">SVFG * svfg</div><div class="ttdef"><b>Definition:</b> <a href="SVFGBuilder_8h_source.html#l00100">SVFGBuilder.h:100</a></div></div>
|
|
1271
|
-
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a7b034f9f8f01823ecfb7f6c17e47b502"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a7b034f9f8f01823ecfb7f6c17e47b502">SVF::MTASVFGBuilder::getPrevNodes</a></div><div class="ttdeci">SVFGNodeIDSet getPrevNodes(const StmtSVFGNode *n)</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#
|
|
1271
|
+
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a7b034f9f8f01823ecfb7f6c17e47b502"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a7b034f9f8f01823ecfb7f6c17e47b502">SVF::MTASVFGBuilder::getPrevNodes</a></div><div class="ttdeci">SVFGNodeIDSet getPrevNodes(const StmtSVFGNode *n)</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#l00344">FSMPTA.cpp:344</a></div></div>
|
|
1272
1272
|
</div><!-- fragment -->
|
|
1273
1273
|
</div>
|
|
1274
1274
|
</div>
|
|
@@ -1300,7 +1300,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1300
1300
|
<p class="definition">Definition at line <a class="el" href="FSMPTA_8cpp_source.html#l00243">243</a> of file <a class="el" href="FSMPTA_8cpp_source.html">FSMPTA.cpp</a>.</p>
|
|
1301
1301
|
<div class="fragment"><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>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MTASVFGBuilder.html#ac92452c257052706b1cf1737b266eec1">headmap</a>.find(n) != <a class="code" href="classSVF_1_1MTASVFGBuilder.html#ac92452c257052706b1cf1737b266eec1">headmap</a>.end())</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#ac92452c257052706b1cf1737b266eec1">headmap</a>[n];</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>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a17da7e5da237c23873e17250d9746939">SVFGNodeIDSet</a> <a class="code" href="cJSON_8cpp.html#a8f132000c2609a05d1bfd83e25db97d5">prev</a> = <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a7b034f9f8f01823ecfb7f6c17e47b502">getPrevNodes</a>(n);</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span> </div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1SparseBitVector.html#a0421e3336137b232edc442ece00a8a9c">SVFGNodeIDSet::iterator</a> it = prev.begin(), eit = prev.end(); it != eit; ++it)</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>  assert(SVFUtil::isa<StoreSVFGNode>(<a class="code" href="classSVF_1_1SVFGBuilder.html#a26bc3b9c07472e454bc567cd8746caef">svfg</a>-><a class="code" href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">getSVFGNode</a>(*it)) && <span class="stringliteral">"prev is not a store node"</span>);</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* prevNode = <a class="code" href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">SVFUtil::dyn_cast</a><<a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>>(<a class="code" href="classSVF_1_1SVFGBuilder.html#a26bc3b9c07472e454bc567cd8746caef">svfg</a>-><a class="code" href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">getSVFGNode</a>(*it));</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* prevIns = prevNode-><a class="code" href="classSVF_1_1StmtVFGNode.html#a3fb14833d95bb3550f904b5e236a5364">getInst</a>();</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>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MTASVFGBuilder.html#a00bf5aaf3095bb271f2cbd3c35749ce2">lockana</a>-><a class="code" href="classSVF_1_1LockAnalysis.html#a1c1b63a8bd7449ebeb2c31b0532e9337">isInSameSpan</a>(prevIns, n-><a class="code" href="classSVF_1_1StmtVFGNode.html#a3fb14833d95bb3550f904b5e236a5364">getInst</a>()))</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>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#ac92452c257052706b1cf1737b266eec1">headmap</a>[<a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>]=<span class="keyword">false</span>;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <span class="keywordflow">return</span> <span class="keyword">false</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>  }</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#ac92452c257052706b1cf1737b266eec1">headmap</a>[<a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>]=<span class="keyword">true</span>;</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span> }</div><div class="ttc" id="classSVF_1_1SVFInstruction_html"><div class="ttname"><a href="classSVF_1_1SVFInstruction.html">SVF::SVFInstruction</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00570">SVFValue.h:570</a></div></div>
|
|
1302
1302
|
<div class="ttc" id="classSVF_1_1SVFG_html_a7ace06b6c893b31f7dec2abe54e33e11"><div class="ttname"><a href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">SVF::SVFG::getSVFGNode</a></div><div class="ttdeci">SVFGNode * getSVFGNode(NodeID id) const</div><div class="ttdoc">Get a SVFG node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFG_8h_source.html#l00150">SVFG.h:150</a></div></div>
|
|
1303
|
-
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_af6e96694d983643a66c238cce01bff0e"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if_t<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type > dyn_cast(const Y &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#
|
|
1303
|
+
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_af6e96694d983643a66c238cce01bff0e"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if_t<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type > dyn_cast(const Y &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00405">Casting.h:405</a></div></div>
|
|
1304
1304
|
<div class="ttc" id="classSVF_1_1LockAnalysis_html_a1c1b63a8bd7449ebeb2c31b0532e9337"><div class="ttname"><a href="classSVF_1_1LockAnalysis.html#a1c1b63a8bd7449ebeb2c31b0532e9337">SVF::LockAnalysis::isInSameSpan</a></div><div class="ttdeci">bool isInSameSpan(const SVFInstruction *I1, const SVFInstruction *I2)</div><div class="ttdef"><b>Definition:</b> <a href="LockAnalysis_8cpp_source.html#l00634">LockAnalysis.cpp:634</a></div></div>
|
|
1305
1305
|
<div class="ttc" id="classSVF_1_1SparseBitVector_html_a0421e3336137b232edc442ece00a8a9c"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a0421e3336137b232edc442ece00a8a9c">SVF::SparseBitVector::iterator</a></div><div class="ttdeci">SparseBitVectorIterator iterator</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00675">SparseBitVector.h:675</a></div></div>
|
|
1306
1306
|
<div class="ttc" id="classSVF_1_1StmtVFGNode_html_a3fb14833d95bb3550f904b5e236a5364"><div class="ttname"><a href="classSVF_1_1StmtVFGNode.html#a3fb14833d95bb3550f904b5e236a5364">SVF::StmtVFGNode::getInst</a></div><div class="ttdeci">const SVFInstruction * getInst() const</div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00185">VFGNode.h:185</a></div></div>
|
|
@@ -1311,7 +1311,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1311
1311
|
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_ac92452c257052706b1cf1737b266eec1"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#ac92452c257052706b1cf1737b266eec1">SVF::MTASVFGBuilder::headmap</a></div><div class="ttdeci">Map< const StmtSVFGNode *, bool > headmap</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8h_source.html#l00180">FSMPTA.h:180</a></div></div>
|
|
1312
1312
|
<div class="ttc" id="cJSON_8cpp_html_a8f132000c2609a05d1bfd83e25db97d5"><div class="ttname"><a href="cJSON_8cpp.html#a8f132000c2609a05d1bfd83e25db97d5">prev</a></div><div class="ttdeci">newitem prev</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l02285">cJSON.cpp:2285</a></div></div>
|
|
1313
1313
|
<div class="ttc" id="classSVF_1_1SVFGBuilder_html_a26bc3b9c07472e454bc567cd8746caef"><div class="ttname"><a href="classSVF_1_1SVFGBuilder.html#a26bc3b9c07472e454bc567cd8746caef">SVF::SVFGBuilder::svfg</a></div><div class="ttdeci">SVFG * svfg</div><div class="ttdef"><b>Definition:</b> <a href="SVFGBuilder_8h_source.html#l00100">SVFGBuilder.h:100</a></div></div>
|
|
1314
|
-
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a7b034f9f8f01823ecfb7f6c17e47b502"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a7b034f9f8f01823ecfb7f6c17e47b502">SVF::MTASVFGBuilder::getPrevNodes</a></div><div class="ttdeci">SVFGNodeIDSet getPrevNodes(const StmtSVFGNode *n)</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#
|
|
1314
|
+
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a7b034f9f8f01823ecfb7f6c17e47b502"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a7b034f9f8f01823ecfb7f6c17e47b502">SVF::MTASVFGBuilder::getPrevNodes</a></div><div class="ttdeci">SVFGNodeIDSet getPrevNodes(const StmtSVFGNode *n)</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#l00344">FSMPTA.cpp:344</a></div></div>
|
|
1315
1315
|
</div><!-- fragment -->
|
|
1316
1316
|
</div>
|
|
1317
1317
|
</div>
|
|
@@ -1351,12 +1351,12 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1351
1351
|
|
|
1352
1352
|
<p>whether is a last write in the lock span. </p>
|
|
1353
1353
|
|
|
1354
|
-
<p class="definition">Definition at line <a class="el" href="FSMPTA_8cpp_source.html#
|
|
1355
|
-
<div class="fragment"><div class="line"><a name="
|
|
1354
|
+
<p class="definition">Definition at line <a class="el" href="FSMPTA_8cpp_source.html#l00285">285</a> of file <a class="el" href="FSMPTA_8cpp_source.html">FSMPTA.cpp</a>.</p>
|
|
1355
|
+
<div class="fragment"><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>  assert(SVFUtil::isa<StoreSVFGNode>(n) && <span class="stringliteral">"Node is not a store node"</span>);</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span> </div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <a class="code" href="classSVF_1_1SVFGNodeLockSpan.html">SVFGNodeLockSpan</a> pair(n,lspan);</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MTASVFGBuilder.html#aa444ad49952922e1b862b75c4949de78">pairtailmap</a>.find(pair) != <a class="code" href="classSVF_1_1MTASVFGBuilder.html#aa444ad49952922e1b862b75c4949de78">pairtailmap</a>.end())</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#aa444ad49952922e1b862b75c4949de78">pairtailmap</a>[pair];</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span> </div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a17da7e5da237c23873e17250d9746939">SVFGNodeIDSet</a> succ = <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a7033805052c8fae5cd0104fdd9e345c0">getSuccNodes</a>(n);</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1SparseBitVector.html#a0421e3336137b232edc442ece00a8a9c">SVFGNodeIDSet::iterator</a> it = succ.begin(), eit = succ.end(); it != eit; ++it)</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  {</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  assert((SVFUtil::isa<StoreSVFGNode, LoadSVFGNode>(<a class="code" href="classSVF_1_1SVFGBuilder.html#a26bc3b9c07472e454bc567cd8746caef">svfg</a>-><a class="code" href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">getSVFGNode</a>(*it))) &&</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <span class="stringliteral">"succ is not a store/load node"</span>);</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  <span class="keywordflow">if</span> (SVFUtil::isa<LoadSVFGNode>(<a class="code" href="classSVF_1_1SVFGBuilder.html#a26bc3b9c07472e454bc567cd8746caef">svfg</a>-><a class="code" href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">getSVFGNode</a>(*it)))</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* succNode = <a class="code" href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">SVFUtil::dyn_cast</a><<a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>>(<a class="code" href="classSVF_1_1SVFGBuilder.html#a26bc3b9c07472e454bc567cd8746caef">svfg</a>-><a class="code" href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">getSVFGNode</a>(*it));</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* succIns = succNode-><a class="code" href="classSVF_1_1StmtVFGNode.html#a3fb14833d95bb3550f904b5e236a5364">getInst</a>();</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span> </div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MTASVFGBuilder.html#a00bf5aaf3095bb271f2cbd3c35749ce2">lockana</a>-><a class="code" href="classSVF_1_1LockAnalysis.html#a7d2072c3c0ae571077a2aa2c3586451d">hasOneCxtInLockSpan</a>(succIns, lspan))</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  {</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#aa444ad49952922e1b862b75c4949de78">pairtailmap</a>[pair]=<span class="keyword">false</span>;</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  }</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  }</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#aa444ad49952922e1b862b75c4949de78">pairtailmap</a>[pair]=<span class="keyword">true</span>;</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span> }</div><div class="ttc" id="classSVF_1_1SVFInstruction_html"><div class="ttname"><a href="classSVF_1_1SVFInstruction.html">SVF::SVFInstruction</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00570">SVFValue.h:570</a></div></div>
|
|
1356
1356
|
<div class="ttc" id="classSVF_1_1LockAnalysis_html_a7d2072c3c0ae571077a2aa2c3586451d"><div class="ttname"><a href="classSVF_1_1LockAnalysis.html#a7d2072c3c0ae571077a2aa2c3586451d">SVF::LockAnalysis::hasOneCxtInLockSpan</a></div><div class="ttdeci">bool hasOneCxtInLockSpan(const SVFInstruction *I, LockSpan lspan) const</div><div class="ttdoc">Check if one instruction&#39;s context stmt is in a lock span. </div><div class="ttdef"><b>Definition:</b> <a href="LockAnalysis_8h_source.html#l00272">LockAnalysis.h:272</a></div></div>
|
|
1357
1357
|
<div class="ttc" id="classSVF_1_1SVFG_html_a7ace06b6c893b31f7dec2abe54e33e11"><div class="ttname"><a href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">SVF::SVFG::getSVFGNode</a></div><div class="ttdeci">SVFGNode * getSVFGNode(NodeID id) const</div><div class="ttdoc">Get a SVFG node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFG_8h_source.html#l00150">SVFG.h:150</a></div></div>
|
|
1358
|
-
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_af6e96694d983643a66c238cce01bff0e"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if_t<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type > dyn_cast(const Y &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#
|
|
1359
|
-
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a7033805052c8fae5cd0104fdd9e345c0"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a7033805052c8fae5cd0104fdd9e345c0">SVF::MTASVFGBuilder::getSuccNodes</a></div><div class="ttdeci">SVFGNodeIDSet getSuccNodes(const StmtSVFGNode *n)</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#
|
|
1358
|
+
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_af6e96694d983643a66c238cce01bff0e"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if_t<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type > dyn_cast(const Y &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00405">Casting.h:405</a></div></div>
|
|
1359
|
+
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a7033805052c8fae5cd0104fdd9e345c0"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a7033805052c8fae5cd0104fdd9e345c0">SVF::MTASVFGBuilder::getSuccNodes</a></div><div class="ttdeci">SVFGNodeIDSet getSuccNodes(const StmtSVFGNode *n)</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#l00382">FSMPTA.cpp:382</a></div></div>
|
|
1360
1360
|
<div class="ttc" id="classSVF_1_1SVFGNodeLockSpan_html"><div class="ttname"><a href="classSVF_1_1SVFGNodeLockSpan.html">SVF::SVFGNodeLockSpan</a></div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8h_source.html#l00051">FSMPTA.h:51</a></div></div>
|
|
1361
1361
|
<div class="ttc" id="classSVF_1_1SparseBitVector_html_a0421e3336137b232edc442ece00a8a9c"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a0421e3336137b232edc442ece00a8a9c">SVF::SparseBitVector::iterator</a></div><div class="ttdeci">SparseBitVectorIterator iterator</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00675">SparseBitVector.h:675</a></div></div>
|
|
1362
1362
|
<div class="ttc" id="classSVF_1_1StmtVFGNode_html_a3fb14833d95bb3550f904b5e236a5364"><div class="ttname"><a href="classSVF_1_1StmtVFGNode.html#a3fb14833d95bb3550f904b5e236a5364">SVF::StmtVFGNode::getInst</a></div><div class="ttdeci">const SVFInstruction * getInst() const</div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00185">VFGNode.h:185</a></div></div>
|
|
@@ -1403,10 +1403,10 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1403
1403
|
</div><div class="memdoc">
|
|
1404
1404
|
|
|
1405
1405
|
<p class="definition">Definition at line <a class="el" href="FSMPTA_8cpp_source.html#l00266">266</a> of file <a class="el" href="FSMPTA_8cpp_source.html">FSMPTA.cpp</a>.</p>
|
|
1406
|
-
<div class="fragment"><div class="line"><a name="l00267"></a><span class="lineno"> 267</span> {</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span> </div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a17da7e5da237c23873e17250d9746939">SVFGNodeIDSet</a> succ = <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a7033805052c8fae5cd0104fdd9e345c0">getSuccNodes</a>(n);</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span> </div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1SparseBitVector.html#a0421e3336137b232edc442ece00a8a9c">SVFGNodeIDSet::iterator</a> it = succ.begin(), eit = succ.end(); it != eit; ++it)</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  {</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  assert
|
|
1406
|
+
<div class="fragment"><div class="line"><a name="l00267"></a><span class="lineno"> 267</span> {</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span> </div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a17da7e5da237c23873e17250d9746939">SVFGNodeIDSet</a> succ = <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a7033805052c8fae5cd0104fdd9e345c0">getSuccNodes</a>(n);</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span> </div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1SparseBitVector.html#a0421e3336137b232edc442ece00a8a9c">SVFGNodeIDSet::iterator</a> it = succ.begin(), eit = succ.end(); it != eit; ++it)</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  {</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  assert((SVFUtil::isa<StoreSVFGNode, LoadSVFGNode>(<a class="code" href="classSVF_1_1SVFGBuilder.html#a26bc3b9c07472e454bc567cd8746caef">svfg</a>-><a class="code" href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">getSVFGNode</a>(*it))) &&</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="stringliteral">"succ is not a store/load node"</span>);</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* succNode = <a class="code" href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">SVFUtil::dyn_cast</a><<a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>>(<a class="code" href="classSVF_1_1SVFGBuilder.html#a26bc3b9c07472e454bc567cd8746caef">svfg</a>-><a class="code" href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">getSVFGNode</a>(*it));</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* succIns = succNode->getInst();</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span> </div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <span class="keywordflow">if</span> (mergespan.find(succIns)!=mergespan.end())</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  }</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span> }</div><div class="ttc" id="classSVF_1_1SVFInstruction_html"><div class="ttname"><a href="classSVF_1_1SVFInstruction.html">SVF::SVFInstruction</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00570">SVFValue.h:570</a></div></div>
|
|
1407
1407
|
<div class="ttc" id="classSVF_1_1SVFG_html_a7ace06b6c893b31f7dec2abe54e33e11"><div class="ttname"><a href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">SVF::SVFG::getSVFGNode</a></div><div class="ttdeci">SVFGNode * getSVFGNode(NodeID id) const</div><div class="ttdoc">Get a SVFG node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFG_8h_source.html#l00150">SVFG.h:150</a></div></div>
|
|
1408
|
-
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_af6e96694d983643a66c238cce01bff0e"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if_t<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type > dyn_cast(const Y &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#
|
|
1409
|
-
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a7033805052c8fae5cd0104fdd9e345c0"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a7033805052c8fae5cd0104fdd9e345c0">SVF::MTASVFGBuilder::getSuccNodes</a></div><div class="ttdeci">SVFGNodeIDSet getSuccNodes(const StmtSVFGNode *n)</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#
|
|
1408
|
+
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_af6e96694d983643a66c238cce01bff0e"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if_t<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type > dyn_cast(const Y &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00405">Casting.h:405</a></div></div>
|
|
1409
|
+
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a7033805052c8fae5cd0104fdd9e345c0"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a7033805052c8fae5cd0104fdd9e345c0">SVF::MTASVFGBuilder::getSuccNodes</a></div><div class="ttdeci">SVFGNodeIDSet getSuccNodes(const StmtSVFGNode *n)</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#l00382">FSMPTA.cpp:382</a></div></div>
|
|
1410
1410
|
<div class="ttc" id="classSVF_1_1SparseBitVector_html_a0421e3336137b232edc442ece00a8a9c"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a0421e3336137b232edc442ece00a8a9c">SVF::SparseBitVector::iterator</a></div><div class="ttdeci">SparseBitVectorIterator iterator</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00675">SparseBitVector.h:675</a></div></div>
|
|
1411
1411
|
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a17da7e5da237c23873e17250d9746939"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a17da7e5da237c23873e17250d9746939">SVF::MTASVFGBuilder::SVFGNodeIDSet</a></div><div class="ttdeci">NodeBS SVFGNodeIDSet</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8h_source.html#l00106">FSMPTA.h:106</a></div></div>
|
|
1412
1412
|
<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>
|
|
@@ -1439,12 +1439,12 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1439
1439
|
</div><div class="memdoc">
|
|
1440
1440
|
<p>whether for all lockspans that n belongs to, n is the last write. strong constraints but scalable </p>
|
|
1441
1441
|
|
|
1442
|
-
<p class="definition">Definition at line <a class="el" href="FSMPTA_8cpp_source.html#
|
|
1443
|
-
<div class="fragment"><div class="line"><a name="
|
|
1442
|
+
<p class="definition">Definition at line <a class="el" href="FSMPTA_8cpp_source.html#l00316">316</a> of file <a class="el" href="FSMPTA_8cpp_source.html">FSMPTA.cpp</a>.</p>
|
|
1443
|
+
<div class="fragment"><div class="line"><a name="l00317"></a><span class="lineno"> 317</span> {</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  assert(SVFUtil::isa<StoreSVFGNode>(n) && <span class="stringliteral">"Node is not a store node"</span>);</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span> </div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MTASVFGBuilder.html#ad55a5f1e1f6d8e99fc0be5b85bbf8599">tailmap</a>.find(n) != <a class="code" href="classSVF_1_1MTASVFGBuilder.html#ad55a5f1e1f6d8e99fc0be5b85bbf8599">tailmap</a>.end())</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#ad55a5f1e1f6d8e99fc0be5b85bbf8599">tailmap</a>[n];</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span> </div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a17da7e5da237c23873e17250d9746939">SVFGNodeIDSet</a> succ = <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a7033805052c8fae5cd0104fdd9e345c0">getSuccNodes</a>(n);</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span> </div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1SparseBitVector.html#a0421e3336137b232edc442ece00a8a9c">SVFGNodeIDSet::iterator</a> it = succ.begin(), eit = succ.end(); it != eit; ++it)</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  {</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  assert((SVFUtil::isa<StoreSVFGNode, LoadSVFGNode>(<a class="code" href="classSVF_1_1SVFGBuilder.html#a26bc3b9c07472e454bc567cd8746caef">svfg</a>-><a class="code" href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">getSVFGNode</a>(*it))) && <span class="stringliteral">"succ is not a store/load node"</span>);</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  <span class="keywordflow">if</span> (SVFUtil::isa<LoadSVFGNode>(<a class="code" href="classSVF_1_1SVFGBuilder.html#a26bc3b9c07472e454bc567cd8746caef">svfg</a>-><a class="code" href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">getSVFGNode</a>(*it)))</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  <span class="keywordflow">continue</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>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* succNode = <a class="code" href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">SVFUtil::dyn_cast</a><<a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>>(<a class="code" href="classSVF_1_1SVFGBuilder.html#a26bc3b9c07472e454bc567cd8746caef">svfg</a>-><a class="code" href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">getSVFGNode</a>(*it));</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* succIns = succNode-><a class="code" href="classSVF_1_1StmtVFGNode.html#a3fb14833d95bb3550f904b5e236a5364">getInst</a>();</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span> </div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MTASVFGBuilder.html#a00bf5aaf3095bb271f2cbd3c35749ce2">lockana</a>-><a class="code" href="classSVF_1_1LockAnalysis.html#a1c1b63a8bd7449ebeb2c31b0532e9337">isInSameSpan</a>(succIns, n-><a class="code" href="classSVF_1_1StmtVFGNode.html#a3fb14833d95bb3550f904b5e236a5364">getInst</a>()))</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  {</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#ad55a5f1e1f6d8e99fc0be5b85bbf8599">tailmap</a>[<a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>] = <span class="keyword">false</span>;</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  }</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  }</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#ad55a5f1e1f6d8e99fc0be5b85bbf8599">tailmap</a>[<a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>]=<span class="keyword">true</span>;</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span> }</div><div class="ttc" id="classSVF_1_1SVFInstruction_html"><div class="ttname"><a href="classSVF_1_1SVFInstruction.html">SVF::SVFInstruction</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00570">SVFValue.h:570</a></div></div>
|
|
1444
1444
|
<div class="ttc" id="classSVF_1_1SVFG_html_a7ace06b6c893b31f7dec2abe54e33e11"><div class="ttname"><a href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">SVF::SVFG::getSVFGNode</a></div><div class="ttdeci">SVFGNode * getSVFGNode(NodeID id) const</div><div class="ttdoc">Get a SVFG node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFG_8h_source.html#l00150">SVFG.h:150</a></div></div>
|
|
1445
|
-
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_af6e96694d983643a66c238cce01bff0e"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if_t<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type > dyn_cast(const Y &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#
|
|
1445
|
+
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_af6e96694d983643a66c238cce01bff0e"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if_t<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type > dyn_cast(const Y &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00405">Casting.h:405</a></div></div>
|
|
1446
1446
|
<div class="ttc" id="classSVF_1_1LockAnalysis_html_a1c1b63a8bd7449ebeb2c31b0532e9337"><div class="ttname"><a href="classSVF_1_1LockAnalysis.html#a1c1b63a8bd7449ebeb2c31b0532e9337">SVF::LockAnalysis::isInSameSpan</a></div><div class="ttdeci">bool isInSameSpan(const SVFInstruction *I1, const SVFInstruction *I2)</div><div class="ttdef"><b>Definition:</b> <a href="LockAnalysis_8cpp_source.html#l00634">LockAnalysis.cpp:634</a></div></div>
|
|
1447
|
-
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a7033805052c8fae5cd0104fdd9e345c0"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a7033805052c8fae5cd0104fdd9e345c0">SVF::MTASVFGBuilder::getSuccNodes</a></div><div class="ttdeci">SVFGNodeIDSet getSuccNodes(const StmtSVFGNode *n)</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#
|
|
1447
|
+
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a7033805052c8fae5cd0104fdd9e345c0"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a7033805052c8fae5cd0104fdd9e345c0">SVF::MTASVFGBuilder::getSuccNodes</a></div><div class="ttdeci">SVFGNodeIDSet getSuccNodes(const StmtSVFGNode *n)</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#l00382">FSMPTA.cpp:382</a></div></div>
|
|
1448
1448
|
<div class="ttc" id="classSVF_1_1SparseBitVector_html_a0421e3336137b232edc442ece00a8a9c"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a0421e3336137b232edc442ece00a8a9c">SVF::SparseBitVector::iterator</a></div><div class="ttdeci">SparseBitVectorIterator iterator</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00675">SparseBitVector.h:675</a></div></div>
|
|
1449
1449
|
<div class="ttc" id="classSVF_1_1StmtVFGNode_html_a3fb14833d95bb3550f904b5e236a5364"><div class="ttname"><a href="classSVF_1_1StmtVFGNode.html#a3fb14833d95bb3550f904b5e236a5364">SVF::StmtVFGNode::getInst</a></div><div class="ttdeci">const SVFInstruction * getInst() const</div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00185">VFGNode.h:185</a></div></div>
|
|
1450
1450
|
<div class="ttc" id="cJSON_8cpp_html_ab6e2ea6dc7bd57d1483413449998230a"><div class="ttname"><a href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a></div><div class="ttdeci">cJSON * n</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l02558">cJSON.cpp:2558</a></div></div>
|
|
@@ -1490,8 +1490,8 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1490
1490
|
</table>
|
|
1491
1491
|
</div><div class="memdoc">
|
|
1492
1492
|
|
|
1493
|
-
<p class="definition">Definition at line <a class="el" href="FSMPTA_8cpp_source.html#
|
|
1494
|
-
<div class="fragment"><div class="line"><a name="
|
|
1493
|
+
<p class="definition">Definition at line <a class="el" href="FSMPTA_8cpp_source.html#l00647">647</a> of file <a class="el" href="FSMPTA_8cpp_source.html">FSMPTA.cpp</a>.</p>
|
|
1494
|
+
<div class="fragment"><div class="line"><a name="l00648"></a><span class="lineno"> 648</span> {</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span> <span class="comment">// for (NodeBS::iterator it = comlocks.begin(), ie = comlocks.end(); it != ie; ++it) {</span></div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span> <span class="comment">// LockAnalysis::LockSpan lspan = lockana->getSpanfromCxtLock(*it);</span></div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span> <span class="comment">// for (LockAnalysis::LockSpan::const_iterator cts = lspan.begin(), ects = lspan.end(); cts!=ects; ++cts) {</span></div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span> <span class="comment">// res.insert((*cts).getStmt());</span></div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span> <span class="comment">// }</span></div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span> <span class="comment">// }</span></div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span> }</div></div><!-- fragment -->
|
|
1495
1495
|
</div>
|
|
1496
1496
|
</div>
|
|
1497
1497
|
<a id="a0ed91beb4d3442c0a78ea81bde8d41a3"></a>
|
|
@@ -1608,11 +1608,11 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1608
1608
|
|
|
1609
1609
|
<p>For o, n2-o->n1, n1 and n2 are write. Foreach n3:n1->n3, n2->n3; then remove n2->n1. </p>
|
|
1610
1610
|
|
|
1611
|
-
<p class="definition">Definition at line <a class="el" href="FSMPTA_8cpp_source.html#
|
|
1612
|
-
<div class="fragment"><div class="line"><a name="
|
|
1611
|
+
<p class="definition">Definition at line <a class="el" href="FSMPTA_8cpp_source.html#l00658">658</a> of file <a class="el" href="FSMPTA_8cpp_source.html">FSMPTA.cpp</a>.</p>
|
|
1612
|
+
<div class="fragment"><div class="line"><a name="l00659"></a><span class="lineno"> 659</span> {</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span> </div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a13ac51421add3cb242ad823e18938c95">recordedges</a>.clear();</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a1c0de33bba2f05f14140d872c345ab38">edge2pts</a>.clear();</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span> </div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  <span class="keywordflow">for</span> (SVFGNodeSet::iterator it1 = <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a772436f5edc7b4bed3a3e8f0e55ac5ce">stnodeSet</a>.begin(), eit1 = <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a772436f5edc7b4bed3a3e8f0e55ac5ce">stnodeSet</a>.end(); it1 != eit1; ++it1)</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>  {</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n1 = SVFUtil::cast<StmtSVFGNode>(*it1);</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span> </div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>  <span class="keywordflow">for</span> (SVFGEdge::SVFGEdgeSetTy::iterator iter = n1-><a class="code" href="classSVF_1_1GenericNode.html#ae5b113921530eee6afe58a65d8e5b3a7">InEdgeBegin</a>(); iter != n1-><a class="code" href="classSVF_1_1GenericNode.html#afe6a7b286d9af4992f41b59612fd2900">InEdgeEnd</a>(); ++iter)</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>  <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = *iter;</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  <span class="keywordflow">if</span> (edge-><a class="code" href="classSVF_1_1VFGEdge.html#aa8f30d093d4950724a6688707326b57b">isIndirectVFGEdge</a>() && SVFUtil::isa<StoreSVFGNode>(edge-><a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()))</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  {</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n2 = SVFUtil::cast<StmtSVFGNode>(edge-><a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>());</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span> </div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  <a class="code" href="classSVF_1_1IndirectSVFGEdge.html">IndirectSVFGEdge</a>* e = SVFUtil::cast<IndirectSVFGEdge>(edge);</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> pts = e->getPointsTo();</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> remove_pts;</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span> </div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">NodeBS::iterator</a> o = pts.begin(), eo = pts.end(); o != eo; ++o)</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  {</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a17da7e5da237c23873e17250d9746939">SVFGNodeIDSet</a> succ1 = <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a7033805052c8fae5cd0104fdd9e345c0">getSuccNodes</a>(n1, *o);</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a17da7e5da237c23873e17250d9746939">SVFGNodeIDSet</a> succ2 = <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a7033805052c8fae5cd0104fdd9e345c0">getSuccNodes</a>(n2, *o);</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span> </div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  <span class="keywordtype">bool</span> <span class="keyword">remove</span> = <span class="keyword">true</span>;</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1SparseBitVector.html#a0421e3336137b232edc442ece00a8a9c">SVFGNodeIDSet::iterator</a> sn1 = succ1.begin(), esn1 = succ1.end(); sn1 != esn1; sn1++)</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>  <span class="keywordflow">if</span> (!succ2.test(*sn1))</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  {</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  <span class="keyword">remove</span> = <span class="keyword">false</span>;</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  }</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="keywordflow">if</span> (<span class="keyword">remove</span>)</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>  remove_pts.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(*o);</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>  }</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>  <span class="keywordflow">if</span> (remove_pts.<a class="code" href="classSVF_1_1PointsTo.html#a879783ba6629e500af9aa7dfcda2563d">count</a>())</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a97179139a6395a7062d3200c23d4b69d">recordRemovingEdge</a>(n2-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), n1-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), remove_pts);</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>  }</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>  }</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>  }</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>  <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a26b6750de23395a89767288b2eabb1ef">performRemovingMHPEdges</a>();</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span> }</div><div class="ttc" id="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator_html"><div class="ttname"><a href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">SVF::SparseBitVector::SparseBitVectorIterator</a></div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00536">SparseBitVector.h:536</a></div></div>
|
|
1613
1613
|
<div class="ttc" id="classSVF_1_1VFGEdge_html_aa8f30d093d4950724a6688707326b57b"><div class="ttname"><a href="classSVF_1_1VFGEdge.html#aa8f30d093d4950724a6688707326b57b">SVF::VFGEdge::isIndirectVFGEdge</a></div><div class="ttdeci">bool isIndirectVFGEdge() const</div><div class="ttdef"><b>Definition:</b> <a href="VFGEdge_8h_source.html#l00080">VFGEdge.h:80</a></div></div>
|
|
1614
1614
|
<div class="ttc" id="classSVF_1_1GenericNode_html_ae5b113921530eee6afe58a65d8e5b3a7"><div class="ttname"><a href="classSVF_1_1GenericNode.html#ae5b113921530eee6afe58a65d8e5b3a7">SVF::GenericNode::InEdgeBegin</a></div><div class="ttdeci">iterator InEdgeBegin()</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00216">GenericGraph.h:216</a></div></div>
|
|
1615
|
-
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a7033805052c8fae5cd0104fdd9e345c0"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a7033805052c8fae5cd0104fdd9e345c0">SVF::MTASVFGBuilder::getSuccNodes</a></div><div class="ttdeci">SVFGNodeIDSet getSuccNodes(const StmtSVFGNode *n)</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#
|
|
1615
|
+
<div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a7033805052c8fae5cd0104fdd9e345c0"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a7033805052c8fae5cd0104fdd9e345c0">SVF::MTASVFGBuilder::getSuccNodes</a></div><div class="ttdeci">SVFGNodeIDSet getSuccNodes(const StmtSVFGNode *n)</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#l00382">FSMPTA.cpp:382</a></div></div>
|
|
1616
1616
|
<div class="ttc" id="classSVF_1_1SparseBitVector_html_a0421e3336137b232edc442ece00a8a9c"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a0421e3336137b232edc442ece00a8a9c">SVF::SparseBitVector::iterator</a></div><div class="ttdeci">SparseBitVectorIterator iterator</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00675">SparseBitVector.h:675</a></div></div>
|
|
1617
1617
|
<div class="ttc" id="classSVF_1_1VFGEdge_html"><div class="ttname"><a href="classSVF_1_1VFGEdge.html">SVF::VFGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGEdge_8h_source.html#l00044">VFGEdge.h:44</a></div></div>
|
|
1618
1618
|
<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#l00107">PointsTo.cpp:107</a></div></div>
|