svf-tools 1.0.583 → 1.0.585
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/BreakConstantExpr_8cpp.html +1 -1
- package/SVF-doxygen/html/html/BreakConstantExpr_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/BreakConstantExpr_8h_source.html +3 -3
- package/SVF-doxygen/html/html/CFLAlias_8h_source.html +1 -1
- package/SVF-doxygen/html/html/CFLGraphBuilder_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/CHGBuilder_8h_source.html +1 -1
- package/SVF-doxygen/html/html/CPPUtil_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/ConsG_8h_source.html +8 -8
- package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/DCHG_8cpp_source.html +14 -14
- package/SVF-doxygen/html/html/DCHG_8h_source.html +5 -5
- package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/DDAClient_8h_source.html +2 -2
- package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +8 -8
- package/SVF-doxygen/html/html/DataFlowUtil_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/DataFlowUtil_8h_source.html +7 -7
- package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/GEPTypeBridgeIterator_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +14 -10
- package/SVF-doxygen/html/html/ICFGBuilder_8h_source.html +9 -9
- package/SVF-doxygen/html/html/ICFG_8cpp_source.html +35 -42
- package/SVF-doxygen/html/html/ICFG_8h_source.html +29 -28
- package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +3 -3
- package/SVF-doxygen/html/html/LLVMLoopAnalysis_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +12 -12
- package/SVF-doxygen/html/html/LLVMModule_8h_source.html +2 -2
- package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/LLVMUtil_8h_source.html +4 -4
- package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/MHP_8cpp.html +1 -1
- package/SVF-doxygen/html/html/MHP_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/MHP_8h_source.html +2 -2
- package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/MTAResultValidator_8h_source.html +1 -1
- package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MTA_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/MTA_8h_source.html +4 -4
- package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +15 -15
- package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/PCG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/PCG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +2 -2
- package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +12 -12
- package/SVF-doxygen/html/html/SVF-FE_2BasicTypes_8h.html +1 -0
- package/SVF-doxygen/html/html/SVF-FE_2BasicTypes_8h_source.html +85 -85
- package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +4 -4
- package/SVF-doxygen/html/html/SVFG_8cpp_source.html +12 -12
- package/SVF-doxygen/html/html/SVFG_8h_source.html +5 -5
- package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +30 -27
- package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +95 -95
- package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +40 -44
- package/SVF-doxygen/html/html/SVFIR_8h_source.html +112 -109
- package/SVF-doxygen/html/html/SVFStat_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/SaberCondAllocator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SaberCondAllocator_8h_source.html +2 -2
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +16 -16
- package/SVF-doxygen/html/html/SymbolTableBuilder_8h_source.html +1 -1
- package/SVF-doxygen/html/html/TCT_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/TCT_8h_source.html +4 -4
- package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/VFG_8cpp_source.html +15 -15
- package/SVF-doxygen/html/html/VFG_8h_source.html +9 -9
- package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/WPAPass_8h_source.html +1 -1
- package/SVF-doxygen/html/html/cfl_8cpp.html +1 -2
- package/SVF-doxygen/html/html/cfl_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +18 -18
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1BreakConstantGEPs.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1CFLAlias.html +18 -18
- package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1CallGraphBuilder.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +47 -47
- package/SVF-doxygen/html/html/classSVF_1_1DDAClient.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +3 -4
- package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ICFG-members.html +78 -77
- package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +111 -86
- package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +42 -36
- package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter-members.html +68 -67
- package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +3 -1
- package/SVF-doxygen/html/html/classSVF_1_1IRAnnotator.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1IteratedDominanceFrontier.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1LLVMLoopAnalysis.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +16 -16
- package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1MHP.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +20 -20
- package/SVF-doxygen/html/html/classSVF_1_1MTA.html +4 -5
- package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1MergeFunctionRets.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1PCG.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1PTACFInfoBuilder.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +21 -21
- package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +23 -23
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR-members.html +15 -12
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +355 -268
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +232 -224
- package/SVF-doxygen/html/html/classSVF_1_1SVFStat.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1SaberCondAllocator.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +1 -2
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +19 -19
- package/SVF-doxygen/html/html/classSVF_1_1TCT.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraphBuilder.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1VFG.html +30 -30
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +7 -8
- package/SVF-doxygen/html/html/functions_a.html +8 -5
- package/SVF-doxygen/html/html/functions_b.html +1 -1
- package/SVF-doxygen/html/html/functions_func.html +12 -9
- package/SVF-doxygen/html/html/functions_func_b.html +1 -1
- package/SVF-doxygen/html/html/functions_func_i.html +3 -3
- package/SVF-doxygen/html/html/functions_func_s.html +15 -11
- package/SVF-doxygen/html/html/functions_i.html +2 -2
- package/SVF-doxygen/html/html/functions_l.html +8 -8
- package/SVF-doxygen/html/html/functions_n.html +3 -3
- package/SVF-doxygen/html/html/functions_o.html +11 -11
- package/SVF-doxygen/html/html/functions_p.html +16 -12
- package/SVF-doxygen/html/html/functions_r.html +1 -1
- package/SVF-doxygen/html/html/functions_s.html +22 -19
- package/SVF-doxygen/html/html/functions_t.html +7 -7
- package/SVF-doxygen/html/html/functions_v.html +3 -3
- package/SVF-doxygen/html/html/functions_vars_s.html +2 -1
- package/SVF-doxygen/html/html/namespaceSVF.html +86 -86
- package/SVF-doxygen/html/html/namespaceSVF_1_1LLVMUtil.html +22 -22
- package/SVF-doxygen/html/html/namespaceSVF_1_1cppUtil.html +5 -5
- package/SVF-doxygen/html/html/search/all_1.js +1 -0
- package/SVF-doxygen/html/html/search/all_10.js +4 -4
- package/SVF-doxygen/html/html/search/all_11.js +1 -1
- package/SVF-doxygen/html/html/search/all_12.js +10 -9
- package/SVF-doxygen/html/html/search/all_13.js +6 -6
- package/SVF-doxygen/html/html/search/all_15.js +2 -2
- package/SVF-doxygen/html/html/search/all_16.js +1 -1
- package/SVF-doxygen/html/html/search/all_2.js +1 -1
- package/SVF-doxygen/html/html/search/all_9.js +2 -2
- package/SVF-doxygen/html/html/search/all_b.js +1 -1
- package/SVF-doxygen/html/html/search/all_c.js +5 -5
- package/SVF-doxygen/html/html/search/all_d.js +1 -1
- package/SVF-doxygen/html/html/search/all_e.js +1 -1
- package/SVF-doxygen/html/html/search/all_f.js +3 -3
- package/SVF-doxygen/html/html/search/functions_0.js +1 -0
- package/SVF-doxygen/html/html/search/functions_1.js +1 -1
- package/SVF-doxygen/html/html/search/functions_11.js +4 -3
- package/SVF-doxygen/html/html/search/functions_8.js +1 -1
- package/SVF-doxygen/html/html/search/variables_12.js +2 -2
- package/SVF-doxygen/html/html/search/variables_13.js +3 -3
- package/SVF-doxygen/html/html/search/variables_9.js +1 -1
- package/SVF-doxygen/html/html/search/variables_c.js +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ICFG_01_5_01_4.html +16 -16
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1ICFGNode_01_5_01_4_01_4.html +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1ICFGNode_01_5_01_4.html +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1ICFG_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/html/svf-ex_8cpp.html +3 -4
- package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +4 -4
- package/include/Graphs/ICFG.h +5 -0
- package/include/MemoryModel/SVFIR.h +14 -4
- package/include/SVF-FE/BasicTypes.h +1 -0
- package/include/SVF-FE/SVFIRBuilder.h +3 -3
- package/lib/DDA/DDAPass.cpp +2 -2
- package/lib/Graphs/ICFG.cpp +0 -3
- package/lib/MTA/MTA.cpp +2 -2
- package/lib/MemoryModel/SVFIR.cpp +0 -3
- package/lib/SABER/SrcSnkDDA.cpp +2 -2
- package/lib/SVF-FE/ICFGBuilder.cpp +4 -0
- package/lib/SVF-FE/SVFIRBuilder.cpp +13 -4
- package/lib/WPA/WPAPass.cpp +2 -2
- package/package.json +1 -1
- package/tools/CFL/cfl.cpp +2 -2
- package/tools/Example/svf-ex.cpp +2 -2
|
@@ -314,7 +314,7 @@ Static Private Attributes</h2></td></tr>
|
|
|
314
314
|
</div><div class="memdoc">
|
|
315
315
|
|
|
316
316
|
<p class="definition">Definition at line <a class="el" href="LLVMModule_8cpp_source.html#l00419">419</a> of file <a class="el" href="LLVMModule_8cpp_source.html">LLVMModule.cpp</a>.</p>
|
|
317
|
-
<div class="fragment"><div class="line"><a name="l00420"></a><span class="lineno"> 420</span> {</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  std::vector<const Function *> ctor_funcs;</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  std::vector<const Function *> dtor_funcs;</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> * orgMain = 0;</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  <a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a>* mainMod = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span> </div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> &mod : <a class="code" href="classSVF_1_1LLVMModuleSet.html#acde6292e719c80f93d3d1c344ab442cd">modules</a>)</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  {</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  <span class="comment">// Collect ctor and dtor functions</span></div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  <span class="keywordflow">for</span> (Module::global_iterator it = mod.global_begin(),</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  eit = mod.global_end();</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  it != eit; ++it)</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  {</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a> *global = &*it;</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span> </div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  <span class="keywordflow">if</span> (global->getName().equals(<a class="code" href="LLVMModule_8cpp.html#aa18802f2f60ef8030c66a42f20f285af">SVF_GLOBAL_CTORS</a>) &&</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  global->hasInitializer())</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  {</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  ctor_funcs = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a0b46a2a5ff2165d17993a071d9cc82c1">getLLVMGlobalFunctions</a>(global);</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  }</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (global->getName().equals(<a class="code" href="LLVMModule_8cpp.html#a9fd6e28e6ed93f65a20a348ab0646320">SVF_GLOBAL_DTORS</a>) &&</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  global->hasInitializer())</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  {</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  dtor_funcs = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a0b46a2a5ff2165d17993a071d9cc82c1">getLLVMGlobalFunctions</a>(global);</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  }</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  }</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span> </div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  <span class="comment">// Find main function</span></div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> &func : mod)</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  {</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  <span class="keywordflow">if</span> (func.getName().equals(<a class="code" href="LLVMModule_8cpp.html#a10ab7c7da3a458495d8528b9e90d714b">SVF_MAIN_FUNC_NAME</a>))</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  assert(<span class="keyword">false</span> && <a class="code" href="LLVMModule_8cpp.html#a10ab7c7da3a458495d8528b9e90d714b">SVF_MAIN_FUNC_NAME</a> <span class="stringliteral">" already defined"</span>);</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  <span class="keywordflow">if</span>(func.getName().equals(<span class="stringliteral">"main"</span>))</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  {</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  orgMain = &func;</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  mainMod = &mod;</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  }</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  }</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  }</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span> </div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  <span class="comment">// Only create svf.main when the original main function is found, and also</span></div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  <span class="comment">// there are global contructor or destructor functions.</span></div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  <span class="keywordflow">if</span> (orgMain && <a class="code" href="classSVF_1_1LLVMModuleSet.html#ae265a7f3cc7367d62013e0f15cf3d233">getModuleNum</a>() > 0 &&</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  (ctor_funcs.size() > 0 || dtor_funcs.size() > 0))</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  {</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  assert(mainMod && <span class="stringliteral">"Module with main function not found."</span>);</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  <a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> & M = *mainMod;</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <span class="comment">// char **</span></div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> * i8ptr2 = PointerType::getInt8PtrTy(M.getContext())->getPointerTo();</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> * i32 = IntegerType::getInt32Ty(M.getContext());</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  <span class="comment">// define void @svf.main(i32, i8**, i8**)</span></div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span> <span class="preprocessor">#if (LLVM_VERSION_MAJOR >= 9)</span></div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  FunctionCallee svfmainFn = M.getOrInsertFunction(</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  <a class="code" href="LLVMModule_8cpp.html#a10ab7c7da3a458495d8528b9e90d714b">SVF_MAIN_FUNC_NAME</a>,</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  Type::getVoidTy(M.getContext()),</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  i32,i8ptr2,i8ptr2</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  );</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *svfmain = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>>(svfmainFn.getCallee());</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *svfmain = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>>(M.getOrInsertFunction(</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  <a class="code" href="LLVMModule_8cpp.html#a10ab7c7da3a458495d8528b9e90d714b">SVF_MAIN_FUNC_NAME</a>,</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  Type::getVoidTy(M.getContext()),</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  i32,i8ptr2,i8ptr2</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  ));</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  svfmain->setCallingConv(llvm::CallingConv::C);</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* block = BasicBlock::Create(M.getContext(), <span class="stringliteral">"entry"</span>, svfmain);</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  <a class="code" href="namespaceSVF.html#a94824519e439aeef1568d415b6f7331c">IRBuilder</a> Builder(block);</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  <span class="comment">// emit "call void @ctor()". ctor_funcs is sorted so the functions are</span></div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  <span class="comment">// emitted in the order of priority</span></div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  <span class="keywordflow">for</span>(<span class="keyword">auto</span> & ctor: ctor_funcs)</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  {</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  <span class="keyword">auto</span> target = M.getOrInsertFunction(</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  ctor->getName(),</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>  Type::getVoidTy(M.getContext())</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  );</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  Builder.CreateCall(target);</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  }</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  <span class="comment">// main() should be called after all ctor functions and before dtor</span></div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  <span class="comment">// functions.</span></div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  Function::arg_iterator arg_it = svfmain->arg_begin();</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> * args[] = {arg_it, arg_it + 1, arg_it + 2 };</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  <span class="keywordtype">size_t</span> cnt = orgMain->arg_size();</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  assert(cnt <= 3 && <span class="stringliteral">"Too many arguments for main()"</span>);</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  Builder.CreateCall(orgMain, llvm::ArrayRef<Value*>(args,args + cnt));</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  <span class="comment">// emit "call void @dtor()". dtor_funcs is sorted so the functions are</span></div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  <span class="comment">// emitted in the order of priority</span></div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> &dtor : dtor_funcs)</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  {</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  <span class="keyword">auto</span> target = M.getOrInsertFunction(</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  dtor->getName(),</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  Type::getVoidTy(M.getContext())</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  );</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  Builder.CreateCall(target);</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  }</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  <span class="comment">// return;</span></div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  Builder.CreateRetVoid();</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  }</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span> }</div><div class="ttc" id="namespaceSVF_html_aa7a770b5dd5cd0e37d06a1088f252906"><div class="ttname"><a href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">SVF::Module</a></div><div class="ttdeci">llvm::Module Module</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00045">BasicTypes.h:45</a></div></div>
|
|
317
|
+
<div class="fragment"><div class="line"><a name="l00420"></a><span class="lineno"> 420</span> {</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  std::vector<const Function *> ctor_funcs;</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  std::vector<const Function *> dtor_funcs;</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> * orgMain = 0;</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  <a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a>* mainMod = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span> </div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> &mod : <a class="code" href="classSVF_1_1LLVMModuleSet.html#acde6292e719c80f93d3d1c344ab442cd">modules</a>)</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  {</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  <span class="comment">// Collect ctor and dtor functions</span></div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  <span class="keywordflow">for</span> (Module::global_iterator it = mod.global_begin(),</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  eit = mod.global_end();</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  it != eit; ++it)</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  {</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a> *global = &*it;</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span> </div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  <span class="keywordflow">if</span> (global->getName().equals(<a class="code" href="LLVMModule_8cpp.html#aa18802f2f60ef8030c66a42f20f285af">SVF_GLOBAL_CTORS</a>) &&</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  global->hasInitializer())</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  {</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  ctor_funcs = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a0b46a2a5ff2165d17993a071d9cc82c1">getLLVMGlobalFunctions</a>(global);</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  }</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (global->getName().equals(<a class="code" href="LLVMModule_8cpp.html#a9fd6e28e6ed93f65a20a348ab0646320">SVF_GLOBAL_DTORS</a>) &&</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  global->hasInitializer())</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  {</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  dtor_funcs = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a0b46a2a5ff2165d17993a071d9cc82c1">getLLVMGlobalFunctions</a>(global);</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  }</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  }</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span> </div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  <span class="comment">// Find main function</span></div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> &func : mod)</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  {</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  <span class="keywordflow">if</span> (func.getName().equals(<a class="code" href="LLVMModule_8cpp.html#a10ab7c7da3a458495d8528b9e90d714b">SVF_MAIN_FUNC_NAME</a>))</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  assert(<span class="keyword">false</span> && <a class="code" href="LLVMModule_8cpp.html#a10ab7c7da3a458495d8528b9e90d714b">SVF_MAIN_FUNC_NAME</a> <span class="stringliteral">" already defined"</span>);</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  <span class="keywordflow">if</span>(func.getName().equals(<span class="stringliteral">"main"</span>))</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  {</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  orgMain = &func;</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  mainMod = &mod;</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  }</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  }</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  }</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span> </div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  <span class="comment">// Only create svf.main when the original main function is found, and also</span></div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  <span class="comment">// there are global contructor or destructor functions.</span></div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  <span class="keywordflow">if</span> (orgMain && <a class="code" href="classSVF_1_1LLVMModuleSet.html#ae265a7f3cc7367d62013e0f15cf3d233">getModuleNum</a>() > 0 &&</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  (ctor_funcs.size() > 0 || dtor_funcs.size() > 0))</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  {</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  assert(mainMod && <span class="stringliteral">"Module with main function not found."</span>);</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  <a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> & M = *mainMod;</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <span class="comment">// char **</span></div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> * i8ptr2 = PointerType::getInt8PtrTy(M.getContext())->getPointerTo();</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> * i32 = IntegerType::getInt32Ty(M.getContext());</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  <span class="comment">// define void @svf.main(i32, i8**, i8**)</span></div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span> <span class="preprocessor">#if (LLVM_VERSION_MAJOR >= 9)</span></div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  FunctionCallee svfmainFn = M.getOrInsertFunction(</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  <a class="code" href="LLVMModule_8cpp.html#a10ab7c7da3a458495d8528b9e90d714b">SVF_MAIN_FUNC_NAME</a>,</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  Type::getVoidTy(M.getContext()),</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  i32,i8ptr2,i8ptr2</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  );</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *svfmain = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>>(svfmainFn.getCallee());</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *svfmain = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>>(M.getOrInsertFunction(</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  <a class="code" href="LLVMModule_8cpp.html#a10ab7c7da3a458495d8528b9e90d714b">SVF_MAIN_FUNC_NAME</a>,</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  Type::getVoidTy(M.getContext()),</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  i32,i8ptr2,i8ptr2</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  ));</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  svfmain->setCallingConv(llvm::CallingConv::C);</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* block = BasicBlock::Create(M.getContext(), <span class="stringliteral">"entry"</span>, svfmain);</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  <a class="code" href="namespaceSVF.html#a94824519e439aeef1568d415b6f7331c">IRBuilder</a> Builder(block);</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  <span class="comment">// emit "call void @ctor()". ctor_funcs is sorted so the functions are</span></div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  <span class="comment">// emitted in the order of priority</span></div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  <span class="keywordflow">for</span>(<span class="keyword">auto</span> & ctor: ctor_funcs)</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  {</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  <span class="keyword">auto</span> target = M.getOrInsertFunction(</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  ctor->getName(),</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>  Type::getVoidTy(M.getContext())</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  );</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  Builder.CreateCall(target);</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  }</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  <span class="comment">// main() should be called after all ctor functions and before dtor</span></div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  <span class="comment">// functions.</span></div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  Function::arg_iterator arg_it = svfmain->arg_begin();</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> * args[] = {arg_it, arg_it + 1, arg_it + 2 };</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  <span class="keywordtype">size_t</span> cnt = orgMain->arg_size();</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  assert(cnt <= 3 && <span class="stringliteral">"Too many arguments for main()"</span>);</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  Builder.CreateCall(orgMain, llvm::ArrayRef<Value*>(args,args + cnt));</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  <span class="comment">// emit "call void @dtor()". dtor_funcs is sorted so the functions are</span></div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  <span class="comment">// emitted in the order of priority</span></div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> &dtor : dtor_funcs)</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  {</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  <span class="keyword">auto</span> target = M.getOrInsertFunction(</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  dtor->getName(),</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  Type::getVoidTy(M.getContext())</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  );</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  Builder.CreateCall(target);</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  }</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  <span class="comment">// return;</span></div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  Builder.CreateRetVoid();</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  }</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span> }</div><div class="ttc" id="namespaceSVF_html_aa7a770b5dd5cd0e37d06a1088f252906"><div class="ttname"><a href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">SVF::Module</a></div><div class="ttdeci">llvm::Module Module</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00046">BasicTypes.h:46</a></div></div>
|
|
318
318
|
<div class="ttc" id="namespaceSVF_html_a23bf614858f168b6ad76e0233cec9965"><div class="ttname"><a href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">SVF::BasicBlock</a></div><div class="ttdeci">llvm::BasicBlock BasicBlock</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00070">BasicTypes.h:70</a></div></div>
|
|
319
319
|
<div class="ttc" id="namespaceSVF_html_a1d008c0666c145622b81d427be64c52d"><div class="ttname"><a href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">SVF::Type</a></div><div class="ttdeci">llvm::Type Type</div><div class="ttdoc">LLVM Basic classes. </div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00064">BasicTypes.h:64</a></div></div>
|
|
320
320
|
<div class="ttc" id="namespaceSVF_html_a09f5fa3bc44bf53612a085e3a611cc4e"><div class="ttname"><a href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">SVF::GlobalVariable</a></div><div class="ttdeci">llvm::GlobalVariable GlobalVariable</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00075">BasicTypes.h:75</a></div></div>
|
|
@@ -322,7 +322,7 @@ Static Private Attributes</h2></td></tr>
|
|
|
322
322
|
<div class="ttc" id="classSVF_1_1LLVMModuleSet_html_ae265a7f3cc7367d62013e0f15cf3d233"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#ae265a7f3cc7367d62013e0f15cf3d233">SVF::LLVMModuleSet::getModuleNum</a></div><div class="ttdeci">u32_t getModuleNum() const</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00095">LLVMModule.h:95</a></div></div>
|
|
323
323
|
<div class="ttc" id="namespaceSVF_html_a5faee14fa1dd41447bc73ac365fe33c1"><div class="ttname"><a href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">SVF::Function</a></div><div class="ttdeci">llvm::Function Function</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00069">BasicTypes.h:69</a></div></div>
|
|
324
324
|
<div class="ttc" id="classSVF_1_1LLVMModuleSet_html_a0b46a2a5ff2165d17993a071d9cc82c1"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a0b46a2a5ff2165d17993a071d9cc82c1">SVF::LLVMModuleSet::getLLVMGlobalFunctions</a></div><div class="ttdeci">std::vector< const Function * > getLLVMGlobalFunctions(const GlobalVariable *global)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00329">LLVMModule.cpp:329</a></div></div>
|
|
325
|
-
<div class="ttc" id="namespaceSVF_html_a94824519e439aeef1568d415b6f7331c"><div class="ttname"><a href="namespaceSVF.html#a94824519e439aeef1568d415b6f7331c">SVF::IRBuilder</a></div><div class="ttdeci">llvm::IRBuilder IRBuilder</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#
|
|
325
|
+
<div class="ttc" id="namespaceSVF_html_a94824519e439aeef1568d415b6f7331c"><div class="ttname"><a href="namespaceSVF.html#a94824519e439aeef1568d415b6f7331c">SVF::IRBuilder</a></div><div class="ttdeci">llvm::IRBuilder IRBuilder</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00039">BasicTypes.h:39</a></div></div>
|
|
326
326
|
<div class="ttc" id="LLVMModule_8cpp_html_aa18802f2f60ef8030c66a42f20f285af"><div class="ttname"><a href="LLVMModule_8cpp.html#aa18802f2f60ef8030c66a42f20f285af">SVF_GLOBAL_CTORS</a></div><div class="ttdeci">#define SVF_GLOBAL_CTORS</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00069">LLVMModule.cpp:69</a></div></div>
|
|
327
327
|
<div class="ttc" id="LLVMModule_8cpp_html_a10ab7c7da3a458495d8528b9e90d714b"><div class="ttname"><a href="LLVMModule_8cpp.html#a10ab7c7da3a458495d8528b9e90d714b">SVF_MAIN_FUNC_NAME</a></div><div class="ttdeci">#define SVF_MAIN_FUNC_NAME</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00068">LLVMModule.cpp:68</a></div></div>
|
|
328
328
|
<div class="ttc" id="classSVF_1_1LLVMModuleSet_html_acde6292e719c80f93d3d1c344ab442cd"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#acde6292e719c80f93d3d1c344ab442cd">SVF::LLVMModuleSet::modules</a></div><div class="ttdeci">std::vector< std::reference_wrapper< Module > > modules</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00055">LLVMModule.h:55</a></div></div>
|
|
@@ -358,18 +358,18 @@ Static Private Attributes</h2></td></tr>
|
|
|
358
358
|
<div class="fragment"><div class="line"><a name="l00129"></a><span class="lineno"> 129</span> {</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <a class="code" href="classSVF_1_1LLVMModuleSet.html#ac7c646a78c989807c52263fc35fb3628">buildFunToFunMap</a>();</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <a class="code" href="classSVF_1_1LLVMModuleSet.html#a9782bf6b7b015fd8fb48f75eb4508d22">initialize</a>();</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <a class="code" href="classSVF_1_1LLVMModuleSet.html#aaab03cb6ff665bc008c67b866ba81e47">buildGlobalDefToRepMap</a>();</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a14b0b55d397d6f8a5dfe3b574021f801">preProcessed</a>==<span class="keyword">false</span>)</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <a class="code" href="classSVF_1_1LLVMModuleSet.html#a8b5f24c873db1f6a0614d1dac48bb4bb">prePassSchedule</a>();</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFModule.html#acfd1ffb4696136de493843786c799e6b">SVFModule::FunctionSetType</a>& functions = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a43832e93a42ae43d44b0cc160981678f">svfModule</a>-><a class="code" href="classSVF_1_1SVFModule.html#abbaf48d9702ec1f38dc6ae137ca630a1">getFunctionSet</a>();</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keywordflow">for</span> (SVFModule::FunctionSetType::const_iterator func_iter = functions.begin(); func_iter != functions.end(); func_iter++)</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* func = *func_iter;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keyword">const</span> <span class="keywordtype">bool</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a2c61d741afbcfa853b505cd391f29f9b">isUncalledFunction</a> = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a2c61d741afbcfa853b505cd391f29f9b">LLVMUtil::isUncalledFunction</a>(func-><a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>());</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keyword">const</span> <span class="keywordtype">bool</span> isNotRetFunction = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a651b6a1cf3665277d2241220bb145aed">LLVMUtil::functionDoesNotRet</a>(func-><a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>());</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svffun = <span class="keyword">const_cast<</span><a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>*<span class="keyword">></span>(func);</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  svffun-><a class="code" href="classSVF_1_1SVFFunction.html#a3ff1ce3a7e4a9f4037a8bb74ddb5fabf">setIsNotRet</a>(isNotRetFunction);</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  svffun->setIsUncalledFunction(isUncalledFunction);</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">SVFUtil::isExtCall</a>(func) == <span class="keyword">false</span>)</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  {</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  std::vector<const BasicBlock*> reachableBBs;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <a class="code" href="namespaceSVF_1_1LLVMUtil.html#acf537fc9f72ca46c3b04bea3f2c2fb79">LLVMUtil::getFunReachableBBs</a>(func, reachableBBs);</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *exitBB = <span class="keyword">const_cast<</span><a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>*<span class="keyword">></span>(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a3ef84be7e91335c7b35c395d247f85ae">LLVMUtil::getFunExitBB</a>(func));</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  svffun->setReachableBBs(reachableBBs);</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  svffun->setExitBB(exitBB);</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="comment">//process and stored dt & df</span></div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <a class="code" href="namespaceSVF.html#aecbb42b8e9d17fa0189c50dda9fd5fdd">DominatorTree</a> dt;</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <a class="code" href="namespaceSVF.html#ab44d20f806be99699895260b14a942d7">DominanceFrontier</a> df;</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  dt.recalculate(*svffun->getLLVMFun());</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  df.analyze(dt);</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <a class="code" href="namespaceSVF.html#a77e088bfe47c0b0ddcbbe0693dec6fe5">LoopInfo</a> loopInfo = <a class="code" href="namespaceSVF.html#a77e088bfe47c0b0ddcbbe0693dec6fe5">LoopInfo</a>(dt);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <a class="code" href="namespaceSVF.html#ab34383ee87cd45eb485fa29db482ffef">PostDominatorTree</a> pdt = <a class="code" href="namespaceSVF.html#ab34383ee87cd45eb485fa29db482ffef">PostDominatorTree</a>(*(func-><a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()));</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<const BasicBlock*,Set<const BasicBlock*></a>> & dfBBsMap = svffun->getDomFrontierMap();</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <span class="keywordflow">for</span> (DominanceFrontierBase::const_iterator dfIter = df.begin(), eDfIter = df.end(); dfIter != eDfIter; dfIter++)</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  {</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* keyBB = dfIter->first;</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <span class="keyword">const</span> std::set<BasicBlock *>& domSet = dfIter->second;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<const BasicBlock*></a>& valueBasicBlocks = dfBBsMap[keyBB];</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* bbValue:domSet)</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  {</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  valueBasicBlocks.insert(bbValue);</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  }</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  }</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="keywordflow">for</span> (Function::const_iterator bit = svffun->getLLVMFun()->begin(), ebit = svffun->getLLVMFun()->end(); bit != ebit; ++bit)</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  {</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *bb = &*bit;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF.html#a827d09974dc7bf0849f96823cc2fee89">DomTreeNode</a> *dtNode = dt.getNode(const_cast<BasicBlock*>(bb)))</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  {</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  DomTreeNode::iterator DI = dtNode->begin();</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="keywordflow">if</span> (DI != dtNode->end())</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  {</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <span class="keywordflow">for</span> (DomTreeNode::iterator DI = dtNode->begin(), DE = dtNode->end(); DI != DE; ++DI)</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  {</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  svffun->getDomTreeMap()[bb].insert((*DI)->getBlock());</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  }</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  }</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  {</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  svffun->getDomTreeMap()[bb] = <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<const BasicBlock *></a>();</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  }</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  }</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF.html#a827d09974dc7bf0849f96823cc2fee89">DomTreeNode</a> * pdtNode = pdt.getNode(const_cast<BasicBlock*>(bb)))</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  {</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  DomTreeNode::iterator DI = pdtNode->begin();</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="keywordflow">if</span> (DI != pdtNode->end())</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  {</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="keywordflow">for</span> (DomTreeNode::iterator DI = pdtNode->begin(), DE = pdtNode->end(); DI != DE; ++DI)</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  {</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  svffun->getPostDomTreeMap()[bb].insert((*DI)->getBlock());</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  }</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  }</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  {</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  svffun->getPostDomTreeMap()[bb] = <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<const BasicBlock *></a>();</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  }</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  }</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#abf85e29310b2e4df8925d00a5c081314">Loop</a> *loop = loopInfo.getLoopFor(bb))</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  {</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* loopBlock:loop->getBlocks())</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  {</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  svffun->addToBB2LoopMap(bb,loopBlock);</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  }</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  }</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  }</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  }</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  }</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> }</div><div class="ttc" id="namespaceSVF_html_a23bf614858f168b6ad76e0233cec9965"><div class="ttname"><a href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">SVF::BasicBlock</a></div><div class="ttdeci">llvm::BasicBlock BasicBlock</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00070">BasicTypes.h:70</a></div></div>
|
|
359
359
|
<div class="ttc" id="namespaceSVF_1_1LLVMUtil_html_a3ef84be7e91335c7b35c395d247f85ae"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a3ef84be7e91335c7b35c395d247f85ae">SVF::LLVMUtil::getFunExitBB</a></div><div class="ttdeci">const BasicBlock * getFunExitBB(const SVFFunction *svfFun)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00167">LLVMUtil.h:167</a></div></div>
|
|
360
360
|
<div class="ttc" id="classSVF_1_1SVFFunction_html"><div class="ttname"><a href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a></div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00114">BasicTypes.h:114</a></div></div>
|
|
361
|
-
<div class="ttc" id="namespaceSVF_html_a77e088bfe47c0b0ddcbbe0693dec6fe5"><div class="ttname"><a href="namespaceSVF.html#a77e088bfe47c0b0ddcbbe0693dec6fe5">SVF::LoopInfo</a></div><div class="ttdeci">llvm::LoopInfo LoopInfo</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#
|
|
361
|
+
<div class="ttc" id="namespaceSVF_html_a77e088bfe47c0b0ddcbbe0693dec6fe5"><div class="ttname"><a href="namespaceSVF.html#a77e088bfe47c0b0ddcbbe0693dec6fe5">SVF::LoopInfo</a></div><div class="ttdeci">llvm::LoopInfo LoopInfo</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00081">BasicTypes.h:81</a></div></div>
|
|
362
362
|
<div class="ttc" id="classSVF_1_1LLVMModuleSet_html_aaab03cb6ff665bc008c67b866ba81e47"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#aaab03cb6ff665bc008c67b866ba81e47">SVF::LLVMModuleSet::buildGlobalDefToRepMap</a></div><div class="ttdeci">void buildGlobalDefToRepMap()</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00633">LLVMModule.cpp:633</a></div></div>
|
|
363
363
|
<div class="ttc" id="namespaceSVF_html_a8234d4b959abc9123993bcff4eee34c1"><div class="ttname"><a href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">SVF::Map</a></div><div class="ttdeci">std::unordered_map< Key, Value, Hash, KeyEqual, Allocator > Map</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00110">SVFBasicTypes.h:110</a></div></div>
|
|
364
|
-
<div class="ttc" id="namespaceSVF_html_ab44d20f806be99699895260b14a942d7"><div class="ttname"><a href="namespaceSVF.html#ab44d20f806be99699895260b14a942d7">SVF::DominanceFrontier</a></div><div class="ttdeci">llvm::DominanceFrontier DominanceFrontier</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#
|
|
365
|
-
<div class="ttc" id="namespaceSVF_html_ab34383ee87cd45eb485fa29db482ffef"><div class="ttname"><a href="namespaceSVF.html#ab34383ee87cd45eb485fa29db482ffef">SVF::PostDominatorTree</a></div><div class="ttdeci">llvm::PostDominatorTree PostDominatorTree</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#
|
|
366
|
-
<div class="ttc" id="namespaceSVF_html_a827d09974dc7bf0849f96823cc2fee89"><div class="ttname"><a href="namespaceSVF.html#a827d09974dc7bf0849f96823cc2fee89">SVF::DomTreeNode</a></div><div class="ttdeci">llvm::DomTreeNode DomTreeNode</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#
|
|
364
|
+
<div class="ttc" id="namespaceSVF_html_ab44d20f806be99699895260b14a942d7"><div class="ttname"><a href="namespaceSVF.html#ab44d20f806be99699895260b14a942d7">SVF::DominanceFrontier</a></div><div class="ttdeci">llvm::DominanceFrontier DominanceFrontier</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00075">BasicTypes.h:75</a></div></div>
|
|
365
|
+
<div class="ttc" id="namespaceSVF_html_ab34383ee87cd45eb485fa29db482ffef"><div class="ttname"><a href="namespaceSVF.html#ab34383ee87cd45eb485fa29db482ffef">SVF::PostDominatorTree</a></div><div class="ttdeci">llvm::PostDominatorTree PostDominatorTree</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00076">BasicTypes.h:76</a></div></div>
|
|
366
|
+
<div class="ttc" id="namespaceSVF_html_a827d09974dc7bf0849f96823cc2fee89"><div class="ttname"><a href="namespaceSVF.html#a827d09974dc7bf0849f96823cc2fee89">SVF::DomTreeNode</a></div><div class="ttdeci">llvm::DomTreeNode DomTreeNode</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00074">BasicTypes.h:74</a></div></div>
|
|
367
367
|
<div class="ttc" id="classSVF_1_1SVFModule_html_abbaf48d9702ec1f38dc6ae137ca630a1"><div class="ttname"><a href="classSVF_1_1SVFModule.html#abbaf48d9702ec1f38dc6ae137ca630a1">SVF::SVFModule::getFunctionSet</a></div><div class="ttdeci">const FunctionSetType & getFunctionSet() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00221">SVFModule.h:221</a></div></div>
|
|
368
368
|
<div class="ttc" id="namespaceSVF_html_af739db846e47ba6b2fd15eaad31ab7fb"><div class="ttname"><a href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">SVF::Set</a></div><div class="ttdeci">std::unordered_set< Key, Hash, KeyEqual, Allocator > Set</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00105">SVFBasicTypes.h:105</a></div></div>
|
|
369
369
|
<div class="ttc" id="namespaceSVF_1_1LLVMUtil_html_a651b6a1cf3665277d2241220bb145aed"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a651b6a1cf3665277d2241220bb145aed">SVF::LLVMUtil::functionDoesNotRet</a></div><div class="ttdeci">bool functionDoesNotRet(const Function *fun)</div><div class="ttdoc">Return true if the function has a return instruction reachable from function entry. </div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00128">LLVMUtil.cpp:128</a></div></div>
|
|
370
|
-
<div class="ttc" id="namespaceSVF_html_abf85e29310b2e4df8925d00a5c081314"><div class="ttname"><a href="namespaceSVF.html#abf85e29310b2e4df8925d00a5c081314">SVF::Loop</a></div><div class="ttdeci">llvm::Loop Loop</div><div class="ttdoc">LLVM Loop. </div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#
|
|
370
|
+
<div class="ttc" id="namespaceSVF_html_abf85e29310b2e4df8925d00a5c081314"><div class="ttname"><a href="namespaceSVF.html#abf85e29310b2e4df8925d00a5c081314">SVF::Loop</a></div><div class="ttdeci">llvm::Loop Loop</div><div class="ttdoc">LLVM Loop. </div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00080">BasicTypes.h:80</a></div></div>
|
|
371
371
|
<div class="ttc" id="classSVF_1_1LLVMModuleSet_html_a9782bf6b7b015fd8fb48f75eb4508d22"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a9782bf6b7b015fd8fb48f75eb4508d22">SVF::LLVMModuleSet::initialize</a></div><div class="ttdeci">void initialize()</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00295">LLVMModule.cpp:295</a></div></div>
|
|
372
|
-
<div class="ttc" id="namespaceSVF_html_aecbb42b8e9d17fa0189c50dda9fd5fdd"><div class="ttname"><a href="namespaceSVF.html#aecbb42b8e9d17fa0189c50dda9fd5fdd">SVF::DominatorTree</a></div><div class="ttdeci">llvm::DominatorTree DominatorTree</div><div class="ttdoc">LLVM Dominators. </div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#
|
|
372
|
+
<div class="ttc" id="namespaceSVF_html_aecbb42b8e9d17fa0189c50dda9fd5fdd"><div class="ttname"><a href="namespaceSVF.html#aecbb42b8e9d17fa0189c50dda9fd5fdd">SVF::DominatorTree</a></div><div class="ttdeci">llvm::DominatorTree DominatorTree</div><div class="ttdoc">LLVM Dominators. </div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00073">BasicTypes.h:73</a></div></div>
|
|
373
373
|
<div class="ttc" id="namespaceSVF_1_1LLVMUtil_html_acf537fc9f72ca46c3b04bea3f2c2fb79"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#acf537fc9f72ca46c3b04bea3f2c2fb79">SVF::LLVMUtil::getFunReachableBBs</a></div><div class="ttdeci">void getFunReachableBBs(const SVFFunction *svfFun, std::vector< const BasicBlock *> &bbs)</div><div class="ttdoc">Get reachable basic block from function entry. </div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00094">LLVMUtil.cpp:94</a></div></div>
|
|
374
374
|
<div class="ttc" id="classSVF_1_1LLVMModuleSet_html_a43832e93a42ae43d44b0cc160981678f"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a43832e93a42ae43d44b0cc160981678f">SVF::LLVMModuleSet::svfModule</a></div><div class="ttdeci">SVFModule * svfModule</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00052">LLVMModule.h:52</a></div></div>
|
|
375
375
|
<div class="ttc" id="classSVF_1_1SVFFunction_html_ac4ae917ae35ac6fca652fe2dd90a8ac2"><div class="ttname"><a href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">SVF::SVFFunction::getLLVMFun</a></div><div class="ttdeci">Function * getLLVMFun() const</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00140">BasicTypes.h:140</a></div></div>
|
|
@@ -526,8 +526,8 @@ Static Private Attributes</h2></td></tr>
|
|
|
526
526
|
</div><div class="memdoc">
|
|
527
527
|
|
|
528
528
|
<p class="definition">Definition at line <a class="el" href="LLVMModule_8cpp_source.html#l00684">684</a> of file <a class="el" href="LLVMModule_8cpp_source.html">LLVMModule.cpp</a>.</p>
|
|
529
|
-
<div class="fragment"><div class="line"><a name="l00685"></a><span class="lineno"> 685</span> {</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a>& mod : <a class="code" href="classSVF_1_1LLVMModuleSet.html#acde6292e719c80f93d3d1c344ab442cd">modules</a>)</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  {</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> moduleName = mod.getName().str();</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> OutputFilename;</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>  std::size_t pos = moduleName.rfind(<span class="charliteral">'.'</span>);</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  <span class="keywordflow">if</span> (pos != std::string::npos)</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>  OutputFilename = moduleName.substr(0, pos) + suffix;</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>  OutputFilename = moduleName + suffix;</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span> </div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>  std::error_code EC;</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>  <a class="code" href="namespaceSVF.html#a1c7c7ac12791c0ae386283c0a4f127ba">raw_fd_ostream</a> OS(OutputFilename.c_str(), EC, llvm::sys::fs::OF_None);</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span> </div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span> <span class="preprocessor">#if (LLVM_VERSION_MAJOR >= 7)</span></div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>  WriteBitcodeToFile(mod, OS);</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  WriteBitcodeToFile(&mod, OS);</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span> </div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  OS.flush();</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>  }</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span> }</div><div class="ttc" id="namespaceSVF_html_aa7a770b5dd5cd0e37d06a1088f252906"><div class="ttname"><a href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">SVF::Module</a></div><div class="ttdeci">llvm::Module Module</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#
|
|
530
|
-
<div class="ttc" id="namespaceSVF_html_a1c7c7ac12791c0ae386283c0a4f127ba"><div class="ttname"><a href="namespaceSVF.html#a1c7c7ac12791c0ae386283c0a4f127ba">SVF::raw_fd_ostream</a></div><div class="ttdeci">llvm::raw_fd_ostream raw_fd_ostream</div><div class="ttdoc">LLVM outputs. </div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#
|
|
529
|
+
<div class="fragment"><div class="line"><a name="l00685"></a><span class="lineno"> 685</span> {</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a>& mod : <a class="code" href="classSVF_1_1LLVMModuleSet.html#acde6292e719c80f93d3d1c344ab442cd">modules</a>)</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  {</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> moduleName = mod.getName().str();</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> OutputFilename;</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>  std::size_t pos = moduleName.rfind(<span class="charliteral">'.'</span>);</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  <span class="keywordflow">if</span> (pos != std::string::npos)</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>  OutputFilename = moduleName.substr(0, pos) + suffix;</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>  OutputFilename = moduleName + suffix;</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span> </div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>  std::error_code EC;</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>  <a class="code" href="namespaceSVF.html#a1c7c7ac12791c0ae386283c0a4f127ba">raw_fd_ostream</a> OS(OutputFilename.c_str(), EC, llvm::sys::fs::OF_None);</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span> </div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span> <span class="preprocessor">#if (LLVM_VERSION_MAJOR >= 7)</span></div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>  WriteBitcodeToFile(mod, OS);</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  WriteBitcodeToFile(&mod, OS);</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span> </div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  OS.flush();</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>  }</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span> }</div><div class="ttc" id="namespaceSVF_html_aa7a770b5dd5cd0e37d06a1088f252906"><div class="ttname"><a href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">SVF::Module</a></div><div class="ttdeci">llvm::Module Module</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00046">BasicTypes.h:46</a></div></div>
|
|
530
|
+
<div class="ttc" id="namespaceSVF_html_a1c7c7ac12791c0ae386283c0a4f127ba"><div class="ttname"><a href="namespaceSVF.html#a1c7c7ac12791c0ae386283c0a4f127ba">SVF::raw_fd_ostream</a></div><div class="ttdeci">llvm::raw_fd_ostream raw_fd_ostream</div><div class="ttdoc">LLVM outputs. </div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00193">BasicTypes.h:193</a></div></div>
|
|
531
531
|
<div class="ttc" id="classSVF_1_1LLVMModuleSet_html_acde6292e719c80f93d3d1c344ab442cd"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#acde6292e719c80f93d3d1c344ab442cd">SVF::LLVMModuleSet::modules</a></div><div class="ttdeci">std::vector< std::reference_wrapper< Module > > modules</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00055">LLVMModule.h:55</a></div></div>
|
|
532
532
|
<div class="ttc" id="cJSON_8h_html_ad4c68ea99a26b0a98ad9a79982960458"><div class="ttname"><a href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">string</a></div><div class="ttdeci">const char *const string</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00172">cJSON.h:172</a></div></div>
|
|
533
533
|
</div><!-- fragment -->
|
|
@@ -706,12 +706,12 @@ Static Private Attributes</h2></td></tr>
|
|
|
706
706
|
</div><div class="memdoc">
|
|
707
707
|
|
|
708
708
|
<p class="definition">Definition at line <a class="el" href="LLVMModule_8cpp_source.html#l00329">329</a> of file <a class="el" href="LLVMModule_8cpp_source.html">LLVMModule.cpp</a>.</p>
|
|
709
|
-
<div class="fragment"><div class="line"><a name="l00331"></a><span class="lineno"> 331</span> {</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <span class="comment">// This function is used to extract constructor and destructor functions</span></div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  <span class="comment">// sorted by their priority from @llvm.global_ctors or @llvm.global_dtors.</span></div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <span class="comment">// For example, given following @llvm.global_ctors, the returning sorted</span></div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  <span class="comment">// function list should be [ctor3, ctor1, ctor2].</span></div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <span class="comment">// ------------------------------------------------------------------</span></div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  <span class="comment">// ; Each struct in the array is {priority, function, associated data}</span></div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  <span class="comment">//</span></div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  <span class="comment">// @llvm.global_ctors = appending global [2 x { i32, void ()*, i8* }]</span></div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  <span class="comment">// [{ i32, void ()*, i8* } { i32 1234, void ()* @ctor1.cpp, i8* null },</span></div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  <span class="comment">// { i32, void ()*, i8* } { i32 2345, void ()* @ctor2.cpp, i8* null },</span></div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  <span class="comment">// { i32, void ()*, i8* } { i32 345, void ()* @ctor3.cpp, i8* null }]</span></div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  <span class="comment">// ------------------------------------------------------------------</span></div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  <span class="comment">// TODO: According to LLVM language reference, if the third field is</span></div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  <span class="comment">// non-null, and points to a global variable or function, the initializer</span></div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  <span class="comment">// function will only run if the associated data from the current module is</span></div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  <span class="comment">// not discarded. However the associated data is currently ignored.</span></div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span> </div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span> </div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  <span class="comment">// This class is used for the priority queue that sorts the functions by</span></div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  <span class="comment">// their priority. Each object of this class stands for an item in the</span></div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  <span class="comment">// function array.</span></div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  <span class="keyword">class </span>LLVMGlobalFunction</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  {</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  <span class="keyword">public</span>:</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> priority;</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *func;</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  LLVMGlobalFunction() {};</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  LLVMGlobalFunction(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> _priority, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *_func)</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  : priority(_priority), func(_func) {};</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  <span class="keywordtype">bool</span> operator>(<span class="keyword">const</span> LLVMGlobalFunction &other)<span class="keyword"> const</span></div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  <span class="keywordflow">if</span> (priority != other.priority)</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  {</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  <span class="keywordflow">return</span> priority > other.priority;</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  }</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  {</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  <span class="keywordflow">return</span> func > other.func;</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  }</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  }</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  };</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span> </div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  std::priority_queue<LLVMGlobalFunction, std::vector<LLVMGlobalFunction>,</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  greater<LLVMGlobalFunction>></div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  queue;</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  std::vector<const Function *> result;</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span> </div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  <span class="comment">// The @llvm.global_ctors/dtors global variable is an array of struct. Each</span></div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  <span class="comment">// struct has three fields: {i32 priority, void ()* @ctor/dtor, i8* @data}.</span></div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  <span class="comment">// First get the array here.</span></div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5ae718cba37d8e34d2946530dc098c8e">ConstantArray</a> *globalFuncArray =</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  SVFUtil::dyn_cast<ConstantArray>(global->getInitializer()))</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  {</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  <span class="comment">// Get each struct in the array.</span></div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < globalFuncArray->getNumOperands(); ++i)</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  {</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  <span class="keywordflow">if</span> (</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2b28f48dde0a9a91d251e654ce1f9477">ConstantStruct</a> *globalFuncItem =</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  SVFUtil::dyn_cast<ConstantStruct>(</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  globalFuncArray->getOperand(i)))</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  {</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span> </div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  <span class="comment">// Extract priority and function from the struct</span></div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a> *priority = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a>>(</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  globalFuncItem->getOperand(0));</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *func = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>>(</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  globalFuncItem->getOperand(1));</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span> </div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  <span class="keywordflow">if</span> (priority && func)</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  {</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  queue.push(LLVMGlobalFunction(priority</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  ->getZExtValue(),</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  func));</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  }</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  }</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  }</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  }</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span> </div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  <span class="comment">// Generate a sorted vector of functions from the priority queue.</span></div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  <span class="keywordflow">while</span> (!queue.empty())</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  {</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  result.push_back(queue.top().func);</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  queue.pop();</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  }</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  <span class="keywordflow">return</span> result;</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span> }</div><div class="ttc" id="namespaceSVF_html_a5ae718cba37d8e34d2946530dc098c8e"><div class="ttname"><a href="namespaceSVF.html#a5ae718cba37d8e34d2946530dc098c8e">SVF::ConstantArray</a></div><div class="ttdeci">llvm::ConstantArray ConstantArray</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00068">BasicTypes.h:68</a></div></div>
|
|
709
|
+
<div class="fragment"><div class="line"><a name="l00331"></a><span class="lineno"> 331</span> {</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <span class="comment">// This function is used to extract constructor and destructor functions</span></div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  <span class="comment">// sorted by their priority from @llvm.global_ctors or @llvm.global_dtors.</span></div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <span class="comment">// For example, given following @llvm.global_ctors, the returning sorted</span></div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  <span class="comment">// function list should be [ctor3, ctor1, ctor2].</span></div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <span class="comment">// ------------------------------------------------------------------</span></div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  <span class="comment">// ; Each struct in the array is {priority, function, associated data}</span></div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  <span class="comment">//</span></div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  <span class="comment">// @llvm.global_ctors = appending global [2 x { i32, void ()*, i8* }]</span></div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  <span class="comment">// [{ i32, void ()*, i8* } { i32 1234, void ()* @ctor1.cpp, i8* null },</span></div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  <span class="comment">// { i32, void ()*, i8* } { i32 2345, void ()* @ctor2.cpp, i8* null },</span></div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  <span class="comment">// { i32, void ()*, i8* } { i32 345, void ()* @ctor3.cpp, i8* null }]</span></div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  <span class="comment">// ------------------------------------------------------------------</span></div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  <span class="comment">// TODO: According to LLVM language reference, if the third field is</span></div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  <span class="comment">// non-null, and points to a global variable or function, the initializer</span></div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  <span class="comment">// function will only run if the associated data from the current module is</span></div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  <span class="comment">// not discarded. However the associated data is currently ignored.</span></div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span> </div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span> </div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  <span class="comment">// This class is used for the priority queue that sorts the functions by</span></div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  <span class="comment">// their priority. Each object of this class stands for an item in the</span></div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  <span class="comment">// function array.</span></div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  <span class="keyword">class </span>LLVMGlobalFunction</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  {</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  <span class="keyword">public</span>:</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> priority;</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *func;</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  LLVMGlobalFunction() {};</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  LLVMGlobalFunction(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> _priority, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *_func)</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  : priority(_priority), func(_func) {};</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  <span class="keywordtype">bool</span> operator>(<span class="keyword">const</span> LLVMGlobalFunction &other)<span class="keyword"> const</span></div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  <span class="keywordflow">if</span> (priority != other.priority)</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  {</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  <span class="keywordflow">return</span> priority > other.priority;</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  }</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  {</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  <span class="keywordflow">return</span> func > other.func;</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  }</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  }</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  };</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span> </div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  std::priority_queue<LLVMGlobalFunction, std::vector<LLVMGlobalFunction>,</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  greater<LLVMGlobalFunction>></div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  queue;</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  std::vector<const Function *> result;</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span> </div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  <span class="comment">// The @llvm.global_ctors/dtors global variable is an array of struct. Each</span></div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  <span class="comment">// struct has three fields: {i32 priority, void ()* @ctor/dtor, i8* @data}.</span></div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  <span class="comment">// First get the array here.</span></div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5ae718cba37d8e34d2946530dc098c8e">ConstantArray</a> *globalFuncArray =</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  SVFUtil::dyn_cast<ConstantArray>(global->getInitializer()))</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  {</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  <span class="comment">// Get each struct in the array.</span></div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < globalFuncArray->getNumOperands(); ++i)</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  {</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  <span class="keywordflow">if</span> (</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2b28f48dde0a9a91d251e654ce1f9477">ConstantStruct</a> *globalFuncItem =</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  SVFUtil::dyn_cast<ConstantStruct>(</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  globalFuncArray->getOperand(i)))</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  {</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span> </div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  <span class="comment">// Extract priority and function from the struct</span></div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a> *priority = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a>>(</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  globalFuncItem->getOperand(0));</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *func = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>>(</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  globalFuncItem->getOperand(1));</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span> </div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  <span class="keywordflow">if</span> (priority && func)</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  {</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  queue.push(LLVMGlobalFunction(priority</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  ->getZExtValue(),</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  func));</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  }</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  }</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  }</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  }</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span> </div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  <span class="comment">// Generate a sorted vector of functions from the priority queue.</span></div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  <span class="keywordflow">while</span> (!queue.empty())</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  {</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  result.push_back(queue.top().func);</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  queue.pop();</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  }</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  <span class="keywordflow">return</span> result;</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span> }</div><div class="ttc" id="namespaceSVF_html_a5ae718cba37d8e34d2946530dc098c8e"><div class="ttname"><a href="namespaceSVF.html#a5ae718cba37d8e34d2946530dc098c8e">SVF::ConstantArray</a></div><div class="ttdeci">llvm::ConstantArray ConstantArray</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00069">BasicTypes.h:69</a></div></div>
|
|
710
710
|
<div class="ttc" id="namespaceSVF_html_adefcb50414ea999d70cea5ccdbcb98d7"><div class="ttname"><a href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">SVF::ConstantInt</a></div><div class="ttdeci">llvm::ConstantInt ConstantInt</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00088">BasicTypes.h:88</a></div></div>
|
|
711
711
|
<div class="ttc" id="namespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00085">SVFBasicTypes.h:85</a></div></div>
|
|
712
712
|
<div class="ttc" id="namespaceSVF_html_a5faee14fa1dd41447bc73ac365fe33c1"><div class="ttname"><a href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">SVF::Function</a></div><div class="ttdeci">llvm::Function Function</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00069">BasicTypes.h:69</a></div></div>
|
|
713
713
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a8182be247907420db00837cef9bcfa70"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type >::type dyn_cast(const Y &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00343">Casting.h:343</a></div></div>
|
|
714
|
-
<div class="ttc" id="namespaceSVF_html_a2b28f48dde0a9a91d251e654ce1f9477"><div class="ttname"><a href="namespaceSVF.html#a2b28f48dde0a9a91d251e654ce1f9477">SVF::ConstantStruct</a></div><div class="ttdeci">llvm::ConstantStruct ConstantStruct</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#
|
|
714
|
+
<div class="ttc" id="namespaceSVF_html_a2b28f48dde0a9a91d251e654ce1f9477"><div class="ttname"><a href="namespaceSVF.html#a2b28f48dde0a9a91d251e654ce1f9477">SVF::ConstantStruct</a></div><div class="ttdeci">llvm::ConstantStruct ConstantStruct</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00058">BasicTypes.h:58</a></div></div>
|
|
715
715
|
</div><!-- fragment -->
|
|
716
716
|
</div>
|
|
717
717
|
</div>
|
|
@@ -916,7 +916,7 @@ Static Private Attributes</h2></td></tr>
|
|
|
916
916
|
<p>Get the corresponding Function based on its name. </p>
|
|
917
917
|
|
|
918
918
|
<p class="definition">Definition at line <a class="el" href="LLVMModule_8h_source.html#l00120">120</a> of file <a class="el" href="LLVMModule_8h_source.html">LLVMModule.h</a>.</p>
|
|
919
|
-
<div class="fragment"><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  {</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *fun = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span> </div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i < <a class="code" href="classSVF_1_1LLVMModuleSet.html#ac59b07cafcbacc950eefea4082425b63">llvmModuleSet</a>-><a class="code" href="classSVF_1_1LLVMModuleSet.html#ae265a7f3cc7367d62013e0f15cf3d233">getModuleNum</a>(); ++i)</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  {</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> *mod = <a class="code" href="classSVF_1_1LLVMModuleSet.html#ac59b07cafcbacc950eefea4082425b63">llvmModuleSet</a>-><a class="code" href="classSVF_1_1LLVMModuleSet.html#a8afb7ab3ee4632e78d546e549110e74c">getModule</a>(i);</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  fun = mod->getFunction(<a class="code" href="cJSON_8h.html#a25d22ecc7e656d2c59332072684e8766">name</a>);</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keywordflow">if</span> (fun)</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  {</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#ac59b07cafcbacc950eefea4082425b63">llvmModuleSet</a>-><a class="code" href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">getSVFFunction</a>(fun);</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  }</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  }</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  }</div><div class="ttc" id="namespaceSVF_html_aa7a770b5dd5cd0e37d06a1088f252906"><div class="ttname"><a href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">SVF::Module</a></div><div class="ttdeci">llvm::Module Module</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#
|
|
919
|
+
<div class="fragment"><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  {</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *fun = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span> </div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i < <a class="code" href="classSVF_1_1LLVMModuleSet.html#ac59b07cafcbacc950eefea4082425b63">llvmModuleSet</a>-><a class="code" href="classSVF_1_1LLVMModuleSet.html#ae265a7f3cc7367d62013e0f15cf3d233">getModuleNum</a>(); ++i)</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  {</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> *mod = <a class="code" href="classSVF_1_1LLVMModuleSet.html#ac59b07cafcbacc950eefea4082425b63">llvmModuleSet</a>-><a class="code" href="classSVF_1_1LLVMModuleSet.html#a8afb7ab3ee4632e78d546e549110e74c">getModule</a>(i);</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  fun = mod->getFunction(<a class="code" href="cJSON_8h.html#a25d22ecc7e656d2c59332072684e8766">name</a>);</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keywordflow">if</span> (fun)</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  {</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#ac59b07cafcbacc950eefea4082425b63">llvmModuleSet</a>-><a class="code" href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">getSVFFunction</a>(fun);</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  }</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  }</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  }</div><div class="ttc" id="namespaceSVF_html_aa7a770b5dd5cd0e37d06a1088f252906"><div class="ttname"><a href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">SVF::Module</a></div><div class="ttdeci">llvm::Module Module</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00046">BasicTypes.h:46</a></div></div>
|
|
920
920
|
<div class="ttc" id="cJSON_8h_html_a25d22ecc7e656d2c59332072684e8766"><div class="ttname"><a href="cJSON_8h.html#a25d22ecc7e656d2c59332072684e8766">name</a></div><div class="ttdeci">const char *const name</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00264">cJSON.h:264</a></div></div>
|
|
921
921
|
<div class="ttc" id="classSVF_1_1LLVMModuleSet_html_ae265a7f3cc7367d62013e0f15cf3d233"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#ae265a7f3cc7367d62013e0f15cf3d233">SVF::LLVMModuleSet::getModuleNum</a></div><div class="ttdeci">u32_t getModuleNum() const</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00095">LLVMModule.h:95</a></div></div>
|
|
922
922
|
<div class="ttc" id="namespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00085">SVFBasicTypes.h:85</a></div></div>
|
|
@@ -1075,7 +1075,7 @@ Static Private Attributes</h2></td></tr>
|
|
|
1075
1075
|
|
|
1076
1076
|
<p class="definition">Definition at line <a class="el" href="LLVMModule_8cpp_source.html#l00295">295</a> of file <a class="el" href="LLVMModule_8cpp_source.html">LLVMModule.cpp</a>.</p>
|
|
1077
1077
|
<div class="fragment"><div class="line"><a name="l00296"></a><span class="lineno"> 296</span> {</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a868fa5069b01b7a7dfbc5fb99cb76385">Options::SVFMain</a>)</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  <a class="code" href="classSVF_1_1LLVMModuleSet.html#a8af6b911b728713f66f7c809d5c0fbf1">addSVFMain</a>();</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span> </div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a>& mod : <a class="code" href="classSVF_1_1LLVMModuleSet.html#acde6292e719c80f93d3d1c344ab442cd">modules</a>)</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  {</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="keywordflow">for</span> (Module::iterator it = mod.begin(), eit = mod.end();</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  it != eit; ++it)</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  {</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *func = &*it;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svfFunc = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>(func);</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  <a class="code" href="classSVF_1_1LLVMModuleSet.html#a43832e93a42ae43d44b0cc160981678f">svfModule</a>-><a class="code" href="classSVF_1_1SVFModule.html#a8a0fe93cc13b799fc28540fb312573c6">addFunctionSet</a>(svfFunc);</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  }</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span> </div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  <span class="keywordflow">for</span> (Module::global_iterator it = mod.global_begin(),</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  eit = mod.global_end(); it != eit; ++it)</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  {</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a> *global = &*it;</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  <a class="code" href="classSVF_1_1LLVMModuleSet.html#a43832e93a42ae43d44b0cc160981678f">svfModule</a>-><a class="code" href="classSVF_1_1SVFModule.html#a9aabe6d24bea26f3b5c7cab5a0fc3053">addGlobalSet</a>(global);</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  }</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span> </div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <span class="keywordflow">for</span> (Module::alias_iterator it = mod.alias_begin(),</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  eit = mod.alias_end(); it != eit; ++it)</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  {</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <a class="code" href="namespaceSVF.html#a0fd33072b099f61eaa642e94ed0c03fc">GlobalAlias</a> *alias = &*it;</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <a class="code" href="classSVF_1_1LLVMModuleSet.html#a43832e93a42ae43d44b0cc160981678f">svfModule</a>-><a class="code" href="classSVF_1_1SVFModule.html#a9b28f106dfedb917c6c757d5d0a6771e">addAliasSet</a>(alias);</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  }</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  }</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span> }</div><div class="ttc" id="classSVF_1_1SVFModule_html_a9b28f106dfedb917c6c757d5d0a6771e"><div class="ttname"><a href="classSVF_1_1SVFModule.html#a9b28f106dfedb917c6c757d5d0a6771e">SVF::SVFModule::addAliasSet</a></div><div class="ttdeci">void addAliasSet(GlobalAlias *alias)</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00124">SVFModule.h:124</a></div></div>
|
|
1078
|
-
<div class="ttc" id="namespaceSVF_html_aa7a770b5dd5cd0e37d06a1088f252906"><div class="ttname"><a href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">SVF::Module</a></div><div class="ttdeci">llvm::Module Module</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#
|
|
1078
|
+
<div class="ttc" id="namespaceSVF_html_aa7a770b5dd5cd0e37d06a1088f252906"><div class="ttname"><a href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">SVF::Module</a></div><div class="ttdeci">llvm::Module Module</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00046">BasicTypes.h:46</a></div></div>
|
|
1079
1079
|
<div class="ttc" id="classSVF_1_1SVFModule_html_a8a0fe93cc13b799fc28540fb312573c6"><div class="ttname"><a href="classSVF_1_1SVFModule.html#a8a0fe93cc13b799fc28540fb312573c6">SVF::SVFModule::addFunctionSet</a></div><div class="ttdeci">void addFunctionSet(SVFFunction *svfFunc)</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00114">SVFModule.h:114</a></div></div>
|
|
1080
1080
|
<div class="ttc" id="namespaceSVF_html_a09f5fa3bc44bf53612a085e3a611cc4e"><div class="ttname"><a href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">SVF::GlobalVariable</a></div><div class="ttdeci">llvm::GlobalVariable GlobalVariable</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00075">BasicTypes.h:75</a></div></div>
|
|
1081
1081
|
<div class="ttc" id="classSVF_1_1SVFFunction_html"><div class="ttname"><a href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a></div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00114">BasicTypes.h:114</a></div></div>
|
|
@@ -1115,7 +1115,7 @@ Static Private Attributes</h2></td></tr>
|
|
|
1115
1115
|
|
|
1116
1116
|
<p class="definition">Definition at line <a class="el" href="LLVMModule_8cpp_source.html#l00246">246</a> of file <a class="el" href="LLVMModule_8cpp_source.html">LLVMModule.cpp</a>.</p>
|
|
1117
1117
|
<div class="fragment"><div class="line"><a name="l00247"></a><span class="lineno"> 247</span> {</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span> </div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  <span class="comment">// We read SVFIR from LLVM IR</span></div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Options.html#aa5c4bc8e55a056adcd7a6f8946ad5f38">Options::Graphtxt</a>.getValue().<a class="code" href="classSVF_1_1LLVMModuleSet.html#ae19e38054c55d5822dfc83a12f12aa60">empty</a>())</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  {</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="keywordflow">if</span>(moduleNameVec.empty())</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  {</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <span class="stringliteral">"no LLVM bc file is found!\n"</span>;</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  exit(0);</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  }</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  <span class="comment">//assert(!moduleNameVec.empty() && "no LLVM bc file is found!");</span></div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  }</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <span class="comment">// We read SVFIR from a user-defined txt instead of parsing SVFIR from LLVM IR</span></div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <a class="code" href="classSVF_1_1SVFModule.html#ac630e9f18a239ac6b3b88d05e64140c5">SVFModule::setPagFromTXT</a>(<a class="code" href="classSVF_1_1Options.html#aa5c4bc8e55a056adcd7a6f8946ad5f38">Options::Graphtxt</a>.getValue());</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span> </div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <span class="comment">//</span></div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <span class="comment">// To avoid the following type bugs (t1 != t3) when parsing multiple modules,</span></div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <span class="comment">// We should use only one LLVMContext object for multiple modules in the same thread.</span></div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <span class="comment">// No such problem if only one module is processed by SVF.</span></div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <span class="comment">// ------------------------------------------------------------------</span></div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="comment">// LLVMContext ctxa,ctxb;</span></div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  <span class="comment">// IntegerType * t1 = IntegerType::get(ctxa,32);</span></div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <span class="comment">// IntegerType * t2 = IntegerType::get(ctxa,32);</span></div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  <span class="comment">// assert(t1 == t2);</span></div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="comment">// IntegerType * t3 = IntegerType::get(ctxb,32);</span></div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <span class="comment">// IntegerType * t4 = IntegerType::get(ctxb,32);</span></div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="comment">// assert(t3 == t4);</span></div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="comment">// assert(t1 != t3);</span></div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="comment">// ------------------------------------------------------------------</span></div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  <span class="comment">//</span></div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <a class="code" href="classSVF_1_1LLVMModuleSet.html#ad06a92bf8bc556de742e0ffdf79ffafe">cxts</a> = std::make_unique<LLVMContext>();</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span> </div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a>& moduleName : moduleNameVec)</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  {</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <a class="code" href="namespaceSVF.html#a86863d104a3930b3a806935d92ddbf30">SMDiagnostic</a> Err;</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  std::unique_ptr<Module> mod = parseIRFile(moduleName, Err, *<a class="code" href="classSVF_1_1LLVMModuleSet.html#ad06a92bf8bc556de742e0ffdf79ffafe">cxts</a>);</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  <span class="keywordflow">if</span> (mod == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  {</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">SVFUtil::errs</a>() << <span class="stringliteral">"load module: "</span> << moduleName << <span class="stringliteral">"failed!!\n\n"</span>;</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  Err.print(<span class="stringliteral">"SVFModuleLoader"</span>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">llvm::errs</a>());</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  abort();</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  }</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <a class="code" href="classSVF_1_1LLVMModuleSet.html#acde6292e719c80f93d3d1c344ab442cd">modules</a>.emplace_back(*mod);</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  <a class="code" href="classSVF_1_1LLVMModuleSet.html#ae365189769640adb919a23c36978e5e2">owned_modules</a>.emplace_back(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(mod));</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  }</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span> }</div><div class="ttc" id="classSVF_1_1Options_html_aa5c4bc8e55a056adcd7a6f8946ad5f38"><div class="ttname"><a href="classSVF_1_1Options.html#aa5c4bc8e55a056adcd7a6f8946ad5f38">SVF::Options::Graphtxt</a></div><div class="ttdeci">static const llvm::cl::opt< std::string > Graphtxt</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00211">Options.h:211</a></div></div>
|
|
1118
|
-
<div class="ttc" id="namespaceSVF_html_a86863d104a3930b3a806935d92ddbf30"><div class="ttname"><a href="namespaceSVF.html#a86863d104a3930b3a806935d92ddbf30">SVF::SMDiagnostic</a></div><div class="ttdeci">llvm::SMDiagnostic SMDiagnostic</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#
|
|
1118
|
+
<div class="ttc" id="namespaceSVF_html_a86863d104a3930b3a806935d92ddbf30"><div class="ttname"><a href="namespaceSVF.html#a86863d104a3930b3a806935d92ddbf30">SVF::SMDiagnostic</a></div><div class="ttdeci">llvm::SMDiagnostic SMDiagnostic</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00048">BasicTypes.h:48</a></div></div>
|
|
1119
1119
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a72502f7f536418621485e90ab98c2016"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">SVF::SVFUtil::move</a></div><div class="ttdeci">constexpr std::remove_reference< T >::type && move(T &&t) noexcept</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00717">SVFUtil.h:717</a></div></div>
|
|
1120
1120
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_ab65033f068bfbeb0a1c52dcec3beb6bc"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">SVF::SVFUtil::errs</a></div><div class="ttdeci">std::ostream & errs()</div><div class="ttdoc">Overwrite llvm::errs() </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00055">SVFUtil.h:55</a></div></div>
|
|
1121
1121
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_aed0b0b9f035057552a6a82154fd88e61"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVF::SVFUtil::outs</a></div><div class="ttdeci">std::ostream & outs()</div><div class="ttdoc">Overwrite llvm::outs() </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00049">SVFUtil.h:49</a></div></div>
|
|
@@ -1157,7 +1157,7 @@ Static Private Attributes</h2></td></tr>
|
|
|
1157
1157
|
<p><a class="el" href="classSVF_1_1MergeFunctionRets.html">MergeFunctionRets</a> Pass </p>
|
|
1158
1158
|
|
|
1159
1159
|
<p class="definition">Definition at line <a class="el" href="LLVMModule_8cpp_source.html#l00219">219</a> of file <a class="el" href="LLVMModule_8cpp_source.html">LLVMModule.cpp</a>.</p>
|
|
1160
|
-
<div class="fragment"><div class="line"><a name="l00220"></a><span class="lineno"> 220</span> {</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  std::unique_ptr<BreakConstantGEPs> p1 = std::make_unique<BreakConstantGEPs>();</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i < <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#ae265a7f3cc7367d62013e0f15cf3d233">getModuleNum</a>(); ++i)</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  {</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> *module = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#a8afb7ab3ee4632e78d546e549110e74c">getModule</a>(i);</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  p1->runOnModule(*module);</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  }</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span> </div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  std::unique_ptr<UnifyFunctionExitNodes> p2 =</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  std::make_unique<UnifyFunctionExitNodes>();</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i < <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#ae265a7f3cc7367d62013e0f15cf3d233">getModuleNum</a>(); ++i)</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  {</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> *module = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#a8afb7ab3ee4632e78d546e549110e74c">getModule</a>(i);</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> F = module->begin(), E = module->end(); F != E; ++F)</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  {</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> &fun = *F;</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="keywordflow">if</span> (fun.isDeclaration())</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  p2->runOnFunction(fun);</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  }</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  }</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span> }</div><div class="ttc" id="namespaceSVF_html_aa7a770b5dd5cd0e37d06a1088f252906"><div class="ttname"><a href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">SVF::Module</a></div><div class="ttdeci">llvm::Module Module</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#
|
|
1160
|
+
<div class="fragment"><div class="line"><a name="l00220"></a><span class="lineno"> 220</span> {</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  std::unique_ptr<BreakConstantGEPs> p1 = std::make_unique<BreakConstantGEPs>();</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i < <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#ae265a7f3cc7367d62013e0f15cf3d233">getModuleNum</a>(); ++i)</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  {</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> *module = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#a8afb7ab3ee4632e78d546e549110e74c">getModule</a>(i);</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  p1->runOnModule(*module);</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  }</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span> </div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  std::unique_ptr<UnifyFunctionExitNodes> p2 =</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  std::make_unique<UnifyFunctionExitNodes>();</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i < <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#ae265a7f3cc7367d62013e0f15cf3d233">getModuleNum</a>(); ++i)</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  {</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> *module = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#a8afb7ab3ee4632e78d546e549110e74c">getModule</a>(i);</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> F = module->begin(), E = module->end(); F != E; ++F)</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  {</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> &fun = *F;</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="keywordflow">if</span> (fun.isDeclaration())</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  p2->runOnFunction(fun);</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  }</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  }</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span> }</div><div class="ttc" id="namespaceSVF_html_aa7a770b5dd5cd0e37d06a1088f252906"><div class="ttname"><a href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">SVF::Module</a></div><div class="ttdeci">llvm::Module Module</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00046">BasicTypes.h:46</a></div></div>
|
|
1161
1161
|
<div class="ttc" id="classSVF_1_1LLVMModuleSet_html_ae265a7f3cc7367d62013e0f15cf3d233"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#ae265a7f3cc7367d62013e0f15cf3d233">SVF::LLVMModuleSet::getModuleNum</a></div><div class="ttdeci">u32_t getModuleNum() const</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00095">LLVMModule.h:95</a></div></div>
|
|
1162
1162
|
<div class="ttc" id="namespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00085">SVFBasicTypes.h:85</a></div></div>
|
|
1163
1163
|
<div class="ttc" id="namespaceSVF_html_a5faee14fa1dd41447bc73ac365fe33c1"><div class="ttname"><a href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">SVF::Function</a></div><div class="ttdeci">llvm::Function Function</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00069">BasicTypes.h:69</a></div></div>
|