svf-tools 1.0.605 → 1.0.607

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.
Files changed (109) hide show
  1. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +1 -1
  2. package/SVF-doxygen/html/html/CFLAlias_8cpp_source.html +1 -1
  3. package/SVF-doxygen/html/html/ConsG_8cpp_source.html +1 -1
  4. package/SVF-doxygen/html/html/CxtStmt_8h_source.html +1 -1
  5. package/SVF-doxygen/html/html/DCHG_8cpp_source.html +16 -16
  6. package/SVF-doxygen/html/html/DCHG_8h_source.html +22 -22
  7. package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +1 -1
  8. package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +1 -1
  9. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +1 -1
  10. package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +7 -7
  11. package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +22 -22
  12. package/SVF-doxygen/html/html/LLVMUtil_8h_source.html +20 -20
  13. package/SVF-doxygen/html/html/LocationSet_8cpp_source.html +1 -1
  14. package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +1 -1
  15. package/SVF-doxygen/html/html/MHP_8cpp_source.html +30 -30
  16. package/SVF-doxygen/html/html/MHP_8h_source.html +19 -19
  17. package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +2 -2
  18. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +1 -1
  19. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +1 -1
  20. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +6 -6
  21. package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +1 -1
  22. package/SVF-doxygen/html/html/SVFValue_8h_source.html +1 -1
  23. package/SVF-doxygen/html/html/SVFVariables_8cpp_source.html +1 -1
  24. package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +3 -3
  25. package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +2 -2
  26. package/SVF-doxygen/html/html/cfl_8cpp.html +1 -1
  27. package/SVF-doxygen/html/html/cfl_8cpp_source.html +1 -1
  28. package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode.html +1 -1
  29. package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode.html +1 -1
  30. package/SVF-doxygen/html/html/classSVF_1_1AddrStmt.html +1 -1
  31. package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +1 -1
  32. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +1 -1
  33. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt.html +1 -1
  34. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +1 -1
  35. package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +1 -1
  36. package/SVF-doxygen/html/html/classSVF_1_1CFLAlias.html +1 -1
  37. package/SVF-doxygen/html/html/classSVF_1_1CallCFGEdge.html +1 -1
  38. package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +1 -1
  39. package/SVF-doxygen/html/html/classSVF_1_1CmpStmt.html +1 -1
  40. package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +1 -1
  41. package/SVF-doxygen/html/html/classSVF_1_1CopyStmt.html +1 -1
  42. package/SVF-doxygen/html/html/classSVF_1_1CxtStmt.html +1 -1
  43. package/SVF-doxygen/html/html/classSVF_1_1CxtThread.html +1 -1
  44. package/SVF-doxygen/html/html/classSVF_1_1CxtThreadStmt.html +1 -1
  45. package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +63 -63
  46. package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker.html +2 -2
  47. package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.html +1 -1
  48. package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +31 -31
  49. package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +1 -1
  50. package/SVF-doxygen/html/html/classSVF_1_1GepStmt.html +1 -1
  51. package/SVF-doxygen/html/html/classSVF_1_1GepValVar.html +1 -1
  52. package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +1 -1
  53. package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +3 -3
  54. package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +1 -1
  55. package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +1 -1
  56. package/SVF-doxygen/html/html/classSVF_1_1IntraCFGEdge.html +1 -1
  57. package/SVF-doxygen/html/html/classSVF_1_1IntraICFGNode.html +1 -1
  58. package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +1 -1
  59. package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +7 -7
  60. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +2 -2
  61. package/SVF-doxygen/html/html/classSVF_1_1LoadStmt.html +1 -1
  62. package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +1 -1
  63. package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +1 -1
  64. package/SVF-doxygen/html/html/classSVF_1_1MHP.html +57 -57
  65. package/SVF-doxygen/html/html/classSVF_1_1MHPValidator.html +1 -1
  66. package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +1 -1
  67. package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +1 -1
  68. package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +3 -3
  69. package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +2 -2
  70. package/SVF-doxygen/html/html/classSVF_1_1MemObj.html +1 -1
  71. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +1 -1
  72. package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +1 -1
  73. package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +1 -1
  74. package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.html +1 -1
  75. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +2 -2
  76. package/SVF-doxygen/html/html/classSVF_1_1RetCFGEdge.html +1 -1
  77. package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +1 -1
  78. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +8 -8
  79. package/SVF-doxygen/html/html/classSVF_1_1SVFType.html +2 -2
  80. package/SVF-doxygen/html/html/classSVF_1_1SVFValue.html +2 -2
  81. package/SVF-doxygen/html/html/classSVF_1_1SelectStmt.html +1 -1
  82. package/SVF-doxygen/html/html/classSVF_1_1StoreStmt.html +1 -1
  83. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +7 -7
  84. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +1 -1
  85. package/SVF-doxygen/html/html/classSVF_1_1TCT.html +1 -1
  86. package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +1 -1
  87. package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +1 -1
  88. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt.html +1 -1
  89. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +1 -1
  90. package/SVF-doxygen/html/html/classSVF_1_1ValVar.html +1 -1
  91. package/SVF-doxygen/html/html/dda_8cpp.html +1 -1
  92. package/SVF-doxygen/html/html/dda_8cpp_source.html +1 -1
  93. package/SVF-doxygen/html/html/mta_8cpp.html +1 -1
  94. package/SVF-doxygen/html/html/mta_8cpp_source.html +1 -1
  95. package/SVF-doxygen/html/html/namespaceSVF_1_1LLVMUtil.html +63 -64
  96. package/SVF-doxygen/html/html/saber_8cpp.html +1 -1
  97. package/SVF-doxygen/html/html/saber_8cpp_source.html +1 -1
  98. package/SVF-doxygen/html/html/structSVF_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +1 -1
  99. package/SVF-doxygen/html/html/structSVF_1_1GenericGraphTraits_3_01Inverse_3_01SVF_1_1DCHNode_01_5_01_4_01_4.html +1 -1
  100. package/SVF-doxygen/html/html/structSVF_1_1GenericGraphTraits_3_01SVF_1_1DCHGraph_01_5_01_4.html +2 -2
  101. package/SVF-doxygen/html/html/structSVF_1_1GenericGraphTraits_3_01SVF_1_1DCHNode_01_5_01_4.html +1 -1
  102. package/SVF-doxygen/html/html/svf-ex_8cpp.html +2 -2
  103. package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +2 -2
  104. package/SVF-doxygen/html/html/wpa_8cpp.html +1 -1
  105. package/SVF-doxygen/html/html/wpa_8cpp_source.html +1 -1
  106. package/include/SVF-LLVM/DCHG.h +2 -0
  107. package/lib/MTA/MHP.cpp +1 -2
  108. package/lib/SVF-LLVM/LLVMUtil.cpp +1 -2
  109. package/package.json +1 -1
@@ -423,7 +423,7 @@ Private Attributes</h2></td></tr>
423
423
 
424
424
  <p class="definition">Definition at line <a class="el" href="MHP_8h_source.html#l00308">308</a> of file <a class="el" href="MHP_8h_source.html">MHP.h</a>.</p>
425
425
  <div class="fragment"><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; : <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a2c6ce7aa04c399746d89230be0e0f1ce">tct</a>(t)</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; {</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a731ece7e21bfa2b08ae16780b55f9f5f">collectSCEVInfo</a>();</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; }</div><div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_a2c6ce7aa04c399746d89230be0e0f1ce"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#a2c6ce7aa04c399746d89230be0e0f1ce">SVF::ForkJoinAnalysis::tct</a></div><div class="ttdeci">TCT * tct</div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00555">MHP.h:555</a></div></div>
426
- <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_a731ece7e21bfa2b08ae16780b55f9f5f"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#a731ece7e21bfa2b08ae16780b55f9f5f">SVF::ForkJoinAnalysis::collectSCEVInfo</a></div><div class="ttdeci">void collectSCEVInfo()</div><div class="ttdoc">functions </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8cpp_source.html#l00657">MHP.cpp:657</a></div></div>
426
+ <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_a731ece7e21bfa2b08ae16780b55f9f5f"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#a731ece7e21bfa2b08ae16780b55f9f5f">SVF::ForkJoinAnalysis::collectSCEVInfo</a></div><div class="ttdeci">void collectSCEVInfo()</div><div class="ttdoc">functions </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8cpp_source.html#l00656">MHP.cpp:656</a></div></div>
427
427
  </div><!-- fragment -->
428
428
  </div>
429
429
  </div>
@@ -686,9 +686,9 @@ Private Attributes</h2></td></tr>
686
686
  <p>context-sensitive forward traversal from each fork site. Generate following results (1) fork join pair, maps a context-sensitive join site to its corresponding thread ids (2) never happen-in-parallel thread pairs</p>
687
687
  <p>Context-sensitive forward traversal from each fork site </p>
688
688
 
689
- <p class="definition">Definition at line <a class="el" href="MHP_8cpp_source.html#l00711">711</a> of file <a class="el" href="MHP_8cpp_source.html">MHP.cpp</a>.</p>
690
- <div class="fragment"><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160;{</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> std::pair&lt;const NodeID, TCTNode*&gt;&amp; tpair : *<a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a2c6ce7aa04c399746d89230be0e0f1ce">tct</a>)</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; {</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThread.html">CxtThread</a>&amp; ct = tpair.second-&gt;getCxtThread();</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> rootTid = tpair.first;</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a7965a276a3a12d532c9967de13d4cc8a">clearFlagMap</a>();</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* forkInst = ct.<a class="code" href="classSVF_1_1CxtThread.html#addee4e560a470eec9fbbf17efee906a9">getThread</a>())</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; {</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; <a class="code" href="namespaceSVF.html#ab700523619b089b952498f39a7f5b6b1">CallStrCxt</a> forkSiteCxt = tct-&gt;getCxtOfCxtThread(ct);</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* exitInst = <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ae9fe4c9382f13d339db3baa39d956b05">getExitInstOfParentRoutineFun</a>(rootTid);</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160;</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a613d763731058899e6819acdb2d7315f">InstVec</a>&amp; nextInsts = forkInst-&gt;getSuccInstructions();</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* ni : nextInsts)</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; {</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a> cs(forkSiteCxt, ni);</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ac483d3b0e9084c2033e177eda9ac9215">markCxtStmtFlag</a>(cs, <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631a2abecc56b7d5c644f7e14c98d33d0a0a">TDAlive</a>);</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; }</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160;</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; <span class="keywordflow">while</span> (!<a class="code" href="classSVF_1_1ForkJoinAnalysis.html#acccf53d174cac3275da0d79c89a73916">cxtStmtList</a>.<a class="code" href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">empty</a>())</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; {</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a> cts = <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a4d893583db922444c6a29923bf3d05d3">popFromCTSWorkList</a>();</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* curInst = cts.<a class="code" href="classSVF_1_1CxtStmt.html#a0b593c4ba425937212e2889e64ce4791">getStmt</a>();</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; <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>() &lt;&lt; <span class="stringliteral">&quot;-----\nForkJoinAnalysis root thread: &quot;</span> &lt;&lt; tpair.first &lt;&lt; <span class="stringliteral">&quot; &quot;</span>);</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a217a1ccdaec1abb103cf6b0373631234">DMTA</a>, cts.<a class="code" href="classSVF_1_1CxtStmt.html#a56e2767c327a383db09dca96edb19614">dump</a>());</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; <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>() &lt;&lt; <span class="stringliteral">&quot;-----\n&quot;</span>);</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; <a class="code" href="classSVF_1_1PTACallGraph.html#a5f5a5ec7e707a21994d301cc07d32a5a">PTACallGraph::FunctionSet</a> callees;</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a66965759d876309c64faf4b755afc2a7">isTDFork</a>(curInst))</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; {</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#adddbc09b7b99170cd0941f22ccc7e561">handleFork</a>(cts, rootTid);</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; }</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a97151d74790b2853249d0cc94bb0904f">isTDJoin</a>(curInst))</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; {</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ae4d0ee03b30220793d24f814e75a440e">handleJoin</a>(cts, rootTid);</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; }</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#afdc3358522417de9a0d3a181a329f722">SVFUtil::isCallSite</a>(curInst) &amp;&amp; tct-&gt;isCandidateFun(<a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a1c34a3617488e152104e3625c975f608">getCallee</a>(curInst, callees)))</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; {</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160;</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ab636777379aca0b53a06e4888d4b4c6b">handleCall</a>(cts, rootTid);</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; }</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (curInst-&gt;<a class="code" href="classSVF_1_1SVFInstruction.html#a454f676881eecf4b7399649a81180b5d">isRetInst</a>())</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; {</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a30e5ef1322216857513047d23b525829">handleRet</a>(cts);</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; }</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; {</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#add09218cce8d8bd8dd9e73b2d26a5797">handleIntra</a>(cts);</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; }</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160;</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; <span class="keywordflow">if</span> (curInst == exitInst)</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; {</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a149114898b13e1430c8fbb60978ca4f5">getMarkedFlag</a>(cts) != <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631a2abecc56b7d5c644f7e14c98d33d0a0a">TDAlive</a>)</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a02dad7e9ae45a1751c4548dd9991a8b4">addToFullJoin</a>(tct-&gt;getParentThread(rootTid), rootTid);</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a6ead92486459ec7f94a8375c7f96faca">addToPartial</a>(tct-&gt;getParentThread(rootTid), rootTid);</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; }</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; }</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; }</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; }</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160;}</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>
691
- <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_ab636777379aca0b53a06e4888d4b4c6b"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#ab636777379aca0b53a06e4888d4b4c6b">SVF::ForkJoinAnalysis::handleCall</a></div><div class="ttdeci">void handleCall(const CxtStmt &amp;cts, NodeID rootTid)</div><div class="ttdoc">Handle call. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8cpp_source.html#l00865">MHP.cpp:865</a></div></div>
689
+ <p class="definition">Definition at line <a class="el" href="MHP_8cpp_source.html#l00710">710</a> of file <a class="el" href="MHP_8cpp_source.html">MHP.cpp</a>.</p>
690
+ <div class="fragment"><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160;{</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> std::pair&lt;const NodeID, TCTNode*&gt;&amp; tpair : *<a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a2c6ce7aa04c399746d89230be0e0f1ce">tct</a>)</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; {</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThread.html">CxtThread</a>&amp; ct = tpair.second-&gt;getCxtThread();</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> rootTid = tpair.first;</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a7965a276a3a12d532c9967de13d4cc8a">clearFlagMap</a>();</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* forkInst = ct.<a class="code" href="classSVF_1_1CxtThread.html#addee4e560a470eec9fbbf17efee906a9">getThread</a>())</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; {</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; <a class="code" href="namespaceSVF.html#ab700523619b089b952498f39a7f5b6b1">CallStrCxt</a> forkSiteCxt = tct-&gt;getCxtOfCxtThread(ct);</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* exitInst = <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ae9fe4c9382f13d339db3baa39d956b05">getExitInstOfParentRoutineFun</a>(rootTid);</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160;</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a613d763731058899e6819acdb2d7315f">InstVec</a>&amp; nextInsts = forkInst-&gt;getSuccInstructions();</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* ni : nextInsts)</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; {</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a> cs(forkSiteCxt, ni);</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ac483d3b0e9084c2033e177eda9ac9215">markCxtStmtFlag</a>(cs, <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631a2abecc56b7d5c644f7e14c98d33d0a0a">TDAlive</a>);</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; }</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160;</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; <span class="keywordflow">while</span> (!<a class="code" href="classSVF_1_1ForkJoinAnalysis.html#acccf53d174cac3275da0d79c89a73916">cxtStmtList</a>.<a class="code" href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">empty</a>())</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; {</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a> cts = <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a4d893583db922444c6a29923bf3d05d3">popFromCTSWorkList</a>();</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* curInst = cts.<a class="code" href="classSVF_1_1CxtStmt.html#a0b593c4ba425937212e2889e64ce4791">getStmt</a>();</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; <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>() &lt;&lt; <span class="stringliteral">&quot;-----\nForkJoinAnalysis root thread: &quot;</span> &lt;&lt; tpair.first &lt;&lt; <span class="stringliteral">&quot; &quot;</span>);</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a217a1ccdaec1abb103cf6b0373631234">DMTA</a>, cts.<a class="code" href="classSVF_1_1CxtStmt.html#a56e2767c327a383db09dca96edb19614">dump</a>());</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; <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>() &lt;&lt; <span class="stringliteral">&quot;-----\n&quot;</span>);</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; <a class="code" href="classSVF_1_1PTACallGraph.html#a5f5a5ec7e707a21994d301cc07d32a5a">PTACallGraph::FunctionSet</a> callees;</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a66965759d876309c64faf4b755afc2a7">isTDFork</a>(curInst))</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; {</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#adddbc09b7b99170cd0941f22ccc7e561">handleFork</a>(cts, rootTid);</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; }</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a97151d74790b2853249d0cc94bb0904f">isTDJoin</a>(curInst))</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; {</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ae4d0ee03b30220793d24f814e75a440e">handleJoin</a>(cts, rootTid);</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; }</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#afdc3358522417de9a0d3a181a329f722">SVFUtil::isCallSite</a>(curInst) &amp;&amp; tct-&gt;isCandidateFun(<a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a1c34a3617488e152104e3625c975f608">getCallee</a>(curInst, callees)))</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; {</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160;</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ab636777379aca0b53a06e4888d4b4c6b">handleCall</a>(cts, rootTid);</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; }</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (curInst-&gt;<a class="code" href="classSVF_1_1SVFInstruction.html#a454f676881eecf4b7399649a81180b5d">isRetInst</a>())</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; {</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a30e5ef1322216857513047d23b525829">handleRet</a>(cts);</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; }</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; {</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#add09218cce8d8bd8dd9e73b2d26a5797">handleIntra</a>(cts);</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; }</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160;</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; <span class="keywordflow">if</span> (curInst == exitInst)</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; {</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a149114898b13e1430c8fbb60978ca4f5">getMarkedFlag</a>(cts) != <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631a2abecc56b7d5c644f7e14c98d33d0a0a">TDAlive</a>)</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a02dad7e9ae45a1751c4548dd9991a8b4">addToFullJoin</a>(tct-&gt;getParentThread(rootTid), rootTid);</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a6ead92486459ec7f94a8375c7f96faca">addToPartial</a>(tct-&gt;getParentThread(rootTid), rootTid);</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; }</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; }</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; }</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; }</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160;}</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>
691
+ <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_ab636777379aca0b53a06e4888d4b4c6b"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#ab636777379aca0b53a06e4888d4b4c6b">SVF::ForkJoinAnalysis::handleCall</a></div><div class="ttdeci">void handleCall(const CxtStmt &amp;cts, NodeID rootTid)</div><div class="ttdoc">Handle call. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8cpp_source.html#l00864">MHP.cpp:864</a></div></div>
692
692
  <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_a149114898b13e1430c8fbb60978ca4f5"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#a149114898b13e1430c8fbb60978ca4f5">SVF::ForkJoinAnalysis::getMarkedFlag</a></div><div class="ttdeci">ValDomain getMarkedFlag(const CxtStmt &amp;cs)</div><div class="ttdoc">Mark thread flags for cxtStmt. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00414">MHP.h:414</a></div></div>
693
693
  <div class="ttc" id="namespaceSVF_html_a350ae9bf8606bdfe23c8679681b969dc"><div class="ttname"><a href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="include_2MTA_2MTAResultValidator_8h_source.html#l00020">MTAResultValidator.h:20</a></div></div>
694
694
  <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_a02dad7e9ae45a1751c4548dd9991a8b4"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#a02dad7e9ae45a1751c4548dd9991a8b4">SVF::ForkJoinAnalysis::addToFullJoin</a></div><div class="ttdeci">void addToFullJoin(NodeID tid1, NodeID tid2)</div><div class="ttdoc">full join and partial join </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00540">MHP.h:540</a></div></div>
@@ -701,7 +701,7 @@ Private Attributes</h2></td></tr>
701
701
  <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_a6ead92486459ec7f94a8375c7f96faca"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#a6ead92486459ec7f94a8375c7f96faca">SVF::ForkJoinAnalysis::addToPartial</a></div><div class="ttdeci">void addToPartial(NodeID tid1, NodeID tid2)</div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00544">MHP.h:544</a></div></div>
702
702
  <div class="ttc" id="namespaceSVF_html_ab700523619b089b952498f39a7f5b6b1"><div class="ttname"><a href="namespaceSVF.html#ab700523619b089b952498f39a7f5b6b1">SVF::CallStrCxt</a></div><div class="ttdeci">std::vector&lt; u32_t &gt; CallStrCxt</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00119">SVFType.h:119</a></div></div>
703
703
  <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>
704
- <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_ae4d0ee03b30220793d24f814e75a440e"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#ae4d0ee03b30220793d24f814e75a440e">SVF::ForkJoinAnalysis::handleJoin</a></div><div class="ttdeci">void handleJoin(const CxtStmt &amp;cts, NodeID rootTid)</div><div class="ttdoc">Handle join. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8cpp_source.html#l00800">MHP.cpp:800</a></div></div>
704
+ <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_ae4d0ee03b30220793d24f814e75a440e"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#ae4d0ee03b30220793d24f814e75a440e">SVF::ForkJoinAnalysis::handleJoin</a></div><div class="ttdeci">void handleJoin(const CxtStmt &amp;cts, NodeID rootTid)</div><div class="ttdoc">Handle join. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8cpp_source.html#l00799">MHP.cpp:799</a></div></div>
705
705
  <div class="ttc" id="classSVF_1_1CxtStmt_html_a0b593c4ba425937212e2889e64ce4791"><div class="ttname"><a href="classSVF_1_1CxtStmt.html#a0b593c4ba425937212e2889e64ce4791">SVF::CxtStmt::getStmt</a></div><div class="ttdeci">const SVFInstruction * getStmt() const</div><div class="ttdoc">Return current statement. </div><div class="ttdef"><b>Definition:</b> <a href="CxtStmt_8h_source.html#l00062">CxtStmt.h:62</a></div></div>
706
706
  <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_ac483d3b0e9084c2033e177eda9ac9215"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#ac483d3b0e9084c2033e177eda9ac9215">SVF::ForkJoinAnalysis::markCxtStmtFlag</a></div><div class="ttdeci">void markCxtStmtFlag(const CxtStmt &amp;tgr, ValDomain flag)</div><div class="ttdoc">Initialize TDAlive and TDDead flags. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00426">MHP.h:426</a></div></div>
707
707
  <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 &amp; 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>
@@ -713,14 +713,14 @@ Private Attributes</h2></td></tr>
713
713
  <div class="ttc" id="classSVF_1_1CxtStmt_html"><div class="ttname"><a href="classSVF_1_1CxtStmt.html">SVF::CxtStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="CxtStmt_8h_source.html#l00041">CxtStmt.h:41</a></div></div>
714
714
  <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_ae9fe4c9382f13d339db3baa39d956b05"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#ae9fe4c9382f13d339db3baa39d956b05">SVF::ForkJoinAnalysis::getExitInstOfParentRoutineFun</a></div><div class="ttdeci">const SVFInstruction * getExitInstOfParentRoutineFun(NodeID tid) const</div><div class="ttdoc">Get exit instruction of the start routine function of tid&amp;#39;s parent thread. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00360">MHP.h:360</a></div></div>
715
715
  <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_a4d893583db922444c6a29923bf3d05d3"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#a4d893583db922444c6a29923bf3d05d3">SVF::ForkJoinAnalysis::popFromCTSWorkList</a></div><div class="ttdeci">CxtStmt popFromCTSWorkList()</div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00470">MHP.h:470</a></div></div>
716
- <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_a30e5ef1322216857513047d23b525829"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#a30e5ef1322216857513047d23b525829">SVF::ForkJoinAnalysis::handleRet</a></div><div class="ttdeci">void handleRet(const CxtStmt &amp;cts)</div><div class="ttdoc">Handle return. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8cpp_source.html#l00890">MHP.cpp:890</a></div></div>
716
+ <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_a30e5ef1322216857513047d23b525829"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#a30e5ef1322216857513047d23b525829">SVF::ForkJoinAnalysis::handleRet</a></div><div class="ttdeci">void handleRet(const CxtStmt &amp;cts)</div><div class="ttdoc">Handle return. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8cpp_source.html#l00889">MHP.cpp:889</a></div></div>
717
717
  <div class="ttc" id="classSVF_1_1SVFInstruction_html_a454f676881eecf4b7399649a81180b5d"><div class="ttname"><a href="classSVF_1_1SVFInstruction.html#a454f676881eecf4b7399649a81180b5d">SVF::SVFInstruction::isRetInst</a></div><div class="ttdeci">bool isRetInst() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00629">SVFValue.h:629</a></div></div>
718
718
  <div class="ttc" id="classSVF_1_1CxtStmt_html_a56e2767c327a383db09dca96edb19614"><div class="ttname"><a href="classSVF_1_1CxtStmt.html#a56e2767c327a383db09dca96edb19614">SVF::CxtStmt::dump</a></div><div class="ttdeci">void dump() const</div><div class="ttdoc">Dump CxtStmt. </div><div class="ttdef"><b>Definition:</b> <a href="CxtStmt_8h_source.html#l00109">CxtStmt.h:109</a></div></div>
719
719
  <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_a8d40e687caf8999369621ed385dfc631a2abecc56b7d5c644f7e14c98d33d0a0a"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631a2abecc56b7d5c644f7e14c98d33d0a0a">SVF::ForkJoinAnalysis::TDAlive</a></div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00296">MHP.h:296</a></div></div>
720
720
  <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>
721
- <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_adddbc09b7b99170cd0941f22ccc7e561"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#adddbc09b7b99170cd0941f22ccc7e561">SVF::ForkJoinAnalysis::handleFork</a></div><div class="ttdeci">void handleFork(const CxtStmt &amp;cts, NodeID rootTid)</div><div class="ttdoc">Handle fork. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8cpp_source.html#l00773">MHP.cpp:773</a></div></div>
721
+ <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_adddbc09b7b99170cd0941f22ccc7e561"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#adddbc09b7b99170cd0941f22ccc7e561">SVF::ForkJoinAnalysis::handleFork</a></div><div class="ttdeci">void handleFork(const CxtStmt &amp;cts, NodeID rootTid)</div><div class="ttdoc">Handle fork. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8cpp_source.html#l00772">MHP.cpp:772</a></div></div>
722
722
  <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_a7965a276a3a12d532c9967de13d4cc8a"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#a7965a276a3a12d532c9967de13d4cc8a">SVF::ForkJoinAnalysis::clearFlagMap</a></div><div class="ttdeci">void clearFlagMap()</div><div class="ttdoc">Clear flags. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00457">MHP.h:457</a></div></div>
723
- <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_add09218cce8d8bd8dd9e73b2d26a5797"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#add09218cce8d8bd8dd9e73b2d26a5797">SVF::ForkJoinAnalysis::handleIntra</a></div><div class="ttdeci">void handleIntra(const CxtStmt &amp;cts)</div><div class="ttdoc">Handle intra. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8cpp_source.html#l00935">MHP.cpp:935</a></div></div>
723
+ <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_add09218cce8d8bd8dd9e73b2d26a5797"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#add09218cce8d8bd8dd9e73b2d26a5797">SVF::ForkJoinAnalysis::handleIntra</a></div><div class="ttdeci">void handleIntra(const CxtStmt &amp;cts)</div><div class="ttdoc">Handle intra. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8cpp_source.html#l00934">MHP.cpp:934</a></div></div>
724
724
  </div><!-- fragment -->
725
725
  </div>
726
726
  </div>
@@ -774,8 +774,8 @@ Private Attributes</h2></td></tr>
774
774
  <p>functions </p>
775
775
  <p>Collect SCEV pass information for pointers at fork/join sites Because ScalarEvolution is a function pass, previous knowledge of a function may be overwritten when analyzing a new function. We use a internal wrapper class PTASCEV to record all the necessary information for determining symmetric fork/join inside loops </p>
776
776
 
777
- <p class="definition">Definition at line <a class="el" href="MHP_8cpp_source.html#l00657">657</a> of file <a class="el" href="MHP_8cpp_source.html">MHP.cpp</a>.</p>
778
- <div class="fragment"><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160;{</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const SVFInstruction*&gt;</a> CallInstSet;</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const SVFFunction*, CallInstSet&gt;</a> FunToFJSites;</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; FunToFJSites funToFJSites;</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160;</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; <span class="keywordflow">for</span> (ThreadCallGraph::CallSiteSet::const_iterator it = <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a2c6ce7aa04c399746d89230be0e0f1ce">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#a1602d02773578bca73dcbd29b95c67d0">getThreadCallGraph</a>()-&gt;<a class="code" href="classSVF_1_1ThreadCallGraph.html#a37f2e076713a9aeb0e4313fb05dfb92e">forksitesBegin</a>(),</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; eit = <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a2c6ce7aa04c399746d89230be0e0f1ce">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#a1602d02773578bca73dcbd29b95c67d0">getThreadCallGraph</a>()-&gt;<a class="code" href="classSVF_1_1ThreadCallGraph.html#a1ebbd26c17cff1c1a1bee9caa9a8f825">forksitesEnd</a>();</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; it != eit; ++it)</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; {</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* fork = (*it)-&gt;getCallSite();</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; funToFJSites[fork-&gt;<a class="code" href="classSVF_1_1SVFInstruction.html#aef7ad257ea809101df33779463907f3e">getFunction</a>()].insert(fork);</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; }</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160;</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; <span class="keywordflow">for</span> (ThreadCallGraph::CallSiteSet::const_iterator it = <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a2c6ce7aa04c399746d89230be0e0f1ce">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#a1602d02773578bca73dcbd29b95c67d0">getThreadCallGraph</a>()-&gt;<a class="code" href="classSVF_1_1ThreadCallGraph.html#a98ecfe14be2d38d292b5919716cdd29d">joinsitesBegin</a>(),</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; eit = <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a2c6ce7aa04c399746d89230be0e0f1ce">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#a1602d02773578bca73dcbd29b95c67d0">getThreadCallGraph</a>()-&gt;<a class="code" href="classSVF_1_1ThreadCallGraph.html#a50502f398e5eac9c6da3e26ea6052057">joinsitesEnd</a>();</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; it != eit; ++it)</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; {</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* join = (*it)-&gt;getCallSite();</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; funToFJSites[join-&gt;<a class="code" href="classSVF_1_1SVFInstruction.html#aef7ad257ea809101df33779463907f3e">getFunction</a>()].insert(join);</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; }</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160;</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; <span class="comment">// for(FunToFJSites::const_iterator it = funToFJSites.begin(), eit = funToFJSites.end(); it!=eit; ++it)</span></div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; <span class="comment">// {</span></div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; <span class="comment">// // ScalarEvolution* SE = MTA::getSE(it-&gt;first);</span></div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; <span class="comment">// for(CallInstSet::const_iterator sit = it-&gt;second.begin(), esit = it-&gt;second.end(); sit!=esit; ++sit)</span></div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; <span class="comment">// {</span></div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; <span class="comment">// const SVFInstruction* callInst = *sit;</span></div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; <span class="comment">// if(tct-&gt;getThreadCallGraph()-&gt;isForksite(getCBN(callInst)))</span></div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; <span class="comment">// {</span></div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; <span class="comment">// // const SVFValue* forkSiteTidPtr = getForkedThread(callInst);</span></div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; <span class="comment">// // const SCEV *forkSiteTidPtrSCEV = SE-&gt;getSCEV(const_cast&lt;Value*&gt;(forkSiteTidPtr));</span></div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; <span class="comment">// // const SCEV *baseForkTidPtrSCEV = SE-&gt;getSCEV(const_cast&lt;Value*&gt;(getBasePtr(forkSiteTidPtr)));</span></div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; <span class="comment">// // forkSiteTidPtrSCEV = getSCEVMinusExpr(forkSiteTidPtrSCEV, baseForkTidPtrSCEV, SE);</span></div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; <span class="comment">// // PTASCEV scev(forkSiteTidPtr,nullptr,nullptr);</span></div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; <span class="comment">// // fkjnToPTASCEVMap.insert(std::make_pair(callInst,scev));</span></div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; <span class="comment">// }</span></div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; <span class="comment">// else</span></div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; <span class="comment">// {</span></div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; <span class="comment">// // const SVFValue* joinSiteTidPtr = getJoinedThread(callInst);</span></div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; <span class="comment">// //const SCEV *joinSiteTidPtrSCEV = SE-&gt;getSCEV(const_cast&lt;Value*&gt;(joinSiteTidPtr));</span></div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; <span class="comment">// //const SCEV *baseJoinTidPtrSCEV = SE-&gt;getSCEV(const_cast&lt;Value*&gt;(getBasePtr(joinSiteTidPtr)));</span></div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; <span class="comment">// //joinSiteTidPtrSCEV = getSCEVMinusExpr(joinSiteTidPtrSCEV, baseJoinTidPtrSCEV, SE);</span></div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160;</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; <span class="comment">// // PTASCEV scev(joinSiteTidPtr,nullptr,nullptr);</span></div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; <span class="comment">// // fkjnToPTASCEVMap.insert(std::make_pair(callInst,scev));</span></div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; <span class="comment">// }</span></div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; <span class="comment">// }</span></div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; <span class="comment">// }</span></div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160;}</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>
777
+ <p class="definition">Definition at line <a class="el" href="MHP_8cpp_source.html#l00656">656</a> of file <a class="el" href="MHP_8cpp_source.html">MHP.cpp</a>.</p>
778
+ <div class="fragment"><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160;{</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const SVFInstruction*&gt;</a> CallInstSet;</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const SVFFunction*, CallInstSet&gt;</a> FunToFJSites;</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; FunToFJSites funToFJSites;</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160;</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; <span class="keywordflow">for</span> (ThreadCallGraph::CallSiteSet::const_iterator it = <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a2c6ce7aa04c399746d89230be0e0f1ce">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#a1602d02773578bca73dcbd29b95c67d0">getThreadCallGraph</a>()-&gt;<a class="code" href="classSVF_1_1ThreadCallGraph.html#a37f2e076713a9aeb0e4313fb05dfb92e">forksitesBegin</a>(),</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; eit = <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a2c6ce7aa04c399746d89230be0e0f1ce">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#a1602d02773578bca73dcbd29b95c67d0">getThreadCallGraph</a>()-&gt;<a class="code" href="classSVF_1_1ThreadCallGraph.html#a1ebbd26c17cff1c1a1bee9caa9a8f825">forksitesEnd</a>();</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; it != eit; ++it)</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; {</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* fork = (*it)-&gt;getCallSite();</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; funToFJSites[fork-&gt;<a class="code" href="classSVF_1_1SVFInstruction.html#aef7ad257ea809101df33779463907f3e">getFunction</a>()].insert(fork);</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; }</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160;</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; <span class="keywordflow">for</span> (ThreadCallGraph::CallSiteSet::const_iterator it = <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a2c6ce7aa04c399746d89230be0e0f1ce">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#a1602d02773578bca73dcbd29b95c67d0">getThreadCallGraph</a>()-&gt;<a class="code" href="classSVF_1_1ThreadCallGraph.html#a98ecfe14be2d38d292b5919716cdd29d">joinsitesBegin</a>(),</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; eit = <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a2c6ce7aa04c399746d89230be0e0f1ce">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#a1602d02773578bca73dcbd29b95c67d0">getThreadCallGraph</a>()-&gt;<a class="code" href="classSVF_1_1ThreadCallGraph.html#a50502f398e5eac9c6da3e26ea6052057">joinsitesEnd</a>();</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; it != eit; ++it)</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; {</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* join = (*it)-&gt;getCallSite();</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; funToFJSites[join-&gt;<a class="code" href="classSVF_1_1SVFInstruction.html#aef7ad257ea809101df33779463907f3e">getFunction</a>()].insert(join);</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; }</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160;</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; <span class="comment">// for(FunToFJSites::const_iterator it = funToFJSites.begin(), eit = funToFJSites.end(); it!=eit; ++it)</span></div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; <span class="comment">// {</span></div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; <span class="comment">// // ScalarEvolution* SE = MTA::getSE(it-&gt;first);</span></div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; <span class="comment">// for(CallInstSet::const_iterator sit = it-&gt;second.begin(), esit = it-&gt;second.end(); sit!=esit; ++sit)</span></div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; <span class="comment">// {</span></div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; <span class="comment">// const SVFInstruction* callInst = *sit;</span></div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; <span class="comment">// if(tct-&gt;getThreadCallGraph()-&gt;isForksite(getCBN(callInst)))</span></div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; <span class="comment">// {</span></div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; <span class="comment">// // const SVFValue* forkSiteTidPtr = getForkedThread(callInst);</span></div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; <span class="comment">// // const SCEV *forkSiteTidPtrSCEV = SE-&gt;getSCEV(const_cast&lt;Value*&gt;(forkSiteTidPtr));</span></div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; <span class="comment">// // const SCEV *baseForkTidPtrSCEV = SE-&gt;getSCEV(const_cast&lt;Value*&gt;(getBasePtr(forkSiteTidPtr)));</span></div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; <span class="comment">// // forkSiteTidPtrSCEV = getSCEVMinusExpr(forkSiteTidPtrSCEV, baseForkTidPtrSCEV, SE);</span></div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; <span class="comment">// // PTASCEV scev(forkSiteTidPtr,nullptr,nullptr);</span></div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; <span class="comment">// // fkjnToPTASCEVMap.insert(std::make_pair(callInst,scev));</span></div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; <span class="comment">// }</span></div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; <span class="comment">// else</span></div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; <span class="comment">// {</span></div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; <span class="comment">// // const SVFValue* joinSiteTidPtr = getJoinedThread(callInst);</span></div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; <span class="comment">// //const SCEV *joinSiteTidPtrSCEV = SE-&gt;getSCEV(const_cast&lt;Value*&gt;(joinSiteTidPtr));</span></div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; <span class="comment">// //const SCEV *baseJoinTidPtrSCEV = SE-&gt;getSCEV(const_cast&lt;Value*&gt;(getBasePtr(joinSiteTidPtr)));</span></div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; <span class="comment">// //joinSiteTidPtrSCEV = getSCEVMinusExpr(joinSiteTidPtrSCEV, baseJoinTidPtrSCEV, SE);</span></div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160;</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; <span class="comment">// // PTASCEV scev(joinSiteTidPtr,nullptr,nullptr);</span></div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; <span class="comment">// // fkjnToPTASCEVMap.insert(std::make_pair(callInst,scev));</span></div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; <span class="comment">// }</span></div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; <span class="comment">// }</span></div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; <span class="comment">// }</span></div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160;}</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>
779
779
  <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_a2c6ce7aa04c399746d89230be0e0f1ce"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#a2c6ce7aa04c399746d89230be0e0f1ce">SVF::ForkJoinAnalysis::tct</a></div><div class="ttdeci">TCT * tct</div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00555">MHP.h:555</a></div></div>
780
780
  <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_a1ebbd26c17cff1c1a1bee9caa9a8f825"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#a1ebbd26c17cff1c1a1bee9caa9a8f825">SVF::ThreadCallGraph::forksitesEnd</a></div><div class="ttdeci">CallSiteSet::const_iterator forksitesEnd() const</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00277">ThreadCallGraph.h:277</a></div></div>
781
781
  <div class="ttc" id="namespaceSVF_html_a8234d4b959abc9123993bcff4eee34c1"><div class="ttname"><a href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">SVF::Map</a></div><div class="ttdeci">std::unordered_map&lt; Key, Value, Hash, KeyEqual, Allocator &gt; Map</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00099">SVFType.h:99</a></div></div>
@@ -878,8 +878,8 @@ Private Attributes</h2></td></tr>
878
878
  <p>Get directly and indirectly joined threadIDs based on a context-sensitive join site. </p>
879
879
  <p>Return thread id(s) which are joined at this join site (1) thread t1 directly joins thread t2 (2) thread t1 indirectly joins thread t3 via directly joining t2 (t2 fully joins its child thread t3) </p>
880
880
 
881
- <p class="definition">Definition at line <a class="el" href="MHP_8cpp_source.html#l00954">954</a> of file <a class="el" href="MHP_8cpp_source.html">MHP.cpp</a>.</p>
882
- <div class="fragment"><div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160;{</div><div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160;</div><div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; CxtStmtToTIDMap::const_iterator it = <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ab5678bd46e573070827cc413f0e0d5be">dirAndIndJoinMap</a>.find(cs);</div><div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; <span class="keywordflow">if</span> (it != <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ab5678bd46e573070827cc413f0e0d5be">dirAndIndJoinMap</a>.end())</div><div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div><div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160;</div><div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a>&amp; directJoinTids = <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a819ef18524ee9104b920d1a465c61da1">getDirectlyJoinedTid</a>(cs);</div><div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160; <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> allJoinTids = directJoinTids;</div><div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160;</div><div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160; <a class="code" href="classSVF_1_1FIFOWorkList.html">FIFOWorkList&lt;NodeID&gt;</a> worklist;</div><div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">id</span> : directJoinTids)</div><div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160; {</div><div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160; worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a0df409a67428e528321869d201f2a474">push</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160; }</div><div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160;</div><div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160; <span class="keywordflow">while</span> (!worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">empty</a>())</div><div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160; {</div><div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> tid = worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div><div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160; <a class="code" href="classSVF_1_1TCTNode.html">TCTNode</a>* node = <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a2c6ce7aa04c399746d89230be0e0f1ce">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#a7b4ad0b052e1f8b6869733eef15f4e4d">getTCTNode</a>(tid);</div><div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160; <span class="keywordflow">for</span> (TCT::ThreadCreateEdgeSet::const_iterator it = <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a2c6ce7aa04c399746d89230be0e0f1ce">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#a511c2ee4cfdc01a720135b2cd493fe3b">getChildrenBegin</a>(node), eit = <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a2c6ce7aa04c399746d89230be0e0f1ce">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#af47837e30a80e8d6684f3ee6001afb7a">getChildrenEnd</a>(node); it != eit; ++it)</div><div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160; {</div><div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> childTid = (*it)-&gt;getDstID();</div><div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ab55532eefbcef639ced957ad82fbd340">isFullJoin</a>(tid, childTid))</div><div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160; {</div><div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; allJoinTids.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(childTid);</div><div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160; worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a0df409a67428e528321869d201f2a474">push</a>(childTid);</div><div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160; }</div><div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160; }</div><div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160; }</div><div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160;</div><div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ab5678bd46e573070827cc413f0e0d5be">dirAndIndJoinMap</a>[cs] = allJoinTids;</div><div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160;</div><div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; <span class="keywordflow">return</span> allJoinTids;</div><div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160;}</div><div class="ttc" id="namespaceSVF_html_a350ae9bf8606bdfe23c8679681b969dc"><div class="ttname"><a href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="include_2MTA_2MTAResultValidator_8h_source.html#l00020">MTAResultValidator.h:20</a></div></div>
881
+ <p class="definition">Definition at line <a class="el" href="MHP_8cpp_source.html#l00953">953</a> of file <a class="el" href="MHP_8cpp_source.html">MHP.cpp</a>.</p>
882
+ <div class="fragment"><div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160;{</div><div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160;</div><div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; CxtStmtToTIDMap::const_iterator it = <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ab5678bd46e573070827cc413f0e0d5be">dirAndIndJoinMap</a>.find(cs);</div><div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; <span class="keywordflow">if</span> (it != <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ab5678bd46e573070827cc413f0e0d5be">dirAndIndJoinMap</a>.end())</div><div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div><div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160;</div><div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a>&amp; directJoinTids = <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a819ef18524ee9104b920d1a465c61da1">getDirectlyJoinedTid</a>(cs);</div><div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160; <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> allJoinTids = directJoinTids;</div><div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160;</div><div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160; <a class="code" href="classSVF_1_1FIFOWorkList.html">FIFOWorkList&lt;NodeID&gt;</a> worklist;</div><div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">id</span> : directJoinTids)</div><div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160; {</div><div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160; worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a0df409a67428e528321869d201f2a474">push</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160; }</div><div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160;</div><div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160; <span class="keywordflow">while</span> (!worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">empty</a>())</div><div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160; {</div><div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160; <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> tid = worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div><div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; <a class="code" href="classSVF_1_1TCTNode.html">TCTNode</a>* node = <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a2c6ce7aa04c399746d89230be0e0f1ce">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#a7b4ad0b052e1f8b6869733eef15f4e4d">getTCTNode</a>(tid);</div><div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160; <span class="keywordflow">for</span> (TCT::ThreadCreateEdgeSet::const_iterator it = <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a2c6ce7aa04c399746d89230be0e0f1ce">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#a511c2ee4cfdc01a720135b2cd493fe3b">getChildrenBegin</a>(node), eit = <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a2c6ce7aa04c399746d89230be0e0f1ce">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#af47837e30a80e8d6684f3ee6001afb7a">getChildrenEnd</a>(node); it != eit; ++it)</div><div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160; {</div><div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160; <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> childTid = (*it)-&gt;getDstID();</div><div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ab55532eefbcef639ced957ad82fbd340">isFullJoin</a>(tid, childTid))</div><div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; {</div><div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160; allJoinTids.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(childTid);</div><div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a0df409a67428e528321869d201f2a474">push</a>(childTid);</div><div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160; }</div><div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160; }</div><div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160; }</div><div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160;</div><div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ab5678bd46e573070827cc413f0e0d5be">dirAndIndJoinMap</a>[cs] = allJoinTids;</div><div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160;</div><div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160; <span class="keywordflow">return</span> allJoinTids;</div><div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160;}</div><div class="ttc" id="namespaceSVF_html_a350ae9bf8606bdfe23c8679681b969dc"><div class="ttname"><a href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="include_2MTA_2MTAResultValidator_8h_source.html#l00020">MTAResultValidator.h:20</a></div></div>
883
883
  <div class="ttc" id="classSVF_1_1TCT_html_a511c2ee4cfdc01a720135b2cd493fe3b"><div class="ttname"><a href="classSVF_1_1TCT.html#a511c2ee4cfdc01a720135b2cd493fe3b">SVF::TCT::getChildrenBegin</a></div><div class="ttdeci">ThreadCreateEdgeSet::const_iterator getChildrenBegin(const TCTNode *node) const</div><div class="ttdoc">Get children and parent nodes. </div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00203">TCT.h:203</a></div></div>
884
884
  <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_a2c6ce7aa04c399746d89230be0e0f1ce"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#a2c6ce7aa04c399746d89230be0e0f1ce">SVF::ForkJoinAnalysis::tct</a></div><div class="ttdeci">TCT * tct</div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00555">MHP.h:555</a></div></div>
885
885
  <div class="ttc" id="classSVF_1_1FIFOWorkList_html_a7056704c224dfb4b57287fe90c004aa8"><div class="ttname"><a href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">SVF::FIFOWorkList::empty</a></div><div class="ttdeci">bool empty() const</div><div class="ttdef"><b>Definition:</b> <a href="WorkList_8h_source.html#l00146">WorkList.h:146</a></div></div>
@@ -1195,8 +1195,8 @@ Private Attributes</h2></td></tr>
1195
1195
 
1196
1196
  <p>Handle call. </p>
1197
1197
 
1198
- <p class="definition">Definition at line <a class="el" href="MHP_8cpp_source.html#l00865">865</a> of file <a class="el" href="MHP_8cpp_source.html">MHP.cpp</a>.</p>
1199
- <div class="fragment"><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160;{</div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160;</div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* call = cts.<a class="code" href="classSVF_1_1CxtStmt.html#a0b593c4ba425937212e2889e64ce4791">getStmt</a>();</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ab700523619b089b952498f39a7f5b6b1">CallStrCxt</a>&amp; curCxt = cts.<a class="code" href="classSVF_1_1CxtStmt.html#a3ce19b8f2de2e199ed4165dbe9d21f28">getContext</a>();</div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cbn = <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a46bd73ec73cc17087f21e8c5b234d0bd">getCBN</a>(call);</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8ad9b8cb0e6300b2ffc55244e53cece6">getTCG</a>()-&gt;hasCallGraphEdge(cbn))</div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; {</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; <span class="keywordflow">for</span> (PTACallGraph::CallGraphEdgeSet::const_iterator cgIt = <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8ad9b8cb0e6300b2ffc55244e53cece6">getTCG</a>()-&gt;getCallEdgeBegin(cbn),</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; ecgIt = <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8ad9b8cb0e6300b2ffc55244e53cece6">getTCG</a>()-&gt;getCallEdgeEnd(cbn);</div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160; cgIt != ecgIt; ++cgIt)</div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160; {</div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svfcallee = (*cgIt)-&gt;getDstNode()-&gt;getFunction();</div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(svfcallee))</div><div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; <a class="code" href="namespaceSVF.html#ab700523619b089b952498f39a7f5b6b1">CallStrCxt</a> newCxt = curCxt;</div><div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a028734f4520172aa5abed48628b44dc3">pushCxt</a>(newCxt, call, svfcallee);</div><div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfEntryInst = svfcallee-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#a793f485e92d12cf407f2ffa41861eb3d">getEntryBlock</a>()-&gt;<a class="code" href="classSVF_1_1SVFBasicBlock.html#a7bde256bc906af7f7204929019f4a33e">front</a>();</div><div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a> newCts(newCxt, svfEntryInst);</div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ac483d3b0e9084c2033e177eda9ac9215">markCxtStmtFlag</a>(newCts, cts);</div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; }</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; }</div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160;}</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>
1198
+ <p class="definition">Definition at line <a class="el" href="MHP_8cpp_source.html#l00864">864</a> of file <a class="el" href="MHP_8cpp_source.html">MHP.cpp</a>.</p>
1199
+ <div class="fragment"><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160;{</div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160;</div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* call = cts.<a class="code" href="classSVF_1_1CxtStmt.html#a0b593c4ba425937212e2889e64ce4791">getStmt</a>();</div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ab700523619b089b952498f39a7f5b6b1">CallStrCxt</a>&amp; curCxt = cts.<a class="code" href="classSVF_1_1CxtStmt.html#a3ce19b8f2de2e199ed4165dbe9d21f28">getContext</a>();</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cbn = <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a46bd73ec73cc17087f21e8c5b234d0bd">getCBN</a>(call);</div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8ad9b8cb0e6300b2ffc55244e53cece6">getTCG</a>()-&gt;hasCallGraphEdge(cbn))</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; {</div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; <span class="keywordflow">for</span> (PTACallGraph::CallGraphEdgeSet::const_iterator cgIt = <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8ad9b8cb0e6300b2ffc55244e53cece6">getTCG</a>()-&gt;getCallEdgeBegin(cbn),</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; ecgIt = <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8ad9b8cb0e6300b2ffc55244e53cece6">getTCG</a>()-&gt;getCallEdgeEnd(cbn);</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; cgIt != ecgIt; ++cgIt)</div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160; {</div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svfcallee = (*cgIt)-&gt;getDstNode()-&gt;getFunction();</div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(svfcallee))</div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; <a class="code" href="namespaceSVF.html#ab700523619b089b952498f39a7f5b6b1">CallStrCxt</a> newCxt = curCxt;</div><div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a028734f4520172aa5abed48628b44dc3">pushCxt</a>(newCxt, call, svfcallee);</div><div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfEntryInst = svfcallee-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#a793f485e92d12cf407f2ffa41861eb3d">getEntryBlock</a>()-&gt;<a class="code" href="classSVF_1_1SVFBasicBlock.html#a7bde256bc906af7f7204929019f4a33e">front</a>();</div><div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160; <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a> newCts(newCxt, svfEntryInst);</div><div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ac483d3b0e9084c2033e177eda9ac9215">markCxtStmtFlag</a>(newCts, cts);</div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; }</div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; }</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160;}</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>
1200
1200
  <div class="ttc" id="classSVF_1_1SVFFunction_html"><div class="ttname"><a href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00257">SVFValue.h:257</a></div></div>
1201
1201
  <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_a46bd73ec73cc17087f21e8c5b234d0bd"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#a46bd73ec73cc17087f21e8c5b234d0bd">SVF::ForkJoinAnalysis::getCBN</a></div><div class="ttdeci">CallICFGNode * getCBN(const SVFInstruction *inst)</div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00407">MHP.h:407</a></div></div>
1202
1202
  <div class="ttc" id="classSVF_1_1SVFFunction_html_a793f485e92d12cf407f2ffa41861eb3d"><div class="ttname"><a href="classSVF_1_1SVFFunction.html#a793f485e92d12cf407f2ffa41861eb3d">SVF::SVFFunction::getEntryBlock</a></div><div class="ttdeci">const SVFBasicBlock * getEntryBlock() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00367">SVFValue.h:367</a></div></div>
@@ -1249,8 +1249,8 @@ Private Attributes</h2></td></tr>
1249
1249
 
1250
1250
  <p>Handle fork. </p>
1251
1251
 
1252
- <p class="definition">Definition at line <a class="el" href="MHP_8cpp_source.html#l00773">773</a> of file <a class="el" href="MHP_8cpp_source.html">MHP.cpp</a>.</p>
1253
- <div class="fragment"><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160;{</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* call = cts.<a class="code" href="classSVF_1_1CxtStmt.html#a0b593c4ba425937212e2889e64ce4791">getStmt</a>();</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ab700523619b089b952498f39a7f5b6b1">CallStrCxt</a>&amp; curCxt = cts.<a class="code" href="classSVF_1_1CxtStmt.html#a3ce19b8f2de2e199ed4165dbe9d21f28">getContext</a>();</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160;</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; assert(<a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a66965759d876309c64faf4b755afc2a7">isTDFork</a>(call));</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cbn = <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a46bd73ec73cc17087f21e8c5b234d0bd">getCBN</a>(call);</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8ad9b8cb0e6300b2ffc55244e53cece6">getTCG</a>()-&gt;hasThreadForkEdge(cbn))</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; {</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; <span class="keywordflow">for</span> (ThreadCallGraph::ForkEdgeSet::const_iterator cgIt = <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8ad9b8cb0e6300b2ffc55244e53cece6">getTCG</a>()-&gt;getForkEdgeBegin(cbn),</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; ecgIt = <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8ad9b8cb0e6300b2ffc55244e53cece6">getTCG</a>()-&gt;getForkEdgeEnd(cbn);</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; cgIt != ecgIt; ++cgIt)</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; {</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* callee = (*cgIt)-&gt;getDstNode()-&gt;getFunction();</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; <a class="code" href="namespaceSVF.html#ab700523619b089b952498f39a7f5b6b1">CallStrCxt</a> newCxt = curCxt;</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a028734f4520172aa5abed48628b44dc3">pushCxt</a>(newCxt, call, callee);</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; <a class="code" href="classSVF_1_1CxtThread.html">CxtThread</a> ct(newCxt, call);</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a149114898b13e1430c8fbb60978ca4f5">getMarkedFlag</a>(cts) != <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631a2abecc56b7d5c644f7e14c98d33d0a0a">TDAlive</a>)</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a647ae6866bb37be850f0bdd5a7341188">addToHBPair</a>(rootTid, <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a2c6ce7aa04c399746d89230be0e0f1ce">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#a7b4ad0b052e1f8b6869733eef15f4e4d">getTCTNode</a>(ct)-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a1505ba82206169f76ea239067797d6c2">addToHPPair</a>(rootTid, <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a2c6ce7aa04c399746d89230be0e0f1ce">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#a7b4ad0b052e1f8b6869733eef15f4e4d">getTCTNode</a>(ct)-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; }</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; }</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#add09218cce8d8bd8dd9e73b2d26a5797">handleIntra</a>(cts);</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160;}</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>
1252
+ <p class="definition">Definition at line <a class="el" href="MHP_8cpp_source.html#l00772">772</a> of file <a class="el" href="MHP_8cpp_source.html">MHP.cpp</a>.</p>
1253
+ <div class="fragment"><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160;{</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* call = cts.<a class="code" href="classSVF_1_1CxtStmt.html#a0b593c4ba425937212e2889e64ce4791">getStmt</a>();</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ab700523619b089b952498f39a7f5b6b1">CallStrCxt</a>&amp; curCxt = cts.<a class="code" href="classSVF_1_1CxtStmt.html#a3ce19b8f2de2e199ed4165dbe9d21f28">getContext</a>();</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160;</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; assert(<a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a66965759d876309c64faf4b755afc2a7">isTDFork</a>(call));</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cbn = <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a46bd73ec73cc17087f21e8c5b234d0bd">getCBN</a>(call);</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8ad9b8cb0e6300b2ffc55244e53cece6">getTCG</a>()-&gt;hasThreadForkEdge(cbn))</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; {</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; <span class="keywordflow">for</span> (ThreadCallGraph::ForkEdgeSet::const_iterator cgIt = <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8ad9b8cb0e6300b2ffc55244e53cece6">getTCG</a>()-&gt;getForkEdgeBegin(cbn),</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; ecgIt = <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8ad9b8cb0e6300b2ffc55244e53cece6">getTCG</a>()-&gt;getForkEdgeEnd(cbn);</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; cgIt != ecgIt; ++cgIt)</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; {</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* callee = (*cgIt)-&gt;getDstNode()-&gt;getFunction();</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; <a class="code" href="namespaceSVF.html#ab700523619b089b952498f39a7f5b6b1">CallStrCxt</a> newCxt = curCxt;</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a028734f4520172aa5abed48628b44dc3">pushCxt</a>(newCxt, call, callee);</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; <a class="code" href="classSVF_1_1CxtThread.html">CxtThread</a> ct(newCxt, call);</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a149114898b13e1430c8fbb60978ca4f5">getMarkedFlag</a>(cts) != <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631a2abecc56b7d5c644f7e14c98d33d0a0a">TDAlive</a>)</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a647ae6866bb37be850f0bdd5a7341188">addToHBPair</a>(rootTid, <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a2c6ce7aa04c399746d89230be0e0f1ce">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#a7b4ad0b052e1f8b6869733eef15f4e4d">getTCTNode</a>(ct)-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a1505ba82206169f76ea239067797d6c2">addToHPPair</a>(rootTid, <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a2c6ce7aa04c399746d89230be0e0f1ce">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#a7b4ad0b052e1f8b6869733eef15f4e4d">getTCTNode</a>(ct)-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; }</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; }</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#add09218cce8d8bd8dd9e73b2d26a5797">handleIntra</a>(cts);</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160;}</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>
1254
1254
  <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_a1505ba82206169f76ea239067797d6c2"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#a1505ba82206169f76ea239067797d6c2">SVF::ForkJoinAnalysis::addToHPPair</a></div><div class="ttdeci">void addToHPPair(NodeID tid1, NodeID tid2)</div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00527">MHP.h:527</a></div></div>
1255
1255
  <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_a149114898b13e1430c8fbb60978ca4f5"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#a149114898b13e1430c8fbb60978ca4f5">SVF::ForkJoinAnalysis::getMarkedFlag</a></div><div class="ttdeci">ValDomain getMarkedFlag(const CxtStmt &amp;cs)</div><div class="ttdoc">Mark thread flags for cxtStmt. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00414">MHP.h:414</a></div></div>
1256
1256
  <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_a2c6ce7aa04c399746d89230be0e0f1ce"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#a2c6ce7aa04c399746d89230be0e0f1ce">SVF::ForkJoinAnalysis::tct</a></div><div class="ttdeci">TCT * tct</div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00555">MHP.h:555</a></div></div>
@@ -1268,7 +1268,7 @@ Private Attributes</h2></td></tr>
1268
1268
  <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_a647ae6866bb37be850f0bdd5a7341188"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#a647ae6866bb37be850f0bdd5a7341188">SVF::ForkJoinAnalysis::addToHBPair</a></div><div class="ttdeci">void addToHBPair(NodeID tid1, NodeID tid2)</div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00532">MHP.h:532</a></div></div>
1269
1269
  <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_a8d40e687caf8999369621ed385dfc631a2abecc56b7d5c644f7e14c98d33d0a0a"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631a2abecc56b7d5c644f7e14c98d33d0a0a">SVF::ForkJoinAnalysis::TDAlive</a></div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00296">MHP.h:296</a></div></div>
1270
1270
  <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_a8ad9b8cb0e6300b2ffc55244e53cece6"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#a8ad9b8cb0e6300b2ffc55244e53cece6">SVF::ForkJoinAnalysis::getTCG</a></div><div class="ttdeci">ThreadCallGraph * getTCG() const</div><div class="ttdoc">ThreadCallGraph. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00514">MHP.h:514</a></div></div>
1271
- <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_add09218cce8d8bd8dd9e73b2d26a5797"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#add09218cce8d8bd8dd9e73b2d26a5797">SVF::ForkJoinAnalysis::handleIntra</a></div><div class="ttdeci">void handleIntra(const CxtStmt &amp;cts)</div><div class="ttdoc">Handle intra. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8cpp_source.html#l00935">MHP.cpp:935</a></div></div>
1271
+ <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_add09218cce8d8bd8dd9e73b2d26a5797"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#add09218cce8d8bd8dd9e73b2d26a5797">SVF::ForkJoinAnalysis::handleIntra</a></div><div class="ttdeci">void handleIntra(const CxtStmt &amp;cts)</div><div class="ttdoc">Handle intra. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8cpp_source.html#l00934">MHP.cpp:934</a></div></div>
1272
1272
  </div><!-- fragment -->
1273
1273
  </div>
1274
1274
  </div>
@@ -1298,8 +1298,8 @@ Private Attributes</h2></td></tr>
1298
1298
 
1299
1299
  <p>Handle intra. </p>
1300
1300
 
1301
- <p class="definition">Definition at line <a class="el" href="MHP_8cpp_source.html#l00935">935</a> of file <a class="el" href="MHP_8cpp_source.html">MHP.cpp</a>.</p>
1302
- <div class="fragment"><div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160;{</div><div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160;</div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* curInst = cts.<a class="code" href="classSVF_1_1CxtStmt.html#a0b593c4ba425937212e2889e64ce4791">getStmt</a>();</div><div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ab700523619b089b952498f39a7f5b6b1">CallStrCxt</a>&amp; curCxt = cts.<a class="code" href="classSVF_1_1CxtStmt.html#a3ce19b8f2de2e199ed4165dbe9d21f28">getContext</a>();</div><div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160;</div><div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a613d763731058899e6819acdb2d7315f">InstVec</a>&amp; nextInsts = curInst-&gt;<a class="code" href="classSVF_1_1SVFInstruction.html#a281d6b024afeeb96bac281eb23ce3f1f">getSuccInstructions</a>();</div><div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; ni: nextInsts)</div><div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160; {</div><div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a> newCts(curCxt, ni);</div><div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ac483d3b0e9084c2033e177eda9ac9215">markCxtStmtFlag</a>(newCts, cts);</div><div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160; }</div><div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160;}</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>
1301
+ <p class="definition">Definition at line <a class="el" href="MHP_8cpp_source.html#l00934">934</a> of file <a class="el" href="MHP_8cpp_source.html">MHP.cpp</a>.</p>
1302
+ <div class="fragment"><div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160;{</div><div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160;</div><div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* curInst = cts.<a class="code" href="classSVF_1_1CxtStmt.html#a0b593c4ba425937212e2889e64ce4791">getStmt</a>();</div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ab700523619b089b952498f39a7f5b6b1">CallStrCxt</a>&amp; curCxt = cts.<a class="code" href="classSVF_1_1CxtStmt.html#a3ce19b8f2de2e199ed4165dbe9d21f28">getContext</a>();</div><div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160;</div><div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a613d763731058899e6819acdb2d7315f">InstVec</a>&amp; nextInsts = curInst-&gt;<a class="code" href="classSVF_1_1SVFInstruction.html#a281d6b024afeeb96bac281eb23ce3f1f">getSuccInstructions</a>();</div><div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; ni: nextInsts)</div><div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; {</div><div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160; <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a> newCts(curCxt, ni);</div><div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ac483d3b0e9084c2033e177eda9ac9215">markCxtStmtFlag</a>(newCts, cts);</div><div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160; }</div><div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160;}</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>
1303
1303
  <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_a613d763731058899e6819acdb2d7315f"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#a613d763731058899e6819acdb2d7315f">SVF::ForkJoinAnalysis::InstVec</a></div><div class="ttdeci">TCT::InstVec InstVec</div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00301">MHP.h:301</a></div></div>
1304
1304
  <div class="ttc" id="classSVF_1_1SVFInstruction_html_a281d6b024afeeb96bac281eb23ce3f1f"><div class="ttname"><a href="classSVF_1_1SVFInstruction.html#a281d6b024afeeb96bac281eb23ce3f1f">SVF::SVFInstruction::getSuccInstructions</a></div><div class="ttdeci">InstVec &amp; getSuccInstructions()</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00599">SVFValue.h:599</a></div></div>
1305
1305
  <div class="ttc" id="namespaceSVF_html_ab700523619b089b952498f39a7f5b6b1"><div class="ttname"><a href="namespaceSVF.html#ab700523619b089b952498f39a7f5b6b1">SVF::CallStrCxt</a></div><div class="ttdeci">std::vector&lt; u32_t &gt; CallStrCxt</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00119">SVFType.h:119</a></div></div>
@@ -1347,8 +1347,8 @@ Private Attributes</h2></td></tr>
1347
1347
  <p>Handle join. </p>
1348
1348
  <p>for the join site in a loop loop which does not join the current thread we process the loop exit </p>
1349
1349
 
1350
- <p class="definition">Definition at line <a class="el" href="MHP_8cpp_source.html#l00800">800</a> of file <a class="el" href="MHP_8cpp_source.html">MHP.cpp</a>.</p>
1351
- <div class="fragment"><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160;{</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* call = cts.<a class="code" href="classSVF_1_1CxtStmt.html#a0b593c4ba425937212e2889e64ce4791">getStmt</a>();</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ab700523619b089b952498f39a7f5b6b1">CallStrCxt</a>&amp; curCxt = cts.<a class="code" href="classSVF_1_1CxtStmt.html#a3ce19b8f2de2e199ed4165dbe9d21f28">getContext</a>();</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160;</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; assert(<a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a97151d74790b2853249d0cc94bb0904f">isTDJoin</a>(call));</div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cbn = <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a46bd73ec73cc17087f21e8c5b234d0bd">getCBN</a>(call);</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8ad9b8cb0e6300b2ffc55244e53cece6">getTCG</a>()-&gt;hasCallGraphEdge(cbn))</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; {</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* forkSite = <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a2c6ce7aa04c399746d89230be0e0f1ce">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#a7b4ad0b052e1f8b6869733eef15f4e4d">getTCTNode</a>(rootTid)-&gt;<a class="code" href="classSVF_1_1TCTNode.html#a21591b19f6a9267151c31178f9543ee6">getCxtThread</a>().<a class="code" href="classSVF_1_1CxtThread.html#addee4e560a470eec9fbbf17efee906a9">getThread</a>();</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* joinSite = cts.<a class="code" href="classSVF_1_1CxtStmt.html#a0b593c4ba425937212e2889e64ce4791">getStmt</a>();</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160;</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a209ab13297e61f980cdf350e8fe2a9b4">isAliasedForkJoin</a>(forkSite, joinSite))</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; {</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a197ab02e8320affc4ba2c67fae5bf020">hasJoinLoop</a>(joinSite))</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; {</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a159bbd4352fcffa93c97281ab9d229b1">LoopBBs</a>&amp; joinLoop = <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ac5713ddcfd040a1f1f4fb40f24e4814c">getJoinLoop</a>(joinSite);</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; std::vector&lt;const SVFBasicBlock *&gt; exitbbs;</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; joinSite-&gt;<a class="code" href="classSVF_1_1SVFInstruction.html#aef7ad257ea809101df33779463907f3e">getFunction</a>()-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#a61505b528343c7d728eba3a705930a16">getExitBlocksOfLoop</a>(joinSite-&gt;<a class="code" href="classSVF_1_1SVFInstruction.html#ae009f41cbf48d949d4325e08fe8d7198">getParent</a>(), exitbbs);</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; <span class="keywordflow">while</span> (!exitbbs.empty())</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; {</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* eb = exitbbs.<a class="code" href="classSVF_1_1SVFBasicBlock.html#ad05f85ce931d4479f71d1947a25599dc">back</a>();</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; exitbbs.pop_back();</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfEntryInst = eb-&gt;<a class="code" href="classSVF_1_1SVFBasicBlock.html#a7bde256bc906af7f7204929019f4a33e">front</a>();</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a> newCts(curCxt, svfEntryInst);</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8aa2d4c83981007108b152d05e9c51fe">addDirectlyJoinTID</a>(cts, rootTid);</div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ForkJoinAnalysis.html#abbff6ea064e7241315932db77dccaad9">isSameSCEV</a>(forkSite, joinSite))</div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; {</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ac483d3b0e9084c2033e177eda9ac9215">markCxtStmtFlag</a>(newCts, <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631ad5af2a561c196e33d88fc63363d0d8f4">TDDead</a>);</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a2be89ac78712da78c215a33b3157ecd1">addSymmetricLoopJoin</a>(cts, joinLoop);</div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; }</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ac483d3b0e9084c2033e177eda9ac9215">markCxtStmtFlag</a>(cts, <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631a2abecc56b7d5c644f7e14c98d33d0a0a">TDAlive</a>);</div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; }</div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; }</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; {</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ac483d3b0e9084c2033e177eda9ac9215">markCxtStmtFlag</a>(cts, <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631ad5af2a561c196e33d88fc63363d0d8f4">TDDead</a>);</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8aa2d4c83981007108b152d05e9c51fe">addDirectlyJoinTID</a>(cts, rootTid);</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; <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>() &lt;&lt; <span class="stringliteral">&quot;\n\t match join site &quot;</span> &lt;&lt; call-&gt;<a class="code" href="classSVF_1_1SVFValue.html#aa678ca4616a3e69b53726b33d0b9c5a2">toString</a>() &lt;&lt; <span class="stringliteral">&quot;for thread &quot;</span> &lt;&lt; rootTid &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; }</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; }</div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; {</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a197ab02e8320affc4ba2c67fae5bf020">hasJoinLoop</a>(joinSite))</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; {</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; std::vector&lt;const SVFBasicBlock*&gt; exitbbs;</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; joinSite-&gt;<a class="code" href="classSVF_1_1SVFInstruction.html#aef7ad257ea809101df33779463907f3e">getFunction</a>()-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#a61505b528343c7d728eba3a705930a16">getExitBlocksOfLoop</a>(joinSite-&gt;<a class="code" href="classSVF_1_1SVFInstruction.html#ae009f41cbf48d949d4325e08fe8d7198">getParent</a>(), exitbbs);</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; <span class="keywordflow">while</span> (!exitbbs.empty())</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; {</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* eb = exitbbs.<a class="code" href="classSVF_1_1SVFBasicBlock.html#ad05f85ce931d4479f71d1947a25599dc">back</a>();</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; exitbbs.pop_back();</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfEntryInst = eb-&gt;<a class="code" href="classSVF_1_1SVFBasicBlock.html#a7bde256bc906af7f7204929019f4a33e">front</a>();</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a> newCts(curCxt, svfEntryInst);</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ac483d3b0e9084c2033e177eda9ac9215">markCxtStmtFlag</a>(newCts, cts);</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160; }</div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160; }</div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; }</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160; }</div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#add09218cce8d8bd8dd9e73b2d26a5797">handleIntra</a>(cts);</div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160;}</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>
1350
+ <p class="definition">Definition at line <a class="el" href="MHP_8cpp_source.html#l00799">799</a> of file <a class="el" href="MHP_8cpp_source.html">MHP.cpp</a>.</p>
1351
+ <div class="fragment"><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160;{</div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* call = cts.<a class="code" href="classSVF_1_1CxtStmt.html#a0b593c4ba425937212e2889e64ce4791">getStmt</a>();</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ab700523619b089b952498f39a7f5b6b1">CallStrCxt</a>&amp; curCxt = cts.<a class="code" href="classSVF_1_1CxtStmt.html#a3ce19b8f2de2e199ed4165dbe9d21f28">getContext</a>();</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160;</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; assert(<a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a97151d74790b2853249d0cc94bb0904f">isTDJoin</a>(call));</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cbn = <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a46bd73ec73cc17087f21e8c5b234d0bd">getCBN</a>(call);</div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8ad9b8cb0e6300b2ffc55244e53cece6">getTCG</a>()-&gt;hasCallGraphEdge(cbn))</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; {</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* forkSite = <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a2c6ce7aa04c399746d89230be0e0f1ce">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#a7b4ad0b052e1f8b6869733eef15f4e4d">getTCTNode</a>(rootTid)-&gt;<a class="code" href="classSVF_1_1TCTNode.html#a21591b19f6a9267151c31178f9543ee6">getCxtThread</a>().<a class="code" href="classSVF_1_1CxtThread.html#addee4e560a470eec9fbbf17efee906a9">getThread</a>();</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* joinSite = cts.<a class="code" href="classSVF_1_1CxtStmt.html#a0b593c4ba425937212e2889e64ce4791">getStmt</a>();</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160;</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a209ab13297e61f980cdf350e8fe2a9b4">isAliasedForkJoin</a>(forkSite, joinSite))</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; {</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a197ab02e8320affc4ba2c67fae5bf020">hasJoinLoop</a>(joinSite))</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; {</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a159bbd4352fcffa93c97281ab9d229b1">LoopBBs</a>&amp; joinLoop = <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ac5713ddcfd040a1f1f4fb40f24e4814c">getJoinLoop</a>(joinSite);</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; std::vector&lt;const SVFBasicBlock *&gt; exitbbs;</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; joinSite-&gt;<a class="code" href="classSVF_1_1SVFInstruction.html#aef7ad257ea809101df33779463907f3e">getFunction</a>()-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#a61505b528343c7d728eba3a705930a16">getExitBlocksOfLoop</a>(joinSite-&gt;<a class="code" href="classSVF_1_1SVFInstruction.html#ae009f41cbf48d949d4325e08fe8d7198">getParent</a>(), exitbbs);</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; <span class="keywordflow">while</span> (!exitbbs.empty())</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; {</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* eb = exitbbs.<a class="code" href="classSVF_1_1SVFBasicBlock.html#ad05f85ce931d4479f71d1947a25599dc">back</a>();</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; exitbbs.pop_back();</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfEntryInst = eb-&gt;<a class="code" href="classSVF_1_1SVFBasicBlock.html#a7bde256bc906af7f7204929019f4a33e">front</a>();</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a> newCts(curCxt, svfEntryInst);</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8aa2d4c83981007108b152d05e9c51fe">addDirectlyJoinTID</a>(cts, rootTid);</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ForkJoinAnalysis.html#abbff6ea064e7241315932db77dccaad9">isSameSCEV</a>(forkSite, joinSite))</div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; {</div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ac483d3b0e9084c2033e177eda9ac9215">markCxtStmtFlag</a>(newCts, <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631ad5af2a561c196e33d88fc63363d0d8f4">TDDead</a>);</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a2be89ac78712da78c215a33b3157ecd1">addSymmetricLoopJoin</a>(cts, joinLoop);</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; }</div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ac483d3b0e9084c2033e177eda9ac9215">markCxtStmtFlag</a>(cts, <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631a2abecc56b7d5c644f7e14c98d33d0a0a">TDAlive</a>);</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; }</div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; }</div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; {</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ac483d3b0e9084c2033e177eda9ac9215">markCxtStmtFlag</a>(cts, <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631ad5af2a561c196e33d88fc63363d0d8f4">TDDead</a>);</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8aa2d4c83981007108b152d05e9c51fe">addDirectlyJoinTID</a>(cts, rootTid);</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; <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>() &lt;&lt; <span class="stringliteral">&quot;\n\t match join site &quot;</span> &lt;&lt; call-&gt;<a class="code" href="classSVF_1_1SVFValue.html#aa678ca4616a3e69b53726b33d0b9c5a2">toString</a>() &lt;&lt; <span class="stringliteral">&quot;for thread &quot;</span> &lt;&lt; rootTid &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; }</div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; }</div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; {</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a197ab02e8320affc4ba2c67fae5bf020">hasJoinLoop</a>(joinSite))</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; {</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; std::vector&lt;const SVFBasicBlock*&gt; exitbbs;</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; joinSite-&gt;<a class="code" href="classSVF_1_1SVFInstruction.html#aef7ad257ea809101df33779463907f3e">getFunction</a>()-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#a61505b528343c7d728eba3a705930a16">getExitBlocksOfLoop</a>(joinSite-&gt;<a class="code" href="classSVF_1_1SVFInstruction.html#ae009f41cbf48d949d4325e08fe8d7198">getParent</a>(), exitbbs);</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; <span class="keywordflow">while</span> (!exitbbs.empty())</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; {</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* eb = exitbbs.<a class="code" href="classSVF_1_1SVFBasicBlock.html#ad05f85ce931d4479f71d1947a25599dc">back</a>();</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; exitbbs.pop_back();</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfEntryInst = eb-&gt;<a class="code" href="classSVF_1_1SVFBasicBlock.html#a7bde256bc906af7f7204929019f4a33e">front</a>();</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a> newCts(curCxt, svfEntryInst);</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ac483d3b0e9084c2033e177eda9ac9215">markCxtStmtFlag</a>(newCts, cts);</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160; }</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160; }</div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160; }</div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; }</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#add09218cce8d8bd8dd9e73b2d26a5797">handleIntra</a>(cts);</div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160;}</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>
1352
1352
  <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_a2c6ce7aa04c399746d89230be0e0f1ce"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#a2c6ce7aa04c399746d89230be0e0f1ce">SVF::ForkJoinAnalysis::tct</a></div><div class="ttdeci">TCT * tct</div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00555">MHP.h:555</a></div></div>
1353
1353
  <div class="ttc" id="classSVF_1_1CxtThread_html_addee4e560a470eec9fbbf17efee906a9"><div class="ttname"><a href="classSVF_1_1CxtThread.html#addee4e560a470eec9fbbf17efee906a9">SVF::CxtThread::getThread</a></div><div class="ttdeci">const SVFInstruction * getThread() const</div><div class="ttdoc">Return forksite. </div><div class="ttdef"><b>Definition:</b> <a href="CxtStmt_8h_source.html#l00210">CxtStmt.h:210</a></div></div>
1354
1354
  <div class="ttc" id="classSVF_1_1SVFInstruction_html_ae009f41cbf48d949d4325e08fe8d7198"><div class="ttname"><a href="classSVF_1_1SVFInstruction.html#ae009f41cbf48d949d4325e08fe8d7198">SVF::SVFInstruction::getParent</a></div><div class="ttdeci">const SVFBasicBlock * getParent() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00594">SVFValue.h:594</a></div></div>
@@ -1361,13 +1361,13 @@ Private Attributes</h2></td></tr>
1361
1361
  <div class="ttc" id="namespaceSVF_html_ab700523619b089b952498f39a7f5b6b1"><div class="ttname"><a href="namespaceSVF.html#ab700523619b089b952498f39a7f5b6b1">SVF::CallStrCxt</a></div><div class="ttdeci">std::vector&lt; u32_t &gt; CallStrCxt</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00119">SVFType.h:119</a></div></div>
1362
1362
  <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>
1363
1363
  <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_a159bbd4352fcffa93c97281ab9d229b1"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#a159bbd4352fcffa93c97281ab9d229b1">SVF::ForkJoinAnalysis::LoopBBs</a></div><div class="ttdeci">SVFLoopAndDomInfo::LoopBBs LoopBBs</div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00300">MHP.h:300</a></div></div>
1364
- <div class="ttc" id="classSVF_1_1SVFValue_html_aa678ca4616a3e69b53726b33d0b9c5a2"><div class="ttname"><a href="classSVF_1_1SVFValue.html#aa678ca4616a3e69b53726b33d0b9c5a2">SVF::SVFValue::toString</a></div><div class="ttdeci">virtual const std::string toString() const</div><div class="ttdoc">Needs to be implemented by a specific SVF front end (e.g., the implementation in LLVMUtil) ...</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00681">LLVMUtil.cpp:681</a></div></div>
1364
+ <div class="ttc" id="classSVF_1_1SVFValue_html_aa678ca4616a3e69b53726b33d0b9c5a2"><div class="ttname"><a href="classSVF_1_1SVFValue.html#aa678ca4616a3e69b53726b33d0b9c5a2">SVF::SVFValue::toString</a></div><div class="ttdeci">virtual const std::string toString() const</div><div class="ttdoc">Needs to be implemented by a specific SVF front end (e.g., the implementation in LLVMUtil) ...</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00680">LLVMUtil.cpp:680</a></div></div>
1365
1365
  <div class="ttc" id="classSVF_1_1CxtStmt_html_a0b593c4ba425937212e2889e64ce4791"><div class="ttname"><a href="classSVF_1_1CxtStmt.html#a0b593c4ba425937212e2889e64ce4791">SVF::CxtStmt::getStmt</a></div><div class="ttdeci">const SVFInstruction * getStmt() const</div><div class="ttdoc">Return current statement. </div><div class="ttdef"><b>Definition:</b> <a href="CxtStmt_8h_source.html#l00062">CxtStmt.h:62</a></div></div>
1366
1366
  <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_a8aa2d4c83981007108b152d05e9c51fe"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#a8aa2d4c83981007108b152d05e9c51fe">SVF::ForkJoinAnalysis::addDirectlyJoinTID</a></div><div class="ttdeci">void addDirectlyJoinTID(const CxtStmt &amp;cs, NodeID tid)</div><div class="ttdoc">maps a context-sensitive join site to a thread id </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00519">MHP.h:519</a></div></div>
1367
1367
  <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_ac483d3b0e9084c2033e177eda9ac9215"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#ac483d3b0e9084c2033e177eda9ac9215">SVF::ForkJoinAnalysis::markCxtStmtFlag</a></div><div class="ttdeci">void markCxtStmtFlag(const CxtStmt &amp;tgr, ValDomain flag)</div><div class="ttdoc">Initialize TDAlive and TDDead flags. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00426">MHP.h:426</a></div></div>
1368
1368
  <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 &amp; 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>
1369
1369
  <div class="ttc" id="classSVF_1_1SVFInstruction_html_aef7ad257ea809101df33779463907f3e"><div class="ttname"><a href="classSVF_1_1SVFInstruction.html#aef7ad257ea809101df33779463907f3e">SVF::SVFInstruction::getFunction</a></div><div class="ttdeci">const SVFFunction * getFunction() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00619">SVFValue.h:619</a></div></div>
1370
- <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_abbff6ea064e7241315932db77dccaad9"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#abbff6ea064e7241315932db77dccaad9">SVF::ForkJoinAnalysis::isSameSCEV</a></div><div class="ttdeci">bool isSameSCEV(const SVFInstruction *forkSite, const SVFInstruction *joinSite)</div><div class="ttdoc">Return true if the fork and join have the same SCEV. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8cpp_source.html#l01029">MHP.cpp:1029</a></div></div>
1370
+ <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_abbff6ea064e7241315932db77dccaad9"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#abbff6ea064e7241315932db77dccaad9">SVF::ForkJoinAnalysis::isSameSCEV</a></div><div class="ttdeci">bool isSameSCEV(const SVFInstruction *forkSite, const SVFInstruction *joinSite)</div><div class="ttdoc">Return true if the fork and join have the same SCEV. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8cpp_source.html#l01028">MHP.cpp:1028</a></div></div>
1371
1371
  <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_a97151d74790b2853249d0cc94bb0904f"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#a97151d74790b2853249d0cc94bb0904f">SVF::ForkJoinAnalysis::isTDJoin</a></div><div class="ttdeci">bool isTDJoin(const SVFInstruction *call)</div><div class="ttdoc">Whether it is a join site. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00494">MHP.h:494</a></div></div>
1372
1372
  <div class="ttc" id="classSVF_1_1CxtStmt_html"><div class="ttname"><a href="classSVF_1_1CxtStmt.html">SVF::CxtStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="CxtStmt_8h_source.html#l00041">CxtStmt.h:41</a></div></div>
1373
1373
  <div class="ttc" id="classSVF_1_1SVFBasicBlock_html_ad05f85ce931d4479f71d1947a25599dc"><div class="ttname"><a href="classSVF_1_1SVFBasicBlock.html#ad05f85ce931d4479f71d1947a25599dc">SVF::SVFBasicBlock::back</a></div><div class="ttdeci">const SVFInstruction * back() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00542">SVFValue.h:542</a></div></div>
@@ -1381,7 +1381,7 @@ Private Attributes</h2></td></tr>
1381
1381
  <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_a8d40e687caf8999369621ed385dfc631a2abecc56b7d5c644f7e14c98d33d0a0a"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631a2abecc56b7d5c644f7e14c98d33d0a0a">SVF::ForkJoinAnalysis::TDAlive</a></div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00296">MHP.h:296</a></div></div>
1382
1382
  <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_a8ad9b8cb0e6300b2ffc55244e53cece6"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#a8ad9b8cb0e6300b2ffc55244e53cece6">SVF::ForkJoinAnalysis::getTCG</a></div><div class="ttdeci">ThreadCallGraph * getTCG() const</div><div class="ttdoc">ThreadCallGraph. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00514">MHP.h:514</a></div></div>
1383
1383
  <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>
1384
- <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_add09218cce8d8bd8dd9e73b2d26a5797"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#add09218cce8d8bd8dd9e73b2d26a5797">SVF::ForkJoinAnalysis::handleIntra</a></div><div class="ttdeci">void handleIntra(const CxtStmt &amp;cts)</div><div class="ttdoc">Handle intra. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8cpp_source.html#l00935">MHP.cpp:935</a></div></div>
1384
+ <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_add09218cce8d8bd8dd9e73b2d26a5797"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#add09218cce8d8bd8dd9e73b2d26a5797">SVF::ForkJoinAnalysis::handleIntra</a></div><div class="ttdeci">void handleIntra(const CxtStmt &amp;cts)</div><div class="ttdoc">Handle intra. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8cpp_source.html#l00934">MHP.cpp:934</a></div></div>
1385
1385
  </div><!-- fragment -->
1386
1386
  </div>
1387
1387
  </div>
@@ -1411,8 +1411,8 @@ Private Attributes</h2></td></tr>
1411
1411
 
1412
1412
  <p>Handle return. </p>
1413
1413
 
1414
- <p class="definition">Definition at line <a class="el" href="MHP_8cpp_source.html#l00890">890</a> of file <a class="el" href="MHP_8cpp_source.html">MHP.cpp</a>.</p>
1415
- <div class="fragment"><div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160;{</div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160;</div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* curInst = cts.<a class="code" href="classSVF_1_1CxtStmt.html#a0b593c4ba425937212e2889e64ce4791">getStmt</a>();</div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ab700523619b089b952498f39a7f5b6b1">CallStrCxt</a>&amp; curCxt = cts.<a class="code" href="classSVF_1_1CxtStmt.html#a3ce19b8f2de2e199ed4165dbe9d21f28">getContext</a>();</div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160;</div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160; <a class="code" href="classSVF_1_1PTACallGraphNode.html">PTACallGraphNode</a>* curFunNode = <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8ad9b8cb0e6300b2ffc55244e53cece6">getTCG</a>()-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#aaab54c670518d9d6790707f76ea76aa1">getCallGraphNode</a>(curInst-&gt;<a class="code" href="classSVF_1_1SVFInstruction.html#aef7ad257ea809101df33779463907f3e">getFunction</a>());</div><div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1PTACallGraphEdge.html">PTACallGraphEdge</a>* edge : curFunNode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#afc8b5f86d7795b6a0dfc0687d942d79b">getInEdges</a>())</div><div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160; {</div><div class="line"><a name="l00899"></a><span class="lineno"> 899</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;ThreadForkEdge, ThreadJoinEdge&gt;(edge))</div><div class="line"><a name="l00900"></a><span class="lineno"> 900</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160; <span class="keywordflow">for</span> (PTACallGraphEdge::CallInstSet::const_iterator cit = edge-&gt;directCallsBegin(),</div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160; ecit = edge-&gt;directCallsEnd();</div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160; cit != ecit; ++cit)</div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160; {</div><div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160; <a class="code" href="namespaceSVF.html#ab700523619b089b952498f39a7f5b6b1">CallStrCxt</a> newCxt = curCxt;</div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ac95b1600aa524c3e607eebcf9d50df0e">matchCxt</a>(newCxt, (*cit)-&gt;getCallSite(), curFunNode-&gt;<a class="code" href="classSVF_1_1PTACallGraphNode.html#a959445c97605953fbdebbbd999437a09">getFunction</a>()))</div><div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160; {</div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a613d763731058899e6819acdb2d7315f">InstVec</a>&amp; nextInsts = (*cit)-&gt;getCallSite()-&gt;getSuccInstructions();</div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; ni : nextInsts)</div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160; {</div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160; <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a> newCts(newCxt, ni);</div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ac483d3b0e9084c2033e177eda9ac9215">markCxtStmtFlag</a>(newCts, cts);</div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160; }</div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160; }</div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160; }</div><div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160; <span class="keywordflow">for</span> (PTACallGraphEdge::CallInstSet::const_iterator cit = edge-&gt;indirectCallsBegin(),</div><div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160; ecit = edge-&gt;indirectCallsEnd();</div><div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160; cit != ecit; ++cit)</div><div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160; {</div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160; <a class="code" href="namespaceSVF.html#ab700523619b089b952498f39a7f5b6b1">CallStrCxt</a> newCxt = curCxt;</div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ac95b1600aa524c3e607eebcf9d50df0e">matchCxt</a>(newCxt, (*cit)-&gt;getCallSite(), curFunNode-&gt;<a class="code" href="classSVF_1_1PTACallGraphNode.html#a959445c97605953fbdebbbd999437a09">getFunction</a>()))</div><div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160; {</div><div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a613d763731058899e6819acdb2d7315f">InstVec</a>&amp; nextInsts = (*cit)-&gt;getCallSite()-&gt;getSuccInstructions();</div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; ni : nextInsts)</div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160; {</div><div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a> newCts(newCxt, ni);</div><div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ac483d3b0e9084c2033e177eda9ac9215">markCxtStmtFlag</a>(newCts, cts);</div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; }</div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160; }</div><div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160; }</div><div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; }</div><div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160;}</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>
1414
+ <p class="definition">Definition at line <a class="el" href="MHP_8cpp_source.html#l00889">889</a> of file <a class="el" href="MHP_8cpp_source.html">MHP.cpp</a>.</p>
1415
+ <div class="fragment"><div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160;{</div><div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160;</div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* curInst = cts.<a class="code" href="classSVF_1_1CxtStmt.html#a0b593c4ba425937212e2889e64ce4791">getStmt</a>();</div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ab700523619b089b952498f39a7f5b6b1">CallStrCxt</a>&amp; curCxt = cts.<a class="code" href="classSVF_1_1CxtStmt.html#a3ce19b8f2de2e199ed4165dbe9d21f28">getContext</a>();</div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160;</div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160; <a class="code" href="classSVF_1_1PTACallGraphNode.html">PTACallGraphNode</a>* curFunNode = <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8ad9b8cb0e6300b2ffc55244e53cece6">getTCG</a>()-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#aaab54c670518d9d6790707f76ea76aa1">getCallGraphNode</a>(curInst-&gt;<a class="code" href="classSVF_1_1SVFInstruction.html#aef7ad257ea809101df33779463907f3e">getFunction</a>());</div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1PTACallGraphEdge.html">PTACallGraphEdge</a>* edge : curFunNode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#afc8b5f86d7795b6a0dfc0687d942d79b">getInEdges</a>())</div><div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160; {</div><div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;ThreadForkEdge, ThreadJoinEdge&gt;(edge))</div><div class="line"><a name="l00899"></a><span class="lineno"> 899</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00900"></a><span class="lineno"> 900</span>&#160; <span class="keywordflow">for</span> (PTACallGraphEdge::CallInstSet::const_iterator cit = edge-&gt;directCallsBegin(),</div><div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160; ecit = edge-&gt;directCallsEnd();</div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160; cit != ecit; ++cit)</div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160; {</div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160; <a class="code" href="namespaceSVF.html#ab700523619b089b952498f39a7f5b6b1">CallStrCxt</a> newCxt = curCxt;</div><div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ac95b1600aa524c3e607eebcf9d50df0e">matchCxt</a>(newCxt, (*cit)-&gt;getCallSite(), curFunNode-&gt;<a class="code" href="classSVF_1_1PTACallGraphNode.html#a959445c97605953fbdebbbd999437a09">getFunction</a>()))</div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160; {</div><div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a613d763731058899e6819acdb2d7315f">InstVec</a>&amp; nextInsts = (*cit)-&gt;getCallSite()-&gt;getSuccInstructions();</div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; ni : nextInsts)</div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160; {</div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160; <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a> newCts(newCxt, ni);</div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ac483d3b0e9084c2033e177eda9ac9215">markCxtStmtFlag</a>(newCts, cts);</div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; }</div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160; }</div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160; }</div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160; <span class="keywordflow">for</span> (PTACallGraphEdge::CallInstSet::const_iterator cit = edge-&gt;indirectCallsBegin(),</div><div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160; ecit = edge-&gt;indirectCallsEnd();</div><div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160; cit != ecit; ++cit)</div><div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160; {</div><div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160; <a class="code" href="namespaceSVF.html#ab700523619b089b952498f39a7f5b6b1">CallStrCxt</a> newCxt = curCxt;</div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ac95b1600aa524c3e607eebcf9d50df0e">matchCxt</a>(newCxt, (*cit)-&gt;getCallSite(), curFunNode-&gt;<a class="code" href="classSVF_1_1PTACallGraphNode.html#a959445c97605953fbdebbbd999437a09">getFunction</a>()))</div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160; {</div><div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a613d763731058899e6819acdb2d7315f">InstVec</a>&amp; nextInsts = (*cit)-&gt;getCallSite()-&gt;getSuccInstructions();</div><div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; ni : nextInsts)</div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160; {</div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160; <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a> newCts(newCxt, ni);</div><div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ac483d3b0e9084c2033e177eda9ac9215">markCxtStmtFlag</a>(newCts, cts);</div><div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; }</div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; }</div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160; }</div><div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160; }</div><div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160;}</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>
1416
1416
  <div class="ttc" id="classSVF_1_1PTACallGraph_html_aaab54c670518d9d6790707f76ea76aa1"><div class="ttname"><a href="classSVF_1_1PTACallGraph.html#aaab54c670518d9d6790707f76ea76aa1">SVF::PTACallGraph::getCallGraphNode</a></div><div class="ttdeci">PTACallGraphNode * getCallGraphNode(NodeID id) const</div><div class="ttdoc">Get call graph node. </div><div class="ttdef"><b>Definition:</b> <a href="PTACallGraph_8h_source.html#l00315">PTACallGraph.h:315</a></div></div>
1417
1417
  <div class="ttc" id="classSVF_1_1GenericNode_html_afc8b5f86d7795b6a0dfc0687d942d79b"><div class="ttname"><a href="classSVF_1_1GenericNode.html#afc8b5f86d7795b6a0dfc0687d942d79b">SVF::GenericNode::getInEdges</a></div><div class="ttdeci">const GEdgeSetTy &amp; getInEdges() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00188">GenericGraph.h:188</a></div></div>
1418
1418
  <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_a613d763731058899e6819acdb2d7315f"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#a613d763731058899e6819acdb2d7315f">SVF::ForkJoinAnalysis::InstVec</a></div><div class="ttdeci">TCT::InstVec InstVec</div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00301">MHP.h:301</a></div></div>
@@ -1530,7 +1530,7 @@ Private Attributes</h2></td></tr>
1530
1530
  <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_ab51ff5da249127d92af3748c64572af6"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#ab51ff5da249127d92af3748c64572af6">SVF::ForkJoinAnalysis::getForkedThread</a></div><div class="ttdeci">const SVFValue * getForkedThread(const SVFInstruction *call)</div><div class="ttdoc">Get forked thread. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00499">MHP.h:499</a></div></div>
1531
1531
  <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_a3b6d40f3421d4ee9bdb54a78d592f3a7"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#a3b6d40f3421d4ee9bdb54a78d592f3a7">SVF::ForkJoinAnalysis::getJoinedThread</a></div><div class="ttdeci">const SVFValue * getJoinedThread(const SVFInstruction *call)</div><div class="ttdoc">Get joined thread. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00504">MHP.h:504</a></div></div>
1532
1532
  <div class="ttc" id="classSVF_1_1TCT_html_a5b087b42340d1a1b2ee37339637709d3"><div class="ttname"><a href="classSVF_1_1TCT.html#a5b087b42340d1a1b2ee37339637709d3">SVF::TCT::getPTA</a></div><div class="ttdeci">PointerAnalysis * getPTA() const</div><div class="ttdoc">Get PTA. </div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00187">TCT.h:187</a></div></div>
1533
- <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_abbff6ea064e7241315932db77dccaad9"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#abbff6ea064e7241315932db77dccaad9">SVF::ForkJoinAnalysis::isSameSCEV</a></div><div class="ttdeci">bool isSameSCEV(const SVFInstruction *forkSite, const SVFInstruction *joinSite)</div><div class="ttdoc">Return true if the fork and join have the same SCEV. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8cpp_source.html#l01029">MHP.cpp:1029</a></div></div>
1533
+ <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_abbff6ea064e7241315932db77dccaad9"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#abbff6ea064e7241315932db77dccaad9">SVF::ForkJoinAnalysis::isSameSCEV</a></div><div class="ttdeci">bool isSameSCEV(const SVFInstruction *forkSite, const SVFInstruction *joinSite)</div><div class="ttdoc">Return true if the fork and join have the same SCEV. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8cpp_source.html#l01028">MHP.cpp:1028</a></div></div>
1534
1534
  <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>
1535
1535
  </div><!-- fragment -->
1536
1536
  </div>
@@ -1656,8 +1656,8 @@ Private Attributes</h2></td></tr>
1656
1656
  <p>Return true if the fork and join have the same SCEV. </p>
1657
1657
  <p>We assume a pair of fork and join sites are must-alias if they have same PTASCEV (1) SCEV not inside loop (2) SCEV inside two symmetric loops, then pointers of fork thread and join thread should have same scev start and step. and should have same loop trip count </p>
1658
1658
 
1659
- <p class="definition">Definition at line <a class="el" href="MHP_8cpp_source.html#l01029">1029</a> of file <a class="el" href="MHP_8cpp_source.html">MHP.cpp</a>.</p>
1660
- <div class="fragment"><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160;{</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160;</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160; <span class="comment">// const PTASCEV&amp; forkse = fkjnToPTASCEVMap[forkSite];</span></div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160; <span class="comment">// const PTASCEV&amp; joinse = fkjnToPTASCEVMap[joinSite];</span></div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160;</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; <span class="comment">// //if(sameLoopTripCount(forkSite,joinSite) == false)</span></div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160; <span class="comment">// // return false;</span></div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160;</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; <span class="comment">// if(forkse.inloop &amp;&amp; joinse.inloop)</span></div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; <span class="comment">// return forkse.start==joinse.start &amp;&amp; forkse.step == joinse.step &amp;&amp; forkse.tripcount &lt;= joinse.tripcount;</span></div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; <span class="comment">// else if(SVFUtil::isa&lt;GetElementPtrInst&gt;(forkse.ptr) &amp;&amp; SVFUtil::isa&lt;GetElementPtrInst&gt;(joinse.ptr))</span></div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160; <span class="comment">// return accessSameArrayIndex(SVFUtil::cast&lt;GetElementPtrInst&gt;(forkse.ptr),SVFUtil::cast&lt;GetElementPtrInst&gt;(joinse.ptr));</span></div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; <span class="comment">// else if(SVFUtil::isa&lt;GetElementPtrInst, GetElementPtrInst&gt;(joinse.ptr))</span></div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; <span class="comment">// return false;</span></div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160; <span class="comment">// else</span></div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160; <span class="comment">// return true;</span></div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160;</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160;}</div></div><!-- fragment -->
1659
+ <p class="definition">Definition at line <a class="el" href="MHP_8cpp_source.html#l01028">1028</a> of file <a class="el" href="MHP_8cpp_source.html">MHP.cpp</a>.</p>
1660
+ <div class="fragment"><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160;{</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160;</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160; <span class="comment">// const PTASCEV&amp; forkse = fkjnToPTASCEVMap[forkSite];</span></div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160; <span class="comment">// const PTASCEV&amp; joinse = fkjnToPTASCEVMap[joinSite];</span></div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160;</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160; <span class="comment">// //if(sameLoopTripCount(forkSite,joinSite) == false)</span></div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; <span class="comment">// // return false;</span></div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160;</div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; <span class="comment">// if(forkse.inloop &amp;&amp; joinse.inloop)</span></div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; <span class="comment">// return forkse.start==joinse.start &amp;&amp; forkse.step == joinse.step &amp;&amp; forkse.tripcount &lt;= joinse.tripcount;</span></div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; <span class="comment">// else if(SVFUtil::isa&lt;GetElementPtrInst&gt;(forkse.ptr) &amp;&amp; SVFUtil::isa&lt;GetElementPtrInst&gt;(joinse.ptr))</span></div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; <span class="comment">// return accessSameArrayIndex(SVFUtil::cast&lt;GetElementPtrInst&gt;(forkse.ptr),SVFUtil::cast&lt;GetElementPtrInst&gt;(joinse.ptr));</span></div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160; <span class="comment">// else if(SVFUtil::isa&lt;GetElementPtrInst, GetElementPtrInst&gt;(joinse.ptr))</span></div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; <span class="comment">// return false;</span></div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; <span class="comment">// else</span></div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160; <span class="comment">// return true;</span></div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160;</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160;}</div></div><!-- fragment -->
1661
1661
  </div>
1662
1662
  </div>
1663
1663
  <a id="a66965759d876309c64faf4b755afc2a7"></a>
@@ -2012,8 +2012,8 @@ Private Attributes</h2></td></tr>
2012
2012
  <p>Same loop trip count. </p>
2013
2013
  <p>The fork and join have same loop trip count </p>
2014
2014
 
2015
- <p class="definition">Definition at line <a class="el" href="MHP_8cpp_source.html#l01053">1053</a> of file <a class="el" href="MHP_8cpp_source.html">MHP.cpp</a>.</p>
2016
- <div class="fragment"><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160;{</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160;</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160; <span class="comment">// ScalarEvolution* forkSE = getSE(forkSite);</span></div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; <span class="comment">// ScalarEvolution* joinSE = getSE(joinSite);</span></div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160;</div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; <span class="comment">// if(tct-&gt;hasLoop(forkSite) == false || tct-&gt;hasLoop(joinSite) == false)</span></div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160; <span class="comment">// return false;</span></div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160;</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160; <span class="comment">// // Get loops</span></div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160; <span class="comment">// const LoopBBs&amp; forkSiteLoop = tct-&gt;getLoop(forkSite);</span></div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160; <span class="comment">// const LoopBBs&amp; joinSiteLoop = tct-&gt;getLoop(joinSite);</span></div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160;</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160; <span class="comment">// const SCEV* forkLoopCountScev = forkSE-&gt;getBackedgeTakenCount(forkSiteLoop);</span></div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160; <span class="comment">// const SCEV* joinLoopCountScev = joinSE-&gt;getBackedgeTakenCount(joinSiteLoop);</span></div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160;</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160; <span class="comment">// if(forkLoopCountScev!=forkSE-&gt;getCouldNotCompute())</span></div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160; <span class="comment">// {</span></div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160; <span class="comment">// if(forkLoopCountScev==joinLoopCountScev)</span></div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160; <span class="comment">// {</span></div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160; <span class="comment">// return true;</span></div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160; <span class="comment">// }</span></div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160; <span class="comment">// }</span></div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160;}</div></div><!-- fragment -->
2015
+ <p class="definition">Definition at line <a class="el" href="MHP_8cpp_source.html#l01052">1052</a> of file <a class="el" href="MHP_8cpp_source.html">MHP.cpp</a>.</p>
2016
+ <div class="fragment"><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160;{</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160;</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160; <span class="comment">// ScalarEvolution* forkSE = getSE(forkSite);</span></div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160; <span class="comment">// ScalarEvolution* joinSE = getSE(joinSite);</span></div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160;</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160; <span class="comment">// if(tct-&gt;hasLoop(forkSite) == false || tct-&gt;hasLoop(joinSite) == false)</span></div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; <span class="comment">// return false;</span></div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160;</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160; <span class="comment">// // Get loops</span></div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160; <span class="comment">// const LoopBBs&amp; forkSiteLoop = tct-&gt;getLoop(forkSite);</span></div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160; <span class="comment">// const LoopBBs&amp; joinSiteLoop = tct-&gt;getLoop(joinSite);</span></div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160;</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160; <span class="comment">// const SCEV* forkLoopCountScev = forkSE-&gt;getBackedgeTakenCount(forkSiteLoop);</span></div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160; <span class="comment">// const SCEV* joinLoopCountScev = joinSE-&gt;getBackedgeTakenCount(joinSiteLoop);</span></div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160;</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160; <span class="comment">// if(forkLoopCountScev!=forkSE-&gt;getCouldNotCompute())</span></div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160; <span class="comment">// {</span></div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160; <span class="comment">// if(forkLoopCountScev==joinLoopCountScev)</span></div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160; <span class="comment">// {</span></div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160; <span class="comment">// return true;</span></div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160; <span class="comment">// }</span></div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160; <span class="comment">// }</span></div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160;}</div></div><!-- fragment -->
2017
2017
  </div>
2018
2018
  </div>
2019
2019
  <h2 class="groupheader">Member Data Documentation</h2>