svf-tools 1.0.813 → 1.0.815
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/AccessPath_8cpp_source.html +124 -121
- package/SVF-doxygen/html/AccessPath_8h_source.html +97 -88
- package/SVF-doxygen/html/Andersen_8cpp_source.html +1 -1
- package/SVF-doxygen/html/ConsGEdge_8h_source.html +2 -2
- package/SVF-doxygen/html/ContextDDA_8cpp_source.html +184 -183
- package/SVF-doxygen/html/ContextDDA_8h_source.html +5 -5
- package/SVF-doxygen/html/FlowDDA_8cpp_source.html +2 -2
- package/SVF-doxygen/html/FlowSensitive_8cpp_source.html +2 -2
- package/SVF-doxygen/html/SVFIR2ConsExeState_8cpp_source.html +191 -190
- package/SVF-doxygen/html/SVFIR2ConsExeState_8h_source.html +4 -4
- package/SVF-doxygen/html/SVFIR2ItvExeState_8cpp_source.html +695 -688
- package/SVF-doxygen/html/SVFIR2ItvExeState_8h_source.html +15 -15
- package/SVF-doxygen/html/SVFIRBuilder_8cpp_source.html +883 -881
- package/SVF-doxygen/html/SVFIRBuilder_8h_source.html +32 -32
- package/SVF-doxygen/html/SVFIRExtAPI_8cpp_source.html +120 -118
- package/SVF-doxygen/html/SVFIR_8cpp_source.html +2 -2
- package/SVF-doxygen/html/SVFStatements_8h_source.html +5 -5
- package/SVF-doxygen/html/SVFVariables_8h_source.html +2 -2
- package/SVF-doxygen/html/classSVF_1_1AccessPath-members.html +7 -5
- package/SVF-doxygen/html/classSVF_1_1AccessPath.html +237 -162
- package/SVF-doxygen/html/classSVF_1_1Andersen.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1ContextDDA.html +176 -175
- package/SVF-doxygen/html/classSVF_1_1FlowDDA.html +2 -2
- package/SVF-doxygen/html/classSVF_1_1FlowSensitive.html +2 -2
- package/SVF-doxygen/html/classSVF_1_1GepStmt-members.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1GepStmt.html +9 -9
- package/SVF-doxygen/html/classSVF_1_1GepValVar.html +2 -2
- package/SVF-doxygen/html/classSVF_1_1NormalGepCGEdge.html +2 -2
- package/SVF-doxygen/html/classSVF_1_1SVFIR.html +2 -2
- package/SVF-doxygen/html/classSVF_1_1SVFIR2ConsExeState.html +186 -185
- package/SVF-doxygen/html/classSVF_1_1SVFIR2ItvExeState.html +667 -660
- package/SVF-doxygen/html/classSVF_1_1SVFIRBuilder.html +942 -938
- package/SVF-doxygen/html/functions_a.html +1 -1
- package/SVF-doxygen/html/functions_func.html +1 -1
- package/SVF-doxygen/html/functions_func_g.html +22 -17
- package/SVF-doxygen/html/functions_func_p.html +1 -1
- package/SVF-doxygen/html/functions_g.html +20 -12
- package/SVF-doxygen/html/functions_i.html +1 -1
- package/SVF-doxygen/html/functions_o.html +7 -7
- package/SVF-doxygen/html/functions_p.html +11 -11
- package/SVF-doxygen/html/functions_r.html +2 -2
- package/SVF-doxygen/html/functions_s.html +17 -17
- package/SVF-doxygen/html/functions_v.html +7 -9
- package/SVF-doxygen/html/functions_vars_g.html +3 -0
- package/SVF-doxygen/html/functions_w.html +1 -1
- package/SVF-doxygen/html/search/all_1.js +1 -1
- package/SVF-doxygen/html/search/all_10.js +324 -324
- package/SVF-doxygen/html/search/all_11.js +222 -222
- package/SVF-doxygen/html/search/all_12.js +544 -544
- package/SVF-doxygen/html/search/all_13.js +191 -191
- package/SVF-doxygen/html/search/all_14.js +67 -67
- package/SVF-doxygen/html/search/all_15.js +167 -167
- package/SVF-doxygen/html/search/all_16.js +63 -63
- package/SVF-doxygen/html/search/all_17.js +1 -1
- package/SVF-doxygen/html/search/all_18.js +1 -1
- package/SVF-doxygen/html/search/all_19.js +11 -11
- package/SVF-doxygen/html/search/all_1a.js +172 -172
- package/SVF-doxygen/html/search/all_7.js +891 -888
- package/SVF-doxygen/html/search/all_8.js +197 -197
- package/SVF-doxygen/html/search/all_9.js +607 -607
- package/SVF-doxygen/html/search/all_a.js +46 -46
- package/SVF-doxygen/html/search/all_b.js +26 -26
- package/SVF-doxygen/html/search/all_c.js +116 -116
- package/SVF-doxygen/html/search/all_d.js +196 -196
- package/SVF-doxygen/html/search/all_e.js +207 -207
- package/SVF-doxygen/html/search/all_f.js +115 -115
- package/SVF-doxygen/html/search/classes_0.js +26 -26
- package/SVF-doxygen/html/search/classes_1.js +9 -9
- package/SVF-doxygen/html/search/classes_10.js +73 -73
- package/SVF-doxygen/html/search/classes_11.js +15 -15
- package/SVF-doxygen/html/search/classes_12.js +2 -2
- package/SVF-doxygen/html/search/classes_13.js +10 -10
- package/SVF-doxygen/html/search/classes_14.js +14 -14
- package/SVF-doxygen/html/search/classes_15.js +1 -1
- package/SVF-doxygen/html/search/classes_2.js +80 -80
- package/SVF-doxygen/html/search/classes_3.js +37 -37
- package/SVF-doxygen/html/search/classes_4.js +9 -9
- package/SVF-doxygen/html/search/classes_5.js +28 -28
- package/SVF-doxygen/html/search/classes_6.js +104 -104
- package/SVF-doxygen/html/search/classes_7.js +33 -33
- package/SVF-doxygen/html/search/classes_8.js +56 -56
- package/SVF-doxygen/html/search/classes_9.js +1 -1
- package/SVF-doxygen/html/search/classes_a.js +12 -12
- package/SVF-doxygen/html/search/classes_b.js +29 -29
- package/SVF-doxygen/html/search/classes_c.js +6 -6
- package/SVF-doxygen/html/search/classes_d.js +18 -18
- package/SVF-doxygen/html/search/classes_e.js +36 -36
- package/SVF-doxygen/html/search/classes_f.js +25 -25
- package/SVF-doxygen/html/search/defines_0.js +3 -3
- package/SVF-doxygen/html/search/defines_1.js +2 -2
- package/SVF-doxygen/html/search/defines_2.js +30 -30
- package/SVF-doxygen/html/search/defines_3.js +21 -21
- package/SVF-doxygen/html/search/defines_4.js +2 -2
- package/SVF-doxygen/html/search/defines_5.js +4 -4
- package/SVF-doxygen/html/search/defines_6.js +2 -2
- package/SVF-doxygen/html/search/defines_7.js +5 -5
- package/SVF-doxygen/html/search/defines_8.js +11 -11
- package/SVF-doxygen/html/search/defines_9.js +9 -9
- package/SVF-doxygen/html/search/defines_a.js +2 -2
- package/SVF-doxygen/html/search/defines_b.js +1 -1
- package/SVF-doxygen/html/search/defines_c.js +3 -3
- package/SVF-doxygen/html/search/defines_d.js +2 -2
- package/SVF-doxygen/html/search/defines_e.js +7 -7
- package/SVF-doxygen/html/search/defines_f.js +3 -3
- package/SVF-doxygen/html/search/enums_0.js +3 -3
- package/SVF-doxygen/html/search/enums_1.js +2 -2
- package/SVF-doxygen/html/search/enums_10.js +1 -1
- package/SVF-doxygen/html/search/enums_11.js +1 -1
- package/SVF-doxygen/html/search/enums_2.js +8 -8
- package/SVF-doxygen/html/search/enums_3.js +1 -1
- package/SVF-doxygen/html/search/enums_4.js +3 -3
- package/SVF-doxygen/html/search/enums_5.js +1 -1
- package/SVF-doxygen/html/search/enums_6.js +2 -2
- package/SVF-doxygen/html/search/enums_7.js +2 -2
- package/SVF-doxygen/html/search/enums_8.js +4 -4
- package/SVF-doxygen/html/search/enums_9.js +1 -1
- package/SVF-doxygen/html/search/enums_a.js +1 -1
- package/SVF-doxygen/html/search/enums_b.js +7 -7
- package/SVF-doxygen/html/search/enums_c.js +1 -1
- package/SVF-doxygen/html/search/enums_d.js +4 -4
- package/SVF-doxygen/html/search/enums_e.js +2 -2
- package/SVF-doxygen/html/search/enums_f.js +4 -4
- package/SVF-doxygen/html/search/enumvalues_0.js +14 -14
- package/SVF-doxygen/html/search/enumvalues_1.js +14 -14
- package/SVF-doxygen/html/search/enumvalues_10.js +35 -35
- package/SVF-doxygen/html/search/enumvalues_11.js +3 -3
- package/SVF-doxygen/html/search/enumvalues_12.js +10 -10
- package/SVF-doxygen/html/search/enumvalues_13.js +1 -1
- package/SVF-doxygen/html/search/enumvalues_14.js +1 -1
- package/SVF-doxygen/html/search/enumvalues_15.js +3 -3
- package/SVF-doxygen/html/search/enumvalues_2.js +36 -36
- package/SVF-doxygen/html/search/enumvalues_3.js +13 -13
- package/SVF-doxygen/html/search/enumvalues_4.js +2 -2
- package/SVF-doxygen/html/search/enumvalues_5.js +47 -47
- package/SVF-doxygen/html/search/enumvalues_6.js +6 -6
- package/SVF-doxygen/html/search/enumvalues_7.js +9 -9
- package/SVF-doxygen/html/search/enumvalues_8.js +23 -23
- package/SVF-doxygen/html/search/enumvalues_9.js +6 -6
- package/SVF-doxygen/html/search/enumvalues_a.js +15 -15
- package/SVF-doxygen/html/search/enumvalues_b.js +11 -11
- package/SVF-doxygen/html/search/enumvalues_c.js +5 -5
- package/SVF-doxygen/html/search/enumvalues_d.js +18 -18
- package/SVF-doxygen/html/search/enumvalues_e.js +9 -9
- package/SVF-doxygen/html/search/enumvalues_f.js +45 -45
- package/SVF-doxygen/html/search/files_0.js +13 -13
- package/SVF-doxygen/html/search/files_1.js +7 -7
- package/SVF-doxygen/html/search/files_10.js +8 -8
- package/SVF-doxygen/html/search/files_11.js +8 -8
- package/SVF-doxygen/html/search/files_12.js +2 -2
- package/SVF-doxygen/html/search/files_2.js +55 -55
- package/SVF-doxygen/html/search/files_3.js +14 -14
- package/SVF-doxygen/html/search/files_4.js +5 -5
- package/SVF-doxygen/html/search/files_5.js +13 -13
- package/SVF-doxygen/html/search/files_6.js +9 -9
- package/SVF-doxygen/html/search/files_7.js +14 -14
- package/SVF-doxygen/html/search/files_8.js +13 -13
- package/SVF-doxygen/html/search/files_9.js +18 -18
- package/SVF-doxygen/html/search/files_a.js +3 -3
- package/SVF-doxygen/html/search/files_b.js +2 -2
- package/SVF-doxygen/html/search/files_c.js +20 -20
- package/SVF-doxygen/html/search/files_d.js +4 -4
- package/SVF-doxygen/html/search/files_e.js +62 -62
- package/SVF-doxygen/html/search/files_f.js +8 -8
- package/SVF-doxygen/html/search/functions_0.js +12 -12
- package/SVF-doxygen/html/search/functions_1.js +360 -360
- package/SVF-doxygen/html/search/functions_10.js +140 -140
- package/SVF-doxygen/html/search/functions_11.js +138 -138
- package/SVF-doxygen/html/search/functions_12.js +279 -279
- package/SVF-doxygen/html/search/functions_13.js +59 -59
- package/SVF-doxygen/html/search/functions_14.js +39 -39
- package/SVF-doxygen/html/search/functions_15.js +71 -71
- package/SVF-doxygen/html/search/functions_16.js +32 -32
- package/SVF-doxygen/html/search/functions_17.js +3 -3
- package/SVF-doxygen/html/search/functions_18.js +172 -172
- package/SVF-doxygen/html/search/functions_2.js +87 -87
- package/SVF-doxygen/html/search/functions_3.js +257 -257
- package/SVF-doxygen/html/search/functions_4.js +75 -75
- package/SVF-doxygen/html/search/functions_5.js +53 -53
- package/SVF-doxygen/html/search/functions_6.js +59 -59
- package/SVF-doxygen/html/search/functions_7.js +854 -852
- package/SVF-doxygen/html/search/functions_8.js +149 -149
- package/SVF-doxygen/html/search/functions_9.js +423 -423
- package/SVF-doxygen/html/search/functions_a.js +30 -30
- package/SVF-doxygen/html/search/functions_b.js +2 -2
- package/SVF-doxygen/html/search/functions_c.js +26 -26
- package/SVF-doxygen/html/search/functions_d.js +77 -77
- package/SVF-doxygen/html/search/functions_e.js +35 -35
- package/SVF-doxygen/html/search/functions_f.js +56 -56
- package/SVF-doxygen/html/search/namespaces_0.js +1 -1
- package/SVF-doxygen/html/search/namespaces_1.js +7 -7
- package/SVF-doxygen/html/search/related_0.js +2 -2
- package/SVF-doxygen/html/search/related_1.js +2 -2
- package/SVF-doxygen/html/search/related_2.js +2 -2
- package/SVF-doxygen/html/search/related_3.js +2 -2
- package/SVF-doxygen/html/search/related_4.js +2 -2
- package/SVF-doxygen/html/search/related_5.js +1 -1
- package/SVF-doxygen/html/search/related_6.js +2 -2
- package/SVF-doxygen/html/search/related_7.js +4 -4
- package/SVF-doxygen/html/search/related_8.js +2 -2
- package/SVF-doxygen/html/search/related_9.js +4 -4
- package/SVF-doxygen/html/search/related_a.js +19 -19
- package/SVF-doxygen/html/search/related_b.js +4 -4
- package/SVF-doxygen/html/search/related_c.js +1 -1
- package/SVF-doxygen/html/search/related_d.js +12 -12
- package/SVF-doxygen/html/search/related_e.js +2 -2
- package/SVF-doxygen/html/search/related_f.js +2 -2
- package/SVF-doxygen/html/search/typedefs_0.js +19 -19
- package/SVF-doxygen/html/search/typedefs_1.js +26 -26
- package/SVF-doxygen/html/search/typedefs_10.js +61 -61
- package/SVF-doxygen/html/search/typedefs_11.js +13 -13
- package/SVF-doxygen/html/search/typedefs_12.js +11 -11
- package/SVF-doxygen/html/search/typedefs_13.js +33 -33
- package/SVF-doxygen/html/search/typedefs_14.js +8 -8
- package/SVF-doxygen/html/search/typedefs_2.js +129 -129
- package/SVF-doxygen/html/search/typedefs_3.js +39 -39
- package/SVF-doxygen/html/search/typedefs_4.js +17 -17
- package/SVF-doxygen/html/search/typedefs_5.js +41 -41
- package/SVF-doxygen/html/search/typedefs_6.js +55 -55
- package/SVF-doxygen/html/search/typedefs_7.js +44 -44
- package/SVF-doxygen/html/search/typedefs_8.js +1 -1
- package/SVF-doxygen/html/search/typedefs_9.js +6 -6
- package/SVF-doxygen/html/search/typedefs_a.js +29 -29
- package/SVF-doxygen/html/search/typedefs_b.js +29 -29
- package/SVF-doxygen/html/search/typedefs_c.js +41 -41
- package/SVF-doxygen/html/search/typedefs_d.js +14 -14
- package/SVF-doxygen/html/search/typedefs_e.js +52 -52
- package/SVF-doxygen/html/search/typedefs_f.js +14 -14
- package/SVF-doxygen/html/search/variables_0.js +151 -151
- package/SVF-doxygen/html/search/variables_1.js +75 -75
- package/SVF-doxygen/html/search/variables_10.js +97 -97
- package/SVF-doxygen/html/search/variables_11.js +44 -44
- package/SVF-doxygen/html/search/variables_12.js +92 -92
- package/SVF-doxygen/html/search/variables_13.js +75 -75
- package/SVF-doxygen/html/search/variables_14.js +14 -14
- package/SVF-doxygen/html/search/variables_15.js +48 -48
- package/SVF-doxygen/html/search/variables_16.js +9 -9
- package/SVF-doxygen/html/search/variables_17.js +1 -1
- package/SVF-doxygen/html/search/variables_18.js +2 -2
- package/SVF-doxygen/html/search/variables_2.js +38 -38
- package/SVF-doxygen/html/search/variables_3.js +142 -142
- package/SVF-doxygen/html/search/variables_4.js +55 -55
- package/SVF-doxygen/html/search/variables_5.js +37 -37
- package/SVF-doxygen/html/search/variables_6.js +66 -66
- package/SVF-doxygen/html/search/variables_7.js +34 -33
- package/SVF-doxygen/html/search/variables_8.js +7 -7
- package/SVF-doxygen/html/search/variables_9.js +78 -78
- package/SVF-doxygen/html/search/variables_a.js +4 -4
- package/SVF-doxygen/html/search/variables_b.js +10 -10
- package/SVF-doxygen/html/search/variables_c.js +45 -45
- package/SVF-doxygen/html/search/variables_d.js +56 -56
- package/SVF-doxygen/html/search/variables_e.js +123 -123
- package/SVF-doxygen/html/search/variables_f.js +29 -29
- package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1AccessPath_01_4.html +10 -10
- package/SVF-doxygen/html/svf-ex_8cpp.html +11 -11
- package/SVF-doxygen/html/svf-ex_8cpp_source.html +11 -11
- package/package.json +1 -1
- package/svf/include/Graphs/ConsGEdge.h +1 -1
- package/svf/include/MemoryModel/AccessPath.h +14 -5
- package/svf/include/SVFIR/SVFStatements.h +2 -2
- package/svf/include/SVFIR/SVFVariables.h +1 -1
- package/svf/lib/AbstractExecution/SVFIR2ConsExeState.cpp +2 -1
- package/svf/lib/AbstractExecution/SVFIR2ItvExeState.cpp +4 -0
- package/svf/lib/DDA/ContextDDA.cpp +2 -1
- package/svf/lib/DDA/FlowDDA.cpp +1 -1
- package/svf/lib/MemoryModel/AccessPath.cpp +7 -5
- package/svf/lib/SVFIR/SVFIR.cpp +1 -1
- package/svf/lib/WPA/Andersen.cpp +1 -1
- package/svf/lib/WPA/FlowSensitive.cpp +1 -1
- package/svf-llvm/lib/SVFIRBuilder.cpp +6 -4
- package/svf-llvm/lib/SVFIRExtAPI.cpp +7 -5
|
@@ -758,9 +758,9 @@ Private Attributes</h2></td></tr>
|
|
|
758
758
|
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  {</div>
|
|
759
759
|
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <a class="code" href="classSVF_1_1LLVMModuleSet.html">LLVMModuleSet</a>* llvmmodule = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>();</div>
|
|
760
760
|
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* dElementType = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a9f7c24325d897b598d6b989fdc4aae1e">getSymbolInfo</a>()-><a class="code" href="classSVF_1_1SymbolTableInfo.html#a806ae865d29c4b05b69c499284758c6f">getFlatternedElemType</a>(llvmmodule-><a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(dtype),</div>
|
|
761
|
-
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  fields[<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>].
|
|
761
|
+
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  fields[<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>].getConstantStructFldIdx());</div>
|
|
762
762
|
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* sElementType = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a9f7c24325d897b598d6b989fdc4aae1e">getSymbolInfo</a>()-><a class="code" href="classSVF_1_1SymbolTableInfo.html#a806ae865d29c4b05b69c499284758c6f">getFlatternedElemType</a>(llvmmodule-><a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(stype),</div>
|
|
763
|
-
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  fields[<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>].
|
|
763
|
+
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  fields[<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>].getConstantStructFldIdx());</div>
|
|
764
764
|
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dField = <a class="code" href="classSVF_1_1SVFIRBuilder.html#ae4516ec05eabece1bc8e0cad1ec8cf1c">getGepValVar</a>(D,fields[<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>],dElementType);</div>
|
|
765
765
|
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> sField = <a class="code" href="classSVF_1_1SVFIRBuilder.html#ae4516ec05eabece1bc8e0cad1ec8cf1c">getGepValVar</a>(S,fields[<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>],sElementType);</div>
|
|
766
766
|
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dummy = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#aa7e98cd2fd599aedefa4c2e6fb659da0">addDummyValNode</a>();</div>
|
|
@@ -1740,7 +1740,7 @@ Private Attributes</h2></td></tr>
|
|
|
1740
1740
|
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="keywordflow">continue</span>;</div>
|
|
1741
1741
|
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  <a class="code" href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">APOffset</a> idx = op->getSExtValue();</div>
|
|
1742
1742
|
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a9f7c24325d897b598d6b989fdc4aae1e">getSymbolInfo</a>()-><a class="code" href="classSVF_1_1SymbolTableInfo.html#a24df52313f8093bb651ae9da972cd663">getFlattenedElemIdx</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getSVFType(arrTy), idx);</div>
|
|
1743
|
-
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  ap.<a class="code" href="classSVF_1_1AccessPath.html#ab95df74c97fba13206df48e00131e15f">setFldIdx</a>(ap.<a class="code" href="classSVF_1_1AccessPath.html#
|
|
1743
|
+
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  ap.<a class="code" href="classSVF_1_1AccessPath.html#ab95df74c97fba13206df48e00131e15f">setFldIdx</a>(ap.<a class="code" href="classSVF_1_1AccessPath.html#a5427d08c9eb9d86e66c2bff6aeba6bac">getConstantStructFldIdx</a>() + <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>);</div>
|
|
1744
1744
|
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  }</div>
|
|
1745
1745
|
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a> *ST = SVFUtil::dyn_cast<StructType>(gepTy))</div>
|
|
1746
1746
|
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  {</div>
|
|
@@ -1748,7 +1748,7 @@ Private Attributes</h2></td></tr>
|
|
|
1748
1748
|
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <span class="comment">//The actual index</span></div>
|
|
1749
1749
|
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  <a class="code" href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">APOffset</a> idx = op->getSExtValue();</div>
|
|
1750
1750
|
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a9f7c24325d897b598d6b989fdc4aae1e">getSymbolInfo</a>()-><a class="code" href="classSVF_1_1SymbolTableInfo.html#a24df52313f8093bb651ae9da972cd663">getFlattenedElemIdx</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getSVFType(ST), idx);</div>
|
|
1751
|
-
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  ap.<a class="code" href="classSVF_1_1AccessPath.html#ab95df74c97fba13206df48e00131e15f">setFldIdx</a>(ap.<a class="code" href="classSVF_1_1AccessPath.html#
|
|
1751
|
+
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  ap.<a class="code" href="classSVF_1_1AccessPath.html#ab95df74c97fba13206df48e00131e15f">setFldIdx</a>(ap.<a class="code" href="classSVF_1_1AccessPath.html#a5427d08c9eb9d86e66c2bff6aeba6bac">getConstantStructFldIdx</a>() + <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>);</div>
|
|
1752
1752
|
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  }</div>
|
|
1753
1753
|
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (gepTy->isSingleValueType())</div>
|
|
1754
1754
|
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  {</div>
|
|
@@ -1797,21 +1797,21 @@ Private Attributes</h2></td></tr>
|
|
|
1797
1797
|
<p>Get a base <a class="el" href="classSVF_1_1SVFVar.html">SVFVar</a> given a pointer Return the source node of its connected normal gep edge Otherwise return the node id itself s32_t offset : gep offset </p>
|
|
1798
1798
|
<p>if this node is already a base node</p>
|
|
1799
1799
|
|
|
1800
|
-
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#
|
|
1801
|
-
<div class="fragment"><div class="line"><a name="
|
|
1802
|
-
<div class="line"><a name="
|
|
1803
|
-
<div class="line"><a name="
|
|
1804
|
-
<div class="line"><a name="
|
|
1805
|
-
<div class="line"><a name="
|
|
1806
|
-
<div class="line"><a name="
|
|
1807
|
-
<div class="line"><a name="
|
|
1808
|
-
<div class="line"><a name="
|
|
1809
|
-
<div class="line"><a name="
|
|
1810
|
-
<div class="line"><a name="
|
|
1811
|
-
<div class="line"><a name="
|
|
1812
|
-
<div class="line"><a name="
|
|
1813
|
-
<div class="line"><a name="
|
|
1814
|
-
<div class="line"><a name="
|
|
1800
|
+
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l01326">1326</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
|
|
1801
|
+
<div class="fragment"><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span> {</div>
|
|
1802
|
+
<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>  <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* node = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(nodeId);</div>
|
|
1803
|
+
<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>  <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>& geps = node-><a class="code" href="classSVF_1_1SVFVar.html#a76964ef7d4842a469d7720881499d8a6">getIncomingEdges</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a20d960c19118d1ed319e0dbea94405e8">SVFStmt::Gep</a>);</div>
|
|
1804
|
+
<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>  <span class="keywordflow">if</span>(geps.empty())</div>
|
|
1805
|
+
<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a>(0);</div>
|
|
1806
|
+
<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>  </div>
|
|
1807
|
+
<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>  assert(geps.size()==1 && <span class="stringliteral">"one node can only be connected by at most one gep edge!"</span>);</div>
|
|
1808
|
+
<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>  <a class="code" href="classSVF_1_1GenericNode.html#a2f5471985dfe62bc9ded830a693ab153">SVFVar::iterator</a> it = geps.begin();</div>
|
|
1809
|
+
<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1GepStmt.html">GepStmt</a>* gepEdge = SVFUtil::cast<GepStmt>(*it);</div>
|
|
1810
|
+
<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>  <span class="keywordflow">if</span>(gepEdge-><a class="code" href="classSVF_1_1GepStmt.html#a0ddf180a0f7ba64fc8655687910e3788">isVariantFieldGep</a>())</div>
|
|
1811
|
+
<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a>(0);</div>
|
|
1812
|
+
<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>  <span class="keywordflow">else</span></div>
|
|
1813
|
+
<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>  <span class="keywordflow">return</span> gepEdge-><a class="code" href="classSVF_1_1GepStmt.html#a6c74f234a6b40bc5292bb14874c2e600">getAccessPath</a>();</div>
|
|
1814
|
+
<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span> }</div>
|
|
1815
1815
|
</div><!-- fragment -->
|
|
1816
1816
|
</div>
|
|
1817
1817
|
</div>
|
|
@@ -1920,59 +1920,59 @@ Private Attributes</h2></td></tr>
|
|
|
1920
1920
|
|
|
1921
1921
|
<p>Get the base value of (i8* src and i8* dst) for external argument (e.g. memcpy(i8* dst, i8* src, int size)) </p>
|
|
1922
1922
|
|
|
1923
|
-
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#
|
|
1924
|
-
<div class="fragment"><div class="line"><a name="
|
|
1925
|
-
<div class="line"><a name="
|
|
1926
|
-
<div class="line"><a name="
|
|
1927
|
-
<div class="line"><a name="
|
|
1928
|
-
<div class="line"><a name="
|
|
1929
|
-
<div class="line"><a name="
|
|
1930
|
-
<div class="line"><a name="
|
|
1931
|
-
<div class="line"><a name="
|
|
1932
|
-
<div class="line"><a name="
|
|
1933
|
-
<div class="line"><a name="
|
|
1934
|
-
<div class="line"><a name="
|
|
1935
|
-
<div class="line"><a name="
|
|
1936
|
-
<div class="line"><a name="
|
|
1937
|
-
<div class="line"><a name="
|
|
1938
|
-
<div class="line"><a name="
|
|
1939
|
-
<div class="line"><a name="
|
|
1940
|
-
<div class="line"><a name="
|
|
1941
|
-
<div class="line"><a name="
|
|
1942
|
-
<div class="line"><a name="
|
|
1943
|
-
<div class="line"><a name="
|
|
1944
|
-
<div class="line"><a name="
|
|
1945
|
-
<div class="line"><a name="
|
|
1946
|
-
<div class="line"><a name="
|
|
1947
|
-
<div class="line"><a name="
|
|
1948
|
-
<div class="line"><a name="
|
|
1949
|
-
<div class="line"><a name="
|
|
1950
|
-
<div class="line"><a name="
|
|
1951
|
-
<div class="line"><a name="
|
|
1952
|
-
<div class="line"><a name="
|
|
1953
|
-
<div class="line"><a name="
|
|
1954
|
-
<div class="line"><a name="
|
|
1955
|
-
<div class="line"><a name="
|
|
1956
|
-
<div class="line"><a name="
|
|
1957
|
-
<div class="line"><a name="
|
|
1958
|
-
<div class="line"><a name="
|
|
1959
|
-
<div class="line"><a name="
|
|
1960
|
-
<div class="line"><a name="
|
|
1961
|
-
<div class="line"><a name="
|
|
1962
|
-
<div class="line"><a name="
|
|
1963
|
-
<div class="line"><a name="
|
|
1964
|
-
<div class="line"><a name="
|
|
1965
|
-
<div class="line"><a name="
|
|
1966
|
-
<div class="line"><a name="
|
|
1967
|
-
<div class="line"><a name="
|
|
1968
|
-
<div class="line"><a name="
|
|
1969
|
-
<div class="line"><a name="
|
|
1970
|
-
<div class="line"><a name="
|
|
1971
|
-
<div class="line"><a name="
|
|
1972
|
-
<div class="line"><a name="
|
|
1973
|
-
<div class="line"><a name="
|
|
1974
|
-
<div class="line"><a name="
|
|
1975
|
-
<div class="line"><a name="
|
|
1923
|
+
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l01065">1065</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
|
|
1924
|
+
<div class="fragment"><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> {</div>
|
|
1925
|
+
<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* value = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a38ce45ae5f017c90115ce444b44d478c">stripAllCasts</a>(V);</div>
|
|
1926
|
+
<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>  assert(value && <span class="stringliteral">"null ptr?"</span>);</div>
|
|
1927
|
+
<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">GetElementPtrInst</a>* gep = SVFUtil::dyn_cast<GetElementPtrInst>(value))</div>
|
|
1928
|
+
<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>  {</div>
|
|
1929
|
+
<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>  <a class="code" href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">APOffset</a> totalidx = 0;</div>
|
|
1930
|
+
<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>  <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1generic__bridge__gep__type__iterator.html">bridge_gep_iterator</a> gi = <a class="code" href="namespacellvm.html#acfe99e9d441434240c79f6d76b73fe0a">bridge_gep_begin</a>(gep), ge = <a class="code" href="namespacellvm.html#a7cfc92a12082d69711c97bb3d1b99c48">bridge_gep_end</a>(gep); gi != ge; ++gi)</div>
|
|
1931
|
+
<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>  {</div>
|
|
1932
|
+
<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a>* op = SVFUtil::dyn_cast<ConstantInt>(gi.getOperand()))</div>
|
|
1933
|
+
<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>  totalidx += op->getSExtValue();</div>
|
|
1934
|
+
<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>  }</div>
|
|
1935
|
+
<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>  <span class="keywordflow">if</span>(totalidx == 0 && !SVFUtil::isa<StructType>(value->getType()))</div>
|
|
1936
|
+
<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>  value = gep->getPointerOperand();</div>
|
|
1937
|
+
<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>  }</div>
|
|
1938
|
+
<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>  </div>
|
|
1939
|
+
<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>  <span class="comment">// if the argument of memcpy is the result of an allocation (1) or a casted load instruction (2),</span></div>
|
|
1940
|
+
<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>  <span class="comment">// further steps are necessary to find the correct base value</span></div>
|
|
1941
|
+
<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>  <span class="comment">//</span></div>
|
|
1942
|
+
<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>  <span class="comment">// (1)</span></div>
|
|
1943
|
+
<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>  <span class="comment">// %call = malloc 80</span></div>
|
|
1944
|
+
<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>  <span class="comment">// %0 = bitcast i8* %call to %struct.A*</span></div>
|
|
1945
|
+
<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>  <span class="comment">// %1 = bitcast %struct.B* %param to i8*</span></div>
|
|
1946
|
+
<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>  <span class="comment">// call void memcpy(%call, %1, 80)</span></div>
|
|
1947
|
+
<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>  <span class="comment">//</span></div>
|
|
1948
|
+
<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>  <span class="comment">// (2)</span></div>
|
|
1949
|
+
<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>  <span class="comment">// %0 = bitcast %struct.A* %param to i8*</span></div>
|
|
1950
|
+
<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>  <span class="comment">// %2 = bitcast %struct.B** %arrayidx to i8**</span></div>
|
|
1951
|
+
<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>  <span class="comment">// %3 = load i8*, i8** %2</span></div>
|
|
1952
|
+
<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>  <span class="comment">// call void @memcpy(%0, %3, 80)</span></div>
|
|
1953
|
+
<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>  <a class="code" href="namespaceSVF.html#affba423b674a0aba723e33101826e297">LLVMContext</a> &cxt = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#ac1a9d20d62066ec4e181fad223669e32">getContext</a>();</div>
|
|
1954
|
+
<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>  <span class="keywordflow">if</span> (value->getType() == PointerType::getInt8PtrTy(cxt))</div>
|
|
1955
|
+
<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>  {</div>
|
|
1956
|
+
<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>  <span class="comment">// (1)</span></div>
|
|
1957
|
+
<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* cb = SVFUtil::dyn_cast<CallBase>(value))</div>
|
|
1958
|
+
<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>  {</div>
|
|
1959
|
+
<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfInst = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#ae74f307b6f96950ceedb2c375ef1c3a3">getSVFInstruction</a>(cb);</div>
|
|
1960
|
+
<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2064cb70c76f399ce115f2621adea35">SVFUtil::isHeapAllocExtCallViaRet</a>(svfInst))</div>
|
|
1961
|
+
<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>  {</div>
|
|
1962
|
+
<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* bitCast = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a837d19c740902c419206287bdb21273b">getUniqueUseViaCastInst</a>(cb))</div>
|
|
1963
|
+
<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>  <span class="keywordflow">return</span> bitCast;</div>
|
|
1964
|
+
<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>  }</div>
|
|
1965
|
+
<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>  }</div>
|
|
1966
|
+
<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>  <span class="comment">// (2)</span></div>
|
|
1967
|
+
<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5a6e8ab900d5cd17ef72661006a7fbe0">LoadInst</a>* load = SVFUtil::dyn_cast<LoadInst>(value))</div>
|
|
1968
|
+
<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>  {</div>
|
|
1969
|
+
<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#afc50da46a6ea7c2cf61683bbec4d7c8d">BitCastInst</a>* bitCast = SVFUtil::dyn_cast<BitCastInst>(load->getPointerOperand()))</div>
|
|
1970
|
+
<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>  <span class="keywordflow">return</span> bitCast->getOperand(0);</div>
|
|
1971
|
+
<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>  }</div>
|
|
1972
|
+
<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>  }</div>
|
|
1973
|
+
<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>  </div>
|
|
1974
|
+
<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>  <span class="keywordflow">return</span> value;</div>
|
|
1975
|
+
<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span> }</div>
|
|
1976
1976
|
</div><!-- fragment -->
|
|
1977
1977
|
</div>
|
|
1978
1978
|
</div>
|
|
@@ -2077,37 +2077,37 @@ Private Attributes</h2></td></tr>
|
|
|
2077
2077
|
</div><div class="memdoc">
|
|
2078
2078
|
<p>Add a temp field value node according to base value and offset this node is after the initial node method, it is out of scope of symInfo table </p>
|
|
2079
2079
|
|
|
2080
|
-
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#
|
|
2081
|
-
<div class="fragment"><div class="line"><a name="
|
|
2082
|
-
<div class="line"><a name="
|
|
2083
|
-
<div class="line"><a name="
|
|
2084
|
-
<div class="line"><a name="
|
|
2085
|
-
<div class="line"><a name="
|
|
2086
|
-
<div class="line"><a name="
|
|
2087
|
-
<div class="line"><a name="
|
|
2088
|
-
<div class="line"><a name="
|
|
2089
|
-
<div class="line"><a name="
|
|
2090
|
-
<div class="line"><a name="
|
|
2091
|
-
<div class="line"><a name="
|
|
2092
|
-
<div class="line"><a name="
|
|
2093
|
-
<div class="line"><a name="
|
|
2094
|
-
<div class="line"><a name="
|
|
2095
|
-
<div class="line"><a name="
|
|
2096
|
-
<div class="line"><a name="
|
|
2097
|
-
<div class="line"><a name="
|
|
2098
|
-
<div class="line"><a name="
|
|
2099
|
-
<div class="line"><a name="
|
|
2100
|
-
<div class="line"><a name="
|
|
2101
|
-
<div class="line"><a name="
|
|
2102
|
-
<div class="line"><a name="
|
|
2103
|
-
<div class="line"><a name="
|
|
2104
|
-
<div class="line"><a name="
|
|
2105
|
-
<div class="line"><a name="
|
|
2106
|
-
<div class="line"><a name="
|
|
2107
|
-
<div class="line"><a name="
|
|
2108
|
-
<div class="line"><a name="
|
|
2109
|
-
<div class="line"><a name="
|
|
2110
|
-
<div class="line"><a name="
|
|
2080
|
+
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l01193">1193</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
|
|
2081
|
+
<div class="fragment"><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span> {</div>
|
|
2082
|
+
<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a5298f34143ec3a2e6bb74ebad668cbbc">getBaseValVar</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(val));</div>
|
|
2083
|
+
<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> gepval = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#ad0977d55d947bdccd98d61c66d3f0cc7">getGepValVar</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#aefc70f2a0a2103259ae36d026cbb18be">curVal</a>, base, ap);</div>
|
|
2084
|
+
<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>  <span class="keywordflow">if</span> (gepval==UINT_MAX)</div>
|
|
2085
|
+
<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>  {</div>
|
|
2086
|
+
<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>  assert(((<span class="keywordtype">int</span>) UINT_MAX)==-1 && <span class="stringliteral">"maximum limit of unsigned int is not -1?"</span>);</div>
|
|
2087
|
+
<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>  <span class="comment">/*</span></div>
|
|
2088
|
+
<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span> <span class="comment"> * getGepValVar can only be called from two places:</span></div>
|
|
2089
|
+
<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span> <span class="comment"> * 1. SVFIRBuilder::addComplexConsForExt to handle external calls</span></div>
|
|
2090
|
+
<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span> <span class="comment"> * 2. SVFIRBuilder::getGlobalVarField to initialize global variable</span></div>
|
|
2091
|
+
<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span> <span class="comment"> * so curVal can only be</span></div>
|
|
2092
|
+
<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span> <span class="comment"> * 1. Instruction</span></div>
|
|
2093
|
+
<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span> <span class="comment"> * 2. GlobalVariable</span></div>
|
|
2094
|
+
<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span> <span class="comment"> */</span></div>
|
|
2095
|
+
<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>  assert((SVFUtil::isa<SVFInstruction, SVFGlobalValue>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#aefc70f2a0a2103259ae36d026cbb18be">curVal</a>)) && <span class="stringliteral">"curVal not an instruction or a globalvariable?"</span>);</div>
|
|
2096
|
+
<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>  </div>
|
|
2097
|
+
<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>  <span class="comment">// We assume every GepValNode and its GepEdge to the baseNode are unique across the whole program</span></div>
|
|
2098
|
+
<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>  <span class="comment">// We preserve the current BB information to restore it after creating the gepNode</span></div>
|
|
2099
|
+
<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a95fd13343636bcbc18db1ef8d630c52e">getCurrentValue</a>();</div>
|
|
2100
|
+
<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a6c0229120c8c96be35d2e8000b87384f">getCurrentBB</a>();</div>
|
|
2101
|
+
<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#aefc70f2a0a2103259ae36d026cbb18be">curVal</a>, <span class="keyword">nullptr</span>);</div>
|
|
2102
|
+
<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>  <a class="code" href="classSVF_1_1LLVMModuleSet.html">LLVMModuleSet</a>* llvmmodule = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>();</div>
|
|
2103
|
+
<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> gepNode= <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a555e6d530c37b23e1e43925aa188385f">addGepValNode</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#aefc70f2a0a2103259ae36d026cbb18be">curVal</a>, llvmmodule-><a class="code" href="classSVF_1_1LLVMModuleSet.html#afdd77bc1fca91f70b2ec362f1dacd392">getSVFValue</a>(val),ap, <a class="code" href="classSVF_1_1NodeIDAllocator.html#a2bd3ca30fc9669d9a0327544bdb4557b">NodeIDAllocator::get</a>()-><a class="code" href="classSVF_1_1NodeIDAllocator.html#a26b5e09e10448694435f74a8b622a7e8">allocateValueId</a>(),elementType-><a class="code" href="classSVF_1_1SVFType.html#a3672b4797c400aac90c6d36ce29e0e57">getPointerTo</a>());</div>
|
|
2104
|
+
<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4e1b6797df3e7b98da876f50741e6a3a">addGepEdge</a>(base, gepNode, ap, <span class="keyword">true</span>);</div>
|
|
2105
|
+
<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(cval, cbb);</div>
|
|
2106
|
+
<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>  <span class="keywordflow">return</span> gepNode;</div>
|
|
2107
|
+
<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>  }</div>
|
|
2108
|
+
<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>  <span class="keywordflow">else</span></div>
|
|
2109
|
+
<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>  <span class="keywordflow">return</span> gepval;</div>
|
|
2110
|
+
<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span> }</div>
|
|
2111
2111
|
</div><!-- fragment -->
|
|
2112
2112
|
</div>
|
|
2113
2113
|
</div>
|
|
@@ -2153,19 +2153,19 @@ Private Attributes</h2></td></tr>
|
|
|
2153
2153
|
<p>Get the field of the global variable node FIXME:Here we only get the field that actually used in the program We ignore the initialization of global variable field that not used in the program </p>
|
|
2154
2154
|
<p>if we did not find the constant expression in the program, then we need to create a gep node for this field</p>
|
|
2155
2155
|
|
|
2156
|
-
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#
|
|
2157
|
-
<div class="fragment"><div class="line"><a name="
|
|
2158
|
-
<div class="line"><a name="
|
|
2159
|
-
<div class="line"><a name="
|
|
2160
|
-
<div class="line"><a name="
|
|
2161
|
-
<div class="line"><a name="
|
|
2162
|
-
<div class="line"><a name="
|
|
2163
|
-
<div class="line"><a name="
|
|
2164
|
-
<div class="line"><a name="
|
|
2165
|
-
<div class="line"><a name="
|
|
2166
|
-
<div class="line"><a name="
|
|
2167
|
-
<div class="line"><a name="
|
|
2168
|
-
<div class="line"><a name="
|
|
2156
|
+
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00463">463</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
|
|
2157
|
+
<div class="fragment"><div class="line"><a name="l00464"></a><span class="lineno"> 464</span> {</div>
|
|
2158
|
+
<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  </div>
|
|
2159
|
+
<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  <span class="comment">// if the global variable do not have any field needs to be initialized</span></div>
|
|
2160
|
+
<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <span class="keywordflow">if</span> (<a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> == 0 && gvar->getInitializer()->getType()->isSingleValueType())</div>
|
|
2161
|
+
<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  {</div>
|
|
2162
|
+
<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(gvar);</div>
|
|
2163
|
+
<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  }</div>
|
|
2164
|
+
<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  <span class="keywordflow">else</span></div>
|
|
2165
|
+
<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  {</div>
|
|
2166
|
+
<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIRBuilder.html#ae4516ec05eabece1bc8e0cad1ec8cf1c">getGepValVar</a>(gvar, <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a>(<a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>), tpy);</div>
|
|
2167
|
+
<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  }</div>
|
|
2168
|
+
<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> }</div>
|
|
2169
2169
|
</div><!-- fragment -->
|
|
2170
2170
|
</div>
|
|
2171
2171
|
</div>
|
|
@@ -2377,69 +2377,69 @@ Private Attributes</h2></td></tr>
|
|
|
2377
2377
|
<p>Add the constraints for a direct, non-external call. </p>
|
|
2378
2378
|
<p>FIXME: this assertion should be placed for correct checking except bug program like 188.ammp, 300.twolf</p>
|
|
2379
2379
|
|
|
2380
|
-
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#
|
|
2381
|
-
<div class="fragment"><div class="line"><a name="
|
|
2382
|
-
<div class="line"><a name="
|
|
2383
|
-
<div class="line"><a name="
|
|
2384
|
-
<div class="line"><a name="
|
|
2385
|
-
<div class="line"><a name="
|
|
2386
|
-
<div class="line"><a name="
|
|
2387
|
-
<div class="line"><a name="
|
|
2388
|
-
<div class="line"><a name="
|
|
2389
|
-
<div class="line"><a name="
|
|
2390
|
-
<div class="line"><a name="
|
|
2391
|
-
<div class="line"><a name="
|
|
2392
|
-
<div class="line"><a name="
|
|
2393
|
-
<div class="line"><a name="
|
|
2394
|
-
<div class="line"><a name="
|
|
2395
|
-
<div class="line"><a name="
|
|
2396
|
-
<div class="line"><a name="
|
|
2397
|
-
<div class="line"><a name="
|
|
2398
|
-
<div class="line"><a name="
|
|
2399
|
-
<div class="line"><a name="
|
|
2400
|
-
<div class="line"><a name="
|
|
2401
|
-
<div class="line"><a name="
|
|
2402
|
-
<div class="line"><a name="
|
|
2403
|
-
<div class="line"><a name="
|
|
2404
|
-
<div class="line"><a name="
|
|
2405
|
-
<div class="line"><a name="
|
|
2406
|
-
<div class="line"><a name="
|
|
2407
|
-
<div class="line"><a name="
|
|
2408
|
-
<div class="line"><a name="
|
|
2409
|
-
<div class="line"><a name="
|
|
2410
|
-
<div class="line"><a name="
|
|
2411
|
-
<div class="line"><a name="
|
|
2412
|
-
<div class="line"><a name="
|
|
2413
|
-
<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>  </div>
|
|
2414
|
-
<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>  <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"process actual parm "</span> << <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getSVFValue(AA)->toString() << <span class="stringliteral">" \n"</span>);</div>
|
|
2380
|
+
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00999">999</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
|
|
2381
|
+
<div class="fragment"><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> {</div>
|
|
2382
|
+
<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>  </div>
|
|
2383
|
+
<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>  assert(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>);</div>
|
|
2384
|
+
<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfcall = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#ae74f307b6f96950ceedb2c375ef1c3a3">getSVFInstruction</a>(cs);</div>
|
|
2385
|
+
<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svffun = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#a50fc24901350df9db890ba16a9b87e33">getSVFFunction</a>(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>);</div>
|
|
2386
|
+
<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>  <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>,</div>
|
|
2387
|
+
<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"handle direct call "</span> << svfcall-><a class="code" href="classSVF_1_1SVFValue.html#a4a0cfe3a8f37d33ffcdca3d66026dcc3">toString</a>() << <span class="stringliteral">" callee "</span> << <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>->getName().str() << <span class="stringliteral">"\n"</span>);</div>
|
|
2388
|
+
<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>  </div>
|
|
2389
|
+
<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>  <span class="comment">//Only handle the ret.val. if it's used as a ptr.</span></div>
|
|
2390
|
+
<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstrec = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs);</div>
|
|
2391
|
+
<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>  <span class="comment">//Does it actually return a ptr?</span></div>
|
|
2392
|
+
<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>  <span class="keywordflow">if</span> (!cs->getType()->isVoidTy())</div>
|
|
2393
|
+
<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>  {</div>
|
|
2394
|
+
<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcret = <a class="code" href="classSVF_1_1SVFIRBuilder.html#aff99c8de4acf4eeaf01803dadf459b92">getReturnNode</a>(svffun);</div>
|
|
2395
|
+
<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>  <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callICFGNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#aa41516cdd2be5066adf22798a4fe2213">getCallICFGNode</a>(svfcall);</div>
|
|
2396
|
+
<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>  <a class="code" href="classSVF_1_1FunExitICFGNode.html">FunExitICFGNode</a>* exitICFGNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#af1b2d2839f811a00103df87342dfc919">getFunExitICFGNode</a>(svffun);</div>
|
|
2397
|
+
<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a89e8cc23aad23d2c326b4a5ff12535ca">addRetEdge</a>(srcret, dstrec,callICFGNode, exitICFGNode);</div>
|
|
2398
|
+
<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>  }</div>
|
|
2399
|
+
<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>  <span class="comment">//Iterators for the actual and formal parameters</span></div>
|
|
2400
|
+
<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> itA = 0, ieA = cs->arg_size();</div>
|
|
2401
|
+
<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>  Function::const_arg_iterator itF = <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>->arg_begin(), ieF = <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>->arg_end();</div>
|
|
2402
|
+
<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>  <span class="comment">//Go through the fixed parameters.</span></div>
|
|
2403
|
+
<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>  <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">" args:"</span>);</div>
|
|
2404
|
+
<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>  <span class="keywordflow">for</span> (; itF != ieF; ++itA, ++itF)</div>
|
|
2405
|
+
<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>  {</div>
|
|
2406
|
+
<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>  <span class="comment">//Some programs (e.g. Linux kernel) leave unneeded parameters empty.</span></div>
|
|
2407
|
+
<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>  <span class="keywordflow">if</span> (itA == ieA)</div>
|
|
2408
|
+
<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>  {</div>
|
|
2409
|
+
<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>  <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">" !! not enough args\n"</span>);</div>
|
|
2410
|
+
<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>  <span class="keywordflow">break</span>;</div>
|
|
2411
|
+
<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>  }</div>
|
|
2412
|
+
<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* AA = cs->getArgOperand(itA), *FA = &*itF; <span class="comment">//current actual/formal arg</span></div>
|
|
2415
2413
|
<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>  </div>
|
|
2416
|
-
<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>  <a class="code" href="
|
|
2417
|
-
<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span> 
|
|
2418
|
-
<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>  <a class="code" href="
|
|
2419
|
-
<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>  <a class="code" href="
|
|
2420
|
-
<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#
|
|
2421
|
-
<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span> 
|
|
2422
|
-
<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span> 
|
|
2423
|
-
<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span> 
|
|
2424
|
-
<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span> 
|
|
2425
|
-
<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span> 
|
|
2426
|
-
<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span> 
|
|
2427
|
-
<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>  <
|
|
2428
|
-
<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> 
|
|
2429
|
-
<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span> 
|
|
2430
|
-
<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span> 
|
|
2431
|
-
<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>  <
|
|
2432
|
-
<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>  <a class="code" href="
|
|
2433
|
-
<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#
|
|
2434
|
-
<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span> 
|
|
2435
|
-
<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span> 
|
|
2436
|
-
<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span> 
|
|
2437
|
-
<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span> 
|
|
2438
|
-
<div class="line"><a name="
|
|
2439
|
-
<div class="line"><a name="
|
|
2440
|
-
<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>  </div>
|
|
2441
|
-
<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span> 
|
|
2442
|
-
<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> 
|
|
2414
|
+
<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>  <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"process actual parm "</span> << <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getSVFValue(AA)->toString() << <span class="stringliteral">" \n"</span>);</div>
|
|
2415
|
+
<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>  </div>
|
|
2416
|
+
<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstFA = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(FA);</div>
|
|
2417
|
+
<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcAA = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(AA);</div>
|
|
2418
|
+
<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>  <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#aa41516cdd2be5066adf22798a4fe2213">getCallICFGNode</a>(svfcall);</div>
|
|
2419
|
+
<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>  <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>* entry = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a0dca4655c2f6112a5be1f921b8e81076">getFunEntryICFGNode</a>(svffun);</div>
|
|
2420
|
+
<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#abaf03c3031ef3940c73e3cd8e8ca17b6">addCallEdge</a>(srcAA, dstFA, icfgNode, entry);</div>
|
|
2421
|
+
<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>  }</div>
|
|
2422
|
+
<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>  <span class="comment">//Any remaining actual args must be varargs.</span></div>
|
|
2423
|
+
<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>  <span class="keywordflow">if</span> (<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>->isVarArg())</div>
|
|
2424
|
+
<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>  {</div>
|
|
2425
|
+
<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vaF = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a3fe99644b2bf5f0f9b2b21a56a400ad4">getVarargNode</a>(svffun);</div>
|
|
2426
|
+
<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>  <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"\n varargs:"</span>);</div>
|
|
2427
|
+
<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>  <span class="keywordflow">for</span> (; itA != ieA; ++itA)</div>
|
|
2428
|
+
<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>  {</div>
|
|
2429
|
+
<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* AA = cs->getArgOperand(itA);</div>
|
|
2430
|
+
<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnAA = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(AA);</div>
|
|
2431
|
+
<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>  <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#aa41516cdd2be5066adf22798a4fe2213">getCallICFGNode</a>(svfcall);</div>
|
|
2432
|
+
<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>  <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>* entry = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a0dca4655c2f6112a5be1f921b8e81076">getFunEntryICFGNode</a>(svffun);</div>
|
|
2433
|
+
<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#abaf03c3031ef3940c73e3cd8e8ca17b6">addCallEdge</a>(vnAA,vaF, icfgNode,entry);</div>
|
|
2434
|
+
<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>  }</div>
|
|
2435
|
+
<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>  }</div>
|
|
2436
|
+
<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>  <span class="keywordflow">if</span>(itA != ieA)</div>
|
|
2437
|
+
<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>  {</div>
|
|
2438
|
+
<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2e0196e0ce547ab4a483cc6d2646b24">writeWrnMsg</a>(<span class="stringliteral">"too many args to non-vararg func."</span>);</div>
|
|
2439
|
+
<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2e0196e0ce547ab4a483cc6d2646b24">writeWrnMsg</a>(<span class="stringliteral">"("</span> + svfcall-><a class="code" href="classSVF_1_1SVFValue.html#a7effb0f37f486745e0cdc3ae5e9c732b">getSourceLoc</a>() + <span class="stringliteral">")"</span>);</div>
|
|
2440
|
+
<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>  </div>
|
|
2441
|
+
<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>  }</div>
|
|
2442
|
+
<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span> }</div>
|
|
2443
2443
|
</div><!-- fragment -->
|
|
2444
2444
|
</div>
|
|
2445
2445
|
</div>
|
|
@@ -2543,122 +2543,124 @@ Private Attributes</h2></td></tr>
|
|
|
2543
2543
|
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> = 0; <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> < sz; <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>++)</div>
|
|
2544
2544
|
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  {</div>
|
|
2545
2545
|
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <a class="code" href="classSVF_1_1LLVMModuleSet.html">LLVMModuleSet</a>* llvmmodule = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>();</div>
|
|
2546
|
-
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* dElementType = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a9f7c24325d897b598d6b989fdc4aae1e">getSymbolInfo</a>()-><a class="code" href="classSVF_1_1SymbolTableInfo.html#a806ae865d29c4b05b69c499284758c6f">getFlatternedElemType</a>(llvmmodule-><a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(dtype)
|
|
2547
|
-
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> 
|
|
2548
|
-
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <a class="code" href="
|
|
2549
|
-
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> 
|
|
2550
|
-
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> 
|
|
2551
|
-
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> 
|
|
2552
|
-
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> 
|
|
2553
|
-
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> 
|
|
2554
|
-
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> 
|
|
2555
|
-
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> 
|
|
2556
|
-
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> 
|
|
2557
|
-
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="comment">
|
|
2558
|
-
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="comment">
|
|
2559
|
-
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="comment">
|
|
2560
|
-
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="comment">
|
|
2561
|
-
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="comment">
|
|
2562
|
-
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="comment">
|
|
2563
|
-
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="comment">
|
|
2564
|
-
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="comment">
|
|
2565
|
-
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="comment">
|
|
2566
|
-
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="comment">
|
|
2567
|
-
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="comment">
|
|
2568
|
-
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> 
|
|
2569
|
-
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <span class="
|
|
2570
|
-
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> 
|
|
2571
|
-
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  </div>
|
|
2572
|
-
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> 
|
|
2573
|
-
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> 
|
|
2574
|
-
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> 
|
|
2575
|
-
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> 
|
|
2576
|
-
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  </div>
|
|
2577
|
-
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> 
|
|
2578
|
-
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <span class="
|
|
2579
|
-
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> 
|
|
2580
|
-
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  </div>
|
|
2581
|
-
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> 
|
|
2582
|
-
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <span class="
|
|
2583
|
-
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> 
|
|
2584
|
-
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> 
|
|
2585
|
-
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> 
|
|
2586
|
-
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> 
|
|
2587
|
-
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> 
|
|
2588
|
-
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <a class="code" href="
|
|
2589
|
-
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> 
|
|
2590
|
-
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> 
|
|
2591
|
-
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> 
|
|
2592
|
-
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> 
|
|
2593
|
-
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> 
|
|
2594
|
-
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> 
|
|
2595
|
-
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  </div>
|
|
2596
|
-
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> 
|
|
2597
|
-
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="comment">//
|
|
2598
|
-
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <
|
|
2599
|
-
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <a class="code" href="namespaceSVF.html#
|
|
2600
|
-
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  </div>
|
|
2601
|
-
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> 
|
|
2602
|
-
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> 
|
|
2603
|
-
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  </div>
|
|
2604
|
-
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <
|
|
2605
|
-
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> 
|
|
2606
|
-
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="
|
|
2607
|
-
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> 
|
|
2608
|
-
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> 
|
|
2609
|
-
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> 
|
|
2610
|
-
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <span class="
|
|
2611
|
-
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> 
|
|
2612
|
-
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  <a class="code" href="
|
|
2613
|
-
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> 
|
|
2614
|
-
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <
|
|
2615
|
-
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> 
|
|
2616
|
-
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> 
|
|
2617
|
-
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> 
|
|
2618
|
-
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> 
|
|
2619
|
-
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> 
|
|
2620
|
-
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> 
|
|
2621
|
-
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> 
|
|
2622
|
-
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> 
|
|
2623
|
-
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> 
|
|
2624
|
-
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> 
|
|
2625
|
-
<div class="line"><a name="
|
|
2626
|
-
<div class="line"><a name="
|
|
2627
|
-
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> 
|
|
2628
|
-
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> 
|
|
2629
|
-
<div class="line"><a name="
|
|
2630
|
-
<div class="line"><a name="
|
|
2631
|
-
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> 
|
|
2632
|
-
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> 
|
|
2633
|
-
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <a class="code" href="
|
|
2634
|
-
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> 
|
|
2635
|
-
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> 
|
|
2636
|
-
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> 
|
|
2637
|
-
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> 
|
|
2638
|
-
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> 
|
|
2639
|
-
<div class="line"><a name="
|
|
2640
|
-
<div class="line"><a name="
|
|
2641
|
-
<div class="line"><a name="
|
|
2642
|
-
<div class="line"><a name="
|
|
2643
|
-
<div class="line"><a name="
|
|
2644
|
-
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> 
|
|
2645
|
-
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> 
|
|
2646
|
-
<div class="line"><a name="
|
|
2647
|
-
<div class="line"><a name="
|
|
2648
|
-
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <span class="
|
|
2649
|
-
<div class="line"><a name="
|
|
2650
|
-
<div class="line"><a name="
|
|
2651
|
-
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> 
|
|
2652
|
-
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> 
|
|
2653
|
-
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <a class="code" href="
|
|
2654
|
-
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> 
|
|
2655
|
-
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> 
|
|
2656
|
-
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> 
|
|
2657
|
-
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> 
|
|
2658
|
-
<div class="line"><a name="
|
|
2659
|
-
<div class="line"><a name="
|
|
2660
|
-
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> 
|
|
2661
|
-
<div class="line"><a name="
|
|
2546
|
+
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* dElementType = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a9f7c24325d897b598d6b989fdc4aae1e">getSymbolInfo</a>()-><a class="code" href="classSVF_1_1SymbolTableInfo.html#a806ae865d29c4b05b69c499284758c6f">getFlatternedElemType</a>(llvmmodule-><a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(dtype),</div>
|
|
2547
|
+
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  dstFields[<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>].getConstantStructFldIdx());</div>
|
|
2548
|
+
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dField = <a class="code" href="classSVF_1_1SVFIRBuilder.html#ae4516ec05eabece1bc8e0cad1ec8cf1c">getGepValVar</a>(cs->getArgOperand(0), dstFields[<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>], dElementType);</div>
|
|
2549
|
+
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a30f043eeca79259d84b97e265110f018">addStoreEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs->getArgOperand(1)),dField);</div>
|
|
2550
|
+
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  }</div>
|
|
2551
|
+
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <span class="keywordflow">if</span>(SVFUtil::isa<PointerType>(cs->getType()))</div>
|
|
2552
|
+
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs->getArgOperand(0)), <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs));</div>
|
|
2553
|
+
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  }</div>
|
|
2554
|
+
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(svfCallee-><a class="code" href="classSVF_1_1SVFValue.html#a2401b022638769f59f86ab424a189b6e">getName</a>().compare(<span class="stringliteral">"dlsym"</span>) == 0)</div>
|
|
2555
|
+
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  {</div>
|
|
2556
|
+
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <span class="comment">/*</span></div>
|
|
2557
|
+
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="comment"> Side-effects of void* dlsym( void* handle, const char* funName),</span></div>
|
|
2558
|
+
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="comment"> Locate the function with the name "funName," then add a "copy" edge between the callsite and that function.</span></div>
|
|
2559
|
+
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="comment"> dlsym() example:</span></div>
|
|
2560
|
+
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="comment"> int main() {</span></div>
|
|
2561
|
+
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="comment"> // Open the shared library</span></div>
|
|
2562
|
+
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="comment"> void* handle = dlopen("./my_shared_library.so", RTLD_LAZY);</span></div>
|
|
2563
|
+
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="comment"> // Find the function address</span></div>
|
|
2564
|
+
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="comment"> void (*myFunctionPtr)() = (void (*)())dlsym(handle, "myFunction");</span></div>
|
|
2565
|
+
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="comment"> // Call the function</span></div>
|
|
2566
|
+
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="comment"> myFunctionPtr();</span></div>
|
|
2567
|
+
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="comment"> }</span></div>
|
|
2568
|
+
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="comment"> */</span></div>
|
|
2569
|
+
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* src = cs->getArgOperand(1);</div>
|
|
2570
|
+
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">GetElementPtrInst</a>* gep = SVFUtil::dyn_cast<GetElementPtrInst>(src))</div>
|
|
2571
|
+
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  src = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a07bd47ccfd02c5a2a6db26b537b2184f">stripConstantCasts</a>(gep->getPointerOperand());</div>
|
|
2572
|
+
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  </div>
|
|
2573
|
+
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="keyword">auto</span> getHookFn = [](<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* src)-><span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>*</div>
|
|
2574
|
+
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  {</div>
|
|
2575
|
+
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="keywordflow">if</span> (!SVFUtil::isa<GlobalVariable>(src))</div>
|
|
2576
|
+
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
|
|
2577
|
+
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  </div>
|
|
2578
|
+
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <span class="keyword">auto</span> *glob = SVFUtil::cast<GlobalVariable>(src);</div>
|
|
2579
|
+
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  <span class="keywordflow">if</span> (!glob->hasInitializer() || !SVFUtil::isa<ConstantDataArray>(glob->getInitializer()))</div>
|
|
2580
|
+
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
|
|
2581
|
+
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  </div>
|
|
2582
|
+
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <span class="keyword">auto</span> *constarray = SVFUtil::cast<ConstantDataArray>(glob->getInitializer());</div>
|
|
2583
|
+
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a76b0d0ac69c170838cfc8ee26f4518a0">LLVMUtil::getProgFunction</a>(constarray->getAsCString().str());</div>
|
|
2584
|
+
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  };</div>
|
|
2585
|
+
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  </div>
|
|
2586
|
+
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *fn = getHookFn(src))</div>
|
|
2587
|
+
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  {</div>
|
|
2588
|
+
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(fn);</div>
|
|
2589
|
+
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(srcNode, <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs));</div>
|
|
2590
|
+
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  }</div>
|
|
2591
|
+
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  }</div>
|
|
2592
|
+
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(svfCallee-><a class="code" href="classSVF_1_1SVFValue.html#a2401b022638769f59f86ab424a189b6e">getName</a>().find(<span class="stringliteral">"_ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS_"</span>) != std::string::npos)</div>
|
|
2593
|
+
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  {</div>
|
|
2594
|
+
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  <span class="comment">// The purpose of this function is to insert a new node into the red-black tree and then rebalance the tree to ensure that the red-black tree properties are maintained.</span></div>
|
|
2595
|
+
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  assert(svfCall-><a class="code" href="classSVF_1_1SVFCallInst.html#a496d0e963f0f6a4f9c08183fa91792b0">arg_size</a>() == 4 && <span class="stringliteral">"_Rb_tree_insert_and_rebalance should have 4 arguments.\n"</span>);</div>
|
|
2596
|
+
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  </div>
|
|
2597
|
+
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="comment">// We have vArg3 points to the entry of _Rb_tree_node_base { color; parent; left; right; }.</span></div>
|
|
2598
|
+
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <span class="comment">// Now we calculate the offset from base to vArg3</span></div>
|
|
2599
|
+
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnArg3 = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(svfCall-><a class="code" href="classSVF_1_1SVFCallInst.html#a3cbb4b4089c8b27d01da15f2d2f22e14">getArgOperand</a>(3));</div>
|
|
2600
|
+
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <a class="code" href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">APOffset</a> <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> =</div>
|
|
2601
|
+
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a7c401d6929e583be734c0c4e9957d0d7">getAccessPathFromBaseNode</a>(vnArg3).<a class="code" href="classSVF_1_1AccessPath.html#a5427d08c9eb9d86e66c2bff6aeba6bac">getConstantStructFldIdx</a>();</div>
|
|
2602
|
+
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  </div>
|
|
2603
|
+
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <span class="comment">// We get all flattened fields of base</span></div>
|
|
2604
|
+
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  vector<AccessPath> fields = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#adb6db6407bdc9a39e5bf8cd941f0ad15">getTypeLocSetsMap</a>(vnArg3).second;</div>
|
|
2605
|
+
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  </div>
|
|
2606
|
+
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="comment">// We summarize the side effects: arg3->parent = arg1, arg3->left = arg1, arg3->right = arg1</span></div>
|
|
2607
|
+
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <span class="comment">// Note that arg0 is aligned with "offset".</span></div>
|
|
2608
|
+
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">APOffset</a> i = <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> + 1; i <= <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> + 3; ++i)</div>
|
|
2609
|
+
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  {</div>
|
|
2610
|
+
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <span class="keywordflow">if</span>((<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>)i >= fields.size())</div>
|
|
2611
|
+
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="keywordflow">break</span>;</div>
|
|
2612
|
+
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* elementType = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a9f7c24325d897b598d6b989fdc4aae1e">getSymbolInfo</a>()-><a class="code" href="classSVF_1_1SymbolTableInfo.html#a806ae865d29c4b05b69c499284758c6f">getFlatternedElemType</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#adb6db6407bdc9a39e5bf8cd941f0ad15">getTypeLocSetsMap</a>(vnArg3).first,</div>
|
|
2613
|
+
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  fields[i].getConstantStructFldIdx());</div>
|
|
2614
|
+
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnD = <a class="code" href="classSVF_1_1SVFIRBuilder.html#ae4516ec05eabece1bc8e0cad1ec8cf1c">getGepValVar</a>(cs->getArgOperand(3), fields[i], elementType);</div>
|
|
2615
|
+
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(svfCall-><a class="code" href="classSVF_1_1SVFCallInst.html#a3cbb4b4089c8b27d01da15f2d2f22e14">getArgOperand</a>(1));</div>
|
|
2616
|
+
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  <span class="keywordflow">if</span>(vnD && vnS)</div>
|
|
2617
|
+
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a30f043eeca79259d84b97e265110f018">addStoreEdge</a>(vnS,vnD);</div>
|
|
2618
|
+
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  }</div>
|
|
2619
|
+
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  }</div>
|
|
2620
|
+
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  </div>
|
|
2621
|
+
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a5c2abeb363081381c3dc939ab511e3f0">isThreadForkCall</a>(svfInst))</div>
|
|
2622
|
+
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  {</div>
|
|
2623
|
+
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* forkedFun = SVFUtil::dyn_cast<SVFFunction>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a2790c5289dad1d6e80f7597a2ea458ab">getForkedFun</a>(svfInst)))</div>
|
|
2624
|
+
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  {</div>
|
|
2625
|
+
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  forkedFun = forkedFun->getDefFunForMultipleModule();</div>
|
|
2626
|
+
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* actualParm = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8c64663b564eb7c399013389920ab500">getActualParmAtForkSite</a>(svfInst);</div>
|
|
2627
|
+
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  assert((forkedFun->arg_size() <= 2) && <span class="stringliteral">"Size of formal parameter of start routine should be one"</span>);</div>
|
|
2628
|
+
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <span class="keywordflow">if</span> (forkedFun->arg_size() <= 2 && forkedFun->arg_size() >= 1)</div>
|
|
2629
|
+
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  {</div>
|
|
2630
|
+
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFArgument.html">SVFArgument</a>* formalParm = forkedFun->getArg(0);</div>
|
|
2631
|
+
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  <span class="keywordflow">if</span> (actualParm-><a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>()-><a class="code" href="classSVF_1_1SVFType.html#a870b63af2bf9fe43cdf1df3d56b20f6c">isPointerTy</a>() && formalParm-><a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>()-><a class="code" href="classSVF_1_1SVFType.html#a870b63af2bf9fe43cdf1df3d56b20f6c">isPointerTy</a>())</div>
|
|
2632
|
+
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  {</div>
|
|
2633
|
+
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#aa41516cdd2be5066adf22798a4fe2213">getCallICFGNode</a>(svfInst);</div>
|
|
2634
|
+
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a> *entry = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a0dca4655c2f6112a5be1f921b8e81076">getFunEntryICFGNode</a>(forkedFun);</div>
|
|
2635
|
+
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a54636413fd3ed7e634ac7428139966a4">addThreadForkEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(actualParm), <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(formalParm), icfgNode, entry);</div>
|
|
2636
|
+
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  }</div>
|
|
2637
|
+
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  }</div>
|
|
2638
|
+
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  }</div>
|
|
2639
|
+
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  <span class="keywordflow">else</span></div>
|
|
2640
|
+
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  {</div>
|
|
2641
|
+
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  }</div>
|
|
2642
|
+
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  }</div>
|
|
2643
|
+
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  </div>
|
|
2644
|
+
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a28fbb7cc51eb7e25d88f43e3eb1f30fb">isHareParForCall</a>(svfInst))</div>
|
|
2645
|
+
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  {</div>
|
|
2646
|
+
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* taskFunc = SVFUtil::dyn_cast<SVFFunction>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a5cee46f58bdab3f9b1c698e97290152f">getTaskFuncAtHareParForSite</a>(svfInst)))</div>
|
|
2647
|
+
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  {</div>
|
|
2648
|
+
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  assert((taskFunc->arg_size() == 3) && <span class="stringliteral">"Size of formal parameter of hare_parallel_for's task routine should be 3"</span>);</div>
|
|
2649
|
+
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* actualParm = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a2f74db48793a0db76c000ffecf9e1bd2">getTaskDataAtHareParForSite</a>(svfInst);</div>
|
|
2650
|
+
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFArgument.html">SVFArgument</a>* formalParm = taskFunc->getArg(0);</div>
|
|
2651
|
+
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  <span class="keywordflow">if</span> (actualParm-><a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>()-><a class="code" href="classSVF_1_1SVFType.html#a870b63af2bf9fe43cdf1df3d56b20f6c">isPointerTy</a>() && formalParm-><a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>()-><a class="code" href="classSVF_1_1SVFType.html#a870b63af2bf9fe43cdf1df3d56b20f6c">isPointerTy</a>())</div>
|
|
2652
|
+
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  {</div>
|
|
2653
|
+
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#aa41516cdd2be5066adf22798a4fe2213">getCallICFGNode</a>(svfInst);</div>
|
|
2654
|
+
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a> *entry = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a0dca4655c2f6112a5be1f921b8e81076">getFunEntryICFGNode</a>(taskFunc);</div>
|
|
2655
|
+
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a54636413fd3ed7e634ac7428139966a4">addThreadForkEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(actualParm), <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(formalParm), icfgNode, entry);</div>
|
|
2656
|
+
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  }</div>
|
|
2657
|
+
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  }</div>
|
|
2658
|
+
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  <span class="keywordflow">else</span></div>
|
|
2659
|
+
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  {</div>
|
|
2660
|
+
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  }</div>
|
|
2661
|
+
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  }</div>
|
|
2662
|
+
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  </div>
|
|
2663
|
+
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> }</div>
|
|
2662
2664
|
</div><!-- fragment -->
|
|
2663
2665
|
</div>
|
|
2664
2666
|
</div>
|
|
@@ -2689,14 +2691,14 @@ Private Attributes</h2></td></tr>
|
|
|
2689
2691
|
<p>Handle indirect call. </p>
|
|
2690
2692
|
<p>Indirect call is resolved on-the-fly during pointer analysis </p>
|
|
2691
2693
|
|
|
2692
|
-
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#
|
|
2693
|
-
<div class="fragment"><div class="line"><a name="
|
|
2694
|
-
<div class="line"><a name="
|
|
2695
|
-
<div class="line"><a name="
|
|
2696
|
-
<div class="line"><a name="
|
|
2697
|
-
<div class="line"><a name="
|
|
2698
|
-
<div class="line"><a name="
|
|
2699
|
-
<div class="line"><a name="
|
|
2694
|
+
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l01122">1122</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
|
|
2695
|
+
<div class="fragment"><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span> {</div>
|
|
2696
|
+
<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfcall = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#ae74f307b6f96950ceedb2c375ef1c3a3">getSVFInstruction</a>(cs);</div>
|
|
2697
|
+
<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* svfcalledval = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#afdd77bc1fca91f70b2ec362f1dacd392">getSVFValue</a>(cs->getCalledOperand());</div>
|
|
2698
|
+
<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>  </div>
|
|
2699
|
+
<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cbn = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#aa41516cdd2be5066adf22798a4fe2213">getCallICFGNode</a>(svfcall);</div>
|
|
2700
|
+
<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#af4a5fd9ecddb1447207335917adccd68">addIndirectCallsites</a>(cbn,<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(svfcalledval));</div>
|
|
2701
|
+
<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span> }</div>
|
|
2700
2702
|
</div><!-- fragment -->
|
|
2701
2703
|
</div>
|
|
2702
2704
|
</div>
|
|
@@ -2796,78 +2798,78 @@ Private Attributes</h2></td></tr>
|
|
|
2796
2798
|
</div><div class="memdoc">
|
|
2797
2799
|
<p>src should not point to anything yet</p>
|
|
2798
2800
|
|
|
2799
|
-
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#
|
|
2800
|
-
<div class="fragment"><div class="line"><a name="
|
|
2801
|
-
<div class="line"><a name="
|
|
2802
|
-
<div class="line"><a name="
|
|
2803
|
-
<div class="line"><a name="
|
|
2804
|
-
<div class="line"><a name="
|
|
2805
|
-
<div class="line"><a name="
|
|
2806
|
-
<div class="line"><a name="
|
|
2807
|
-
<div class="line"><a name="
|
|
2808
|
-
<div class="line"><a name="
|
|
2809
|
-
<div class="line"><a name="
|
|
2810
|
-
<div class="line"><a name="
|
|
2811
|
-
<div class="line"><a name="
|
|
2812
|
-
<div class="line"><a name="
|
|
2813
|
-
<div class="line"><a name="
|
|
2814
|
-
<div class="line"><a name="
|
|
2815
|
-
<div class="line"><a name="
|
|
2816
|
-
<div class="line"><a name="
|
|
2817
|
-
<div class="line"><a name="
|
|
2818
|
-
<div class="line"><a name="
|
|
2819
|
-
<div class="line"><a name="
|
|
2820
|
-
<div class="line"><a name="
|
|
2821
|
-
<div class="line"><a name="
|
|
2822
|
-
<div class="line"><a name="
|
|
2823
|
-
<div class="line"><a name="
|
|
2824
|
-
<div class="line"><a name="
|
|
2825
|
-
<div class="line"><a name="
|
|
2826
|
-
<div class="line"><a name="
|
|
2827
|
-
<div class="line"><a name="
|
|
2828
|
-
<div class="line"><a name="
|
|
2829
|
-
<div class="line"><a name="
|
|
2830
|
-
<div class="line"><a name="
|
|
2831
|
-
<div class="line"><a name="
|
|
2832
|
-
<div class="line"><a name="
|
|
2833
|
-
<div class="line"><a name="
|
|
2834
|
-
<div class="line"><a name="
|
|
2835
|
-
<div class="line"><a name="
|
|
2836
|
-
<div class="line"><a name="
|
|
2837
|
-
<div class="line"><a name="
|
|
2838
|
-
<div class="line"><a name="
|
|
2839
|
-
<div class="line"><a name="
|
|
2840
|
-
<div class="line"><a name="
|
|
2841
|
-
<div class="line"><a name="
|
|
2842
|
-
<div class="line"><a name="
|
|
2843
|
-
<div class="line"><a name="
|
|
2844
|
-
<div class="line"><a name="
|
|
2845
|
-
<div class="line"><a name="
|
|
2846
|
-
<div class="line"><a name="
|
|
2847
|
-
<div class="line"><a name="
|
|
2848
|
-
<div class="line"><a name="
|
|
2849
|
-
<div class="line"><a name="
|
|
2850
|
-
<div class="line"><a name="
|
|
2851
|
-
<div class="line"><a name="
|
|
2852
|
-
<div class="line"><a name="
|
|
2853
|
-
<div class="line"><a name="
|
|
2854
|
-
<div class="line"><a name="
|
|
2855
|
-
<div class="line"><a name="
|
|
2856
|
-
<div class="line"><a name="
|
|
2857
|
-
<div class="line"><a name="
|
|
2858
|
-
<div class="line"><a name="
|
|
2859
|
-
<div class="line"><a name="
|
|
2860
|
-
<div class="line"><a name="
|
|
2861
|
-
<div class="line"><a name="
|
|
2862
|
-
<div class="line"><a name="
|
|
2863
|
-
<div class="line"><a name="
|
|
2864
|
-
<div class="line"><a name="
|
|
2865
|
-
<div class="line"><a name="
|
|
2866
|
-
<div class="line"><a name="
|
|
2867
|
-
<div class="line"><a name="
|
|
2868
|
-
<div class="line"><a name="
|
|
2869
|
-
<div class="line"><a name="
|
|
2870
|
-
<div class="line"><a name="
|
|
2801
|
+
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00490">490</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
|
|
2802
|
+
<div class="fragment"><div class="line"><a name="l00492"></a><span class="lineno"> 492</span> {</div>
|
|
2803
|
+
<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"global "</span> << <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getSVFValue(gvar)->toString() << <span class="stringliteral">" constant initializer: "</span> << <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getSVFValue(C)->toString() << <span class="stringliteral">"\n"</span>);</div>
|
|
2804
|
+
<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>  <span class="keywordflow">if</span> (C->getType()->isSingleValueType())</div>
|
|
2805
|
+
<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  {</div>
|
|
2806
|
+
<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(C);</div>
|
|
2807
|
+
<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  <span class="comment">// get the field value if it is available, otherwise we create a dummy field node.</span></div>
|
|
2808
|
+
<div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(gvar, <span class="keyword">nullptr</span>);</div>
|
|
2809
|
+
<div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> field = <a class="code" href="classSVF_1_1SVFIRBuilder.html#af4e2ec8dee9fca167e20b01cc10b56fd">getGlobalVarField</a>(gvar, <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>, <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getSVFType(C->getType()));</div>
|
|
2810
|
+
<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  </div>
|
|
2811
|
+
<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  <span class="keywordflow">if</span> (SVFUtil::isa<GlobalVariable, Function>(C))</div>
|
|
2812
|
+
<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  {</div>
|
|
2813
|
+
<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(C, <span class="keyword">nullptr</span>);</div>
|
|
2814
|
+
<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a30f043eeca79259d84b97e265110f018">addStoreEdge</a>(src, field);</div>
|
|
2815
|
+
<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  }</div>
|
|
2816
|
+
<div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<ConstantExpr>(C))</div>
|
|
2817
|
+
<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  {</div>
|
|
2818
|
+
<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  <span class="comment">// add gep edge of C1 itself is a constant expression</span></div>
|
|
2819
|
+
<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5adf8baa546292434ba1fec48db2d0a7">processCE</a>(C);</div>
|
|
2820
|
+
<div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(C, <span class="keyword">nullptr</span>);</div>
|
|
2821
|
+
<div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a30f043eeca79259d84b97e265110f018">addStoreEdge</a>(src, field);</div>
|
|
2822
|
+
<div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  }</div>
|
|
2823
|
+
<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<BlockAddress>(C))</div>
|
|
2824
|
+
<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  {</div>
|
|
2825
|
+
<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  <span class="comment">// blockaddress instruction (e.g. i8* blockaddress(@run_vm, %182))</span></div>
|
|
2826
|
+
<div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  <span class="comment">// is treated as constant data object for now, see LLVMUtil.h:397, SymbolTableInfo.cpp:674 and SVFIRBuilder.cpp:183-194</span></div>
|
|
2827
|
+
<div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5adf8baa546292434ba1fec48db2d0a7">processCE</a>(C);</div>
|
|
2828
|
+
<div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(C, <span class="keyword">nullptr</span>);</div>
|
|
2829
|
+
<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a2a0711cb1fdd3c5c90b07ff107aff1ac">addAddrEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#ac5da3a0cbe040a45d719b6f6a23aed91">getConstantNode</a>(), src);</div>
|
|
2830
|
+
<div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  }</div>
|
|
2831
|
+
<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  <span class="keywordflow">else</span></div>
|
|
2832
|
+
<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  {</div>
|
|
2833
|
+
<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(C, <span class="keyword">nullptr</span>);</div>
|
|
2834
|
+
<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a30f043eeca79259d84b97e265110f018">addStoreEdge</a>(src, field);</div>
|
|
2835
|
+
<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  <span class="keywordflow">if</span> (C->getType()->isPtrOrPtrVectorTy() && src != <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a3de9a2a565c303f68a90c32dc59febd5">getNullPtr</a>())</div>
|
|
2836
|
+
<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a3de9a2a565c303f68a90c32dc59febd5">getNullPtr</a>(), src);</div>
|
|
2837
|
+
<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  }</div>
|
|
2838
|
+
<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  }</div>
|
|
2839
|
+
<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<ConstantArray, ConstantStruct>(C))</div>
|
|
2840
|
+
<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  {</div>
|
|
2841
|
+
<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a08fbef6fe3e2af96a49f79ce23accb01">LLVMUtil::isValVtbl</a>(gvar) && !<a class="code" href="classSVF_1_1Options.html#a88bb706e03a3dd04546b4ce62af7b140">Options::VtableInSVFIR</a>())</div>
|
|
2842
|
+
<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  <span class="keywordflow">return</span>;</div>
|
|
2843
|
+
<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0, e = C->getNumOperands(); i != e; i++)</div>
|
|
2844
|
+
<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  {</div>
|
|
2845
|
+
<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> off = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a9f7c24325d897b598d6b989fdc4aae1e">getSymbolInfo</a>()-><a class="code" href="classSVF_1_1SymbolTableInfo.html#a24df52313f8093bb651ae9da972cd663">getFlattenedElemIdx</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getSVFType(C->getType()), i);</div>
|
|
2846
|
+
<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#ae7fcd2050a57a43bfed2c7fd1c41d250">InitialGlobal</a>(gvar, SVFUtil::cast<Constant>(C->getOperand(i)), <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> + off);</div>
|
|
2847
|
+
<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  }</div>
|
|
2848
|
+
<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  }</div>
|
|
2849
|
+
<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF.html#a7332f8059ea95472dcc231de884a5768">ConstantData</a>* data = SVFUtil::dyn_cast<ConstantData>(C))</div>
|
|
2850
|
+
<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  {</div>
|
|
2851
|
+
<div class="line"><a name="l00542"></a><span class="lineno"> 542</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Options.html#a18dd95e01a50aa82165c46a3801053c5">Options::ModelConsts</a>())</div>
|
|
2852
|
+
<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  {</div>
|
|
2853
|
+
<div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF.html#a8ad3aa124fabddc2fdd07c50403d70a9">ConstantDataSequential</a>* seq = SVFUtil::dyn_cast<ConstantDataSequential>(data))</div>
|
|
2854
|
+
<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  {</div>
|
|
2855
|
+
<div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  <span class="keywordflow">for</span>(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i < seq->getNumElements(); i++)</div>
|
|
2856
|
+
<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  {</div>
|
|
2857
|
+
<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> off = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a9f7c24325d897b598d6b989fdc4aae1e">getSymbolInfo</a>()-><a class="code" href="classSVF_1_1SymbolTableInfo.html#a24df52313f8093bb651ae9da972cd663">getFlattenedElemIdx</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getSVFType(C->getType()), i);</div>
|
|
2858
|
+
<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* ct = seq->getElementAsConstant(i);</div>
|
|
2859
|
+
<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#ae7fcd2050a57a43bfed2c7fd1c41d250">InitialGlobal</a>(gvar, ct, <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> + off);</div>
|
|
2860
|
+
<div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  }</div>
|
|
2861
|
+
<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  }</div>
|
|
2862
|
+
<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  <span class="keywordflow">else</span></div>
|
|
2863
|
+
<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  {</div>
|
|
2864
|
+
<div class="line"><a name="l00555"></a><span class="lineno"> 555</span>  assert((SVFUtil::isa<ConstantAggregateZero, UndefValue>(data)) && <span class="stringliteral">"Single value type data should have been handled!"</span>);</div>
|
|
2865
|
+
<div class="line"><a name="l00556"></a><span class="lineno"> 556</span>  }</div>
|
|
2866
|
+
<div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  }</div>
|
|
2867
|
+
<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  }</div>
|
|
2868
|
+
<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  <span class="keywordflow">else</span></div>
|
|
2869
|
+
<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  {</div>
|
|
2870
|
+
<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  <span class="comment">//TODO:assert(SVFUtil::isa<ConstantVector>(C),"what else do we have");</span></div>
|
|
2871
|
+
<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  }</div>
|
|
2872
|
+
<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> }</div>
|
|
2871
2873
|
</div><!-- fragment -->
|
|
2872
2874
|
</div>
|
|
2873
2875
|
</div>
|
|
@@ -2996,114 +2998,116 @@ Private Attributes</h2></td></tr>
|
|
|
2996
2998
|
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* opnd = gepce->getOperand(0);</div>
|
|
2997
2999
|
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  <span class="comment">// handle recursive constant express case (gep (bitcast (gep X 1)) 1)</span></div>
|
|
2998
3000
|
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5adf8baa546292434ba1fec48db2d0a7">processCE</a>(opnd);</div>
|
|
2999
|
-
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <
|
|
3000
|
-
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  <
|
|
3001
|
-
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  <
|
|
3002
|
-
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  <span class="
|
|
3003
|
-
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  <span class="
|
|
3004
|
-
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  <a class="code" href="
|
|
3005
|
-
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <span class="
|
|
3006
|
-
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> 
|
|
3007
|
-
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> 
|
|
3008
|
-
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="comment">
|
|
3009
|
-
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> 
|
|
3010
|
-
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> 
|
|
3011
|
-
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> 
|
|
3012
|
-
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> 
|
|
3013
|
-
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> 
|
|
3014
|
-
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> 
|
|
3015
|
-
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> 
|
|
3016
|
-
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  <a class="code" href="
|
|
3017
|
-
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  <span class="keyword">const</span> <a class="code" href="
|
|
3018
|
-
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  <
|
|
3019
|
-
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  <a class="code" href="
|
|
3020
|
-
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  <
|
|
3021
|
-
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(
|
|
3022
|
-
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> 
|
|
3023
|
-
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> 
|
|
3024
|
-
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> 
|
|
3025
|
-
<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> 
|
|
3026
|
-
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> 
|
|
3027
|
-
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  <
|
|
3028
|
-
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  <a class="code" href="
|
|
3029
|
-
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  <a class="code" href="
|
|
3030
|
-
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  <
|
|
3031
|
-
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  <
|
|
3032
|
-
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  <a class="code" href="
|
|
3033
|
-
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  <
|
|
3034
|
-
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  <a class="code" href="
|
|
3035
|
-
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>
|
|
3036
|
-
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>
|
|
3037
|
-
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#
|
|
3038
|
-
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#
|
|
3039
|
-
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> 
|
|
3040
|
-
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> 
|
|
3041
|
-
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> 
|
|
3042
|
-
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> 
|
|
3043
|
-
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> 
|
|
3044
|
-
<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> 
|
|
3045
|
-
<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> 
|
|
3046
|
-
<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> 
|
|
3047
|
-
<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> 
|
|
3048
|
-
<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> 
|
|
3049
|
-
<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  <span class="keyword">const</span> <a class="code" href="
|
|
3050
|
-
<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  <
|
|
3051
|
-
<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  <a class="code" href="
|
|
3052
|
-
<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  <
|
|
3053
|
-
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(
|
|
3054
|
-
<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> 
|
|
3055
|
-
<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> 
|
|
3056
|
-
<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> 
|
|
3057
|
-
<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> 
|
|
3058
|
-
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> 
|
|
3059
|
-
<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  <span class="
|
|
3060
|
-
<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>  <a class="code" href="
|
|
3061
|
-
<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  <
|
|
3062
|
-
<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#
|
|
3063
|
-
<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#
|
|
3064
|
-
<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> 
|
|
3065
|
-
<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> 
|
|
3066
|
-
<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> 
|
|
3067
|
-
<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> 
|
|
3068
|
-
<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> 
|
|
3069
|
-
<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  <span class="
|
|
3070
|
-
<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  <a class="code" href="
|
|
3071
|
-
<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  <
|
|
3072
|
-
<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#
|
|
3073
|
-
<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#
|
|
3074
|
-
<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> 
|
|
3075
|
-
<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> 
|
|
3076
|
-
<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> 
|
|
3077
|
-
<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> 
|
|
3078
|
-
<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> 
|
|
3079
|
-
<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  <span class="
|
|
3080
|
-
<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  <a class="code" href="
|
|
3081
|
-
<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  <
|
|
3082
|
-
<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#
|
|
3083
|
-
<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#
|
|
3084
|
-
<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> 
|
|
3085
|
-
<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> 
|
|
3086
|
-
<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> 
|
|
3087
|
-
<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> 
|
|
3088
|
-
<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> 
|
|
3089
|
-
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> 
|
|
3090
|
-
<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> 
|
|
3091
|
-
<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> 
|
|
3092
|
-
<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> 
|
|
3093
|
-
<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  <span class="
|
|
3094
|
-
<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  <span class="
|
|
3095
|
-
<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  <a class="code" href="
|
|
3096
|
-
<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  <
|
|
3097
|
-
<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#
|
|
3098
|
-
<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#
|
|
3099
|
-
<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> 
|
|
3100
|
-
<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> 
|
|
3101
|
-
<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> 
|
|
3102
|
-
<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> 
|
|
3103
|
-
<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> 
|
|
3104
|
-
<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> 
|
|
3105
|
-
<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> 
|
|
3106
|
-
<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> }</div>
|
|
3001
|
+
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <span class="keyword">auto</span> &GEPOp = llvm::cast<llvm::GEPOperator>(*gepce);</div>
|
|
3002
|
+
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *pType = GEPOp.getSourceElementType();</div>
|
|
3003
|
+
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a> ap(0, <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getSVFType(pType));</div>
|
|
3004
|
+
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  <span class="keywordtype">bool</span> constGep = <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac8c440fe6513495edb8949df5a32d979">computeGepOffset</a>(gepce, ap);</div>
|
|
3005
|
+
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  <span class="comment">// must invoke pag methods here, otherwise it will be a dead recursion cycle</span></div>
|
|
3006
|
+
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a95fd13343636bcbc18db1ef8d630c52e">getCurrentValue</a>();</div>
|
|
3007
|
+
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a6c0229120c8c96be35d2e8000b87384f">getCurrentBB</a>();</div>
|
|
3008
|
+
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(gepce, <span class="keyword">nullptr</span>);</div>
|
|
3009
|
+
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <span class="comment">/*</span></div>
|
|
3010
|
+
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="comment"> * The gep edge created are like constexpr (same edge may appear at multiple callsites)</span></div>
|
|
3011
|
+
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> <span class="comment"> * so bb/inst of this edge may be rewritten several times, we treat it as global here.</span></div>
|
|
3012
|
+
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="comment"> */</span></div>
|
|
3013
|
+
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4e1b6797df3e7b98da876f50741e6a3a">addGepEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#afdd77bc1fca91f70b2ec362f1dacd392">getSVFValue</a>(opnd)), <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#afdd77bc1fca91f70b2ec362f1dacd392">getSVFValue</a>(gepce)), ap, constGep);</div>
|
|
3014
|
+
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(cval, cbb);</div>
|
|
3015
|
+
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  }</div>
|
|
3016
|
+
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>* castce = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#af983b0e1fbd371d8672e8f03f63084fc">isCastConstantExpr</a>(ref))</div>
|
|
3017
|
+
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  {</div>
|
|
3018
|
+
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"handle cast constant expression "</span> << <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getSVFValue(ref)->toString() << <span class="stringliteral">"\n"</span>);</div>
|
|
3019
|
+
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* opnd = castce->getOperand(0);</div>
|
|
3020
|
+
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5adf8baa546292434ba1fec48db2d0a7">processCE</a>(opnd);</div>
|
|
3021
|
+
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a95fd13343636bcbc18db1ef8d630c52e">getCurrentValue</a>();</div>
|
|
3022
|
+
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a6c0229120c8c96be35d2e8000b87384f">getCurrentBB</a>();</div>
|
|
3023
|
+
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(castce, <span class="keyword">nullptr</span>);</div>
|
|
3024
|
+
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#afdd77bc1fca91f70b2ec362f1dacd392">getSVFValue</a>(opnd)), <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#afdd77bc1fca91f70b2ec362f1dacd392">getSVFValue</a>(castce)));</div>
|
|
3025
|
+
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(cval, cbb);</div>
|
|
3026
|
+
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  }</div>
|
|
3027
|
+
<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>* selectce = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#ae59b0dc7f29dbd2018e819f77465f66e">isSelectConstantExpr</a>(ref))</div>
|
|
3028
|
+
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  {</div>
|
|
3029
|
+
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"handle select constant expression "</span> << <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getSVFValue(ref)->toString() << <span class="stringliteral">"\n"</span>);</div>
|
|
3030
|
+
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* src1 = selectce->getOperand(1);</div>
|
|
3031
|
+
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* src2 = selectce->getOperand(2);</div>
|
|
3032
|
+
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5adf8baa546292434ba1fec48db2d0a7">processCE</a>(src1);</div>
|
|
3033
|
+
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5adf8baa546292434ba1fec48db2d0a7">processCE</a>(src2);</div>
|
|
3034
|
+
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a95fd13343636bcbc18db1ef8d630c52e">getCurrentValue</a>();</div>
|
|
3035
|
+
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a6c0229120c8c96be35d2e8000b87384f">getCurrentBB</a>();</div>
|
|
3036
|
+
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(selectce, <span class="keyword">nullptr</span>);</div>
|
|
3037
|
+
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> cond = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getSVFValue(selectce->getOperand(0)));</div>
|
|
3038
|
+
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nsrc1 = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getSVFValue(src1));</div>
|
|
3039
|
+
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nsrc2 = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getSVFValue(src2));</div>
|
|
3040
|
+
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nres = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getSVFValue(selectce));</div>
|
|
3041
|
+
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5bf90e30bb591caba9ff85535e6a33f8">addSelectStmt</a>(nres,nsrc1, nsrc2, cond);</div>
|
|
3042
|
+
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(cval, cbb);</div>
|
|
3043
|
+
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  }</div>
|
|
3044
|
+
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  <span class="comment">// if we meet a int2ptr, then it points-to black hole</span></div>
|
|
3045
|
+
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>* int2Ptrce = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#adfa4a4e6d13004d14137d9168bd32463">isInt2PtrConstantExpr</a>(ref))</div>
|
|
3046
|
+
<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  {</div>
|
|
3047
|
+
<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a55d8504dbc766c4ede031299a37417ef">addGlobalBlackHoleAddrEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#afdd77bc1fca91f70b2ec362f1dacd392">getSVFValue</a>(int2Ptrce)), int2Ptrce);</div>
|
|
3048
|
+
<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  }</div>
|
|
3049
|
+
<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>* ptr2Intce = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a2834d135a2385efff783e6e22d2eff1f">isPtr2IntConstantExpr</a>(ref))</div>
|
|
3050
|
+
<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  {</div>
|
|
3051
|
+
<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* opnd = ptr2Intce->getOperand(0);</div>
|
|
3052
|
+
<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5adf8baa546292434ba1fec48db2d0a7">processCE</a>(opnd);</div>
|
|
3053
|
+
<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a6c0229120c8c96be35d2e8000b87384f">getCurrentBB</a>();</div>
|
|
3054
|
+
<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a95fd13343636bcbc18db1ef8d630c52e">getCurrentValue</a>();</div>
|
|
3055
|
+
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(ptr2Intce, <span class="keyword">nullptr</span>);</div>
|
|
3056
|
+
<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#afdd77bc1fca91f70b2ec362f1dacd392">getSVFValue</a>(opnd)), <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#afdd77bc1fca91f70b2ec362f1dacd392">getSVFValue</a>(ptr2Intce)));</div>
|
|
3057
|
+
<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(cval, cbb);</div>
|
|
3058
|
+
<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  }</div>
|
|
3059
|
+
<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a946a2b51b848c45c6c52f03581ee05b8">isTruncConstantExpr</a>(ref) || <a class="code" href="namespaceSVF_1_1LLVMUtil.html#aa0b3e34188f721ff7145e47cb607c79a">isCmpConstantExpr</a>(ref))</div>
|
|
3060
|
+
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  {</div>
|
|
3061
|
+
<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  <span class="comment">// we don't handle trunc and cmp instruction for now</span></div>
|
|
3062
|
+
<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a95fd13343636bcbc18db1ef8d630c52e">getCurrentValue</a>();</div>
|
|
3063
|
+
<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a6c0229120c8c96be35d2e8000b87384f">getCurrentBB</a>();</div>
|
|
3064
|
+
<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(ref, <span class="keyword">nullptr</span>);</div>
|
|
3065
|
+
<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getSVFValue(ref));</div>
|
|
3066
|
+
<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a8bf1847f31ff90937ce76cd0c0af7edb">addBlackHoleAddrEdge</a>(dst);</div>
|
|
3067
|
+
<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(cval, cbb);</div>
|
|
3068
|
+
<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  }</div>
|
|
3069
|
+
<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a35b36394af726c679fe2c1b6051db7c4">isBinaryConstantExpr</a>(ref))</div>
|
|
3070
|
+
<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  {</div>
|
|
3071
|
+
<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  <span class="comment">// we don't handle binary constant expression like add(x,y) now</span></div>
|
|
3072
|
+
<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a95fd13343636bcbc18db1ef8d630c52e">getCurrentValue</a>();</div>
|
|
3073
|
+
<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a6c0229120c8c96be35d2e8000b87384f">getCurrentBB</a>();</div>
|
|
3074
|
+
<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(ref, <span class="keyword">nullptr</span>);</div>
|
|
3075
|
+
<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getSVFValue(ref));</div>
|
|
3076
|
+
<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a8bf1847f31ff90937ce76cd0c0af7edb">addBlackHoleAddrEdge</a>(dst);</div>
|
|
3077
|
+
<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(cval, cbb);</div>
|
|
3078
|
+
<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  }</div>
|
|
3079
|
+
<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a215cc9fd716798bbb7f96f5b64e01349">isUnaryConstantExpr</a>(ref))</div>
|
|
3080
|
+
<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  {</div>
|
|
3081
|
+
<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  <span class="comment">// we don't handle unary constant expression like fneg(x) now</span></div>
|
|
3082
|
+
<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a95fd13343636bcbc18db1ef8d630c52e">getCurrentValue</a>();</div>
|
|
3083
|
+
<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a6c0229120c8c96be35d2e8000b87384f">getCurrentBB</a>();</div>
|
|
3084
|
+
<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(ref, <span class="keyword">nullptr</span>);</div>
|
|
3085
|
+
<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getSVFValue(ref));</div>
|
|
3086
|
+
<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a8bf1847f31ff90937ce76cd0c0af7edb">addBlackHoleAddrEdge</a>(dst);</div>
|
|
3087
|
+
<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(cval, cbb);</div>
|
|
3088
|
+
<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  }</div>
|
|
3089
|
+
<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<ConstantAggregate>(ref))</div>
|
|
3090
|
+
<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  {</div>
|
|
3091
|
+
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  <span class="comment">// we don't handle constant aggregate like constant vectors</span></div>
|
|
3092
|
+
<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  }</div>
|
|
3093
|
+
<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<BlockAddress>(ref))</div>
|
|
3094
|
+
<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  {</div>
|
|
3095
|
+
<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  <span class="comment">// blockaddress instruction (e.g. i8* blockaddress(@run_vm, %182))</span></div>
|
|
3096
|
+
<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  <span class="comment">// is treated as constant data object for now, see LLVMUtil.h:397, SymbolTableInfo.cpp:674 and SVFIRBuilder.cpp:183-194</span></div>
|
|
3097
|
+
<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a95fd13343636bcbc18db1ef8d630c52e">getCurrentValue</a>();</div>
|
|
3098
|
+
<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a6c0229120c8c96be35d2e8000b87384f">getCurrentBB</a>();</div>
|
|
3099
|
+
<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(ref, <span class="keyword">nullptr</span>);</div>
|
|
3100
|
+
<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getSVFValue(ref));</div>
|
|
3101
|
+
<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a2a0711cb1fdd3c5c90b07ff107aff1ac">addAddrEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#ac5da3a0cbe040a45d719b6f6a23aed91">getConstantNode</a>(), dst);</div>
|
|
3102
|
+
<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(cval, cbb);</div>
|
|
3103
|
+
<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  }</div>
|
|
3104
|
+
<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  <span class="keywordflow">else</span></div>
|
|
3105
|
+
<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  {</div>
|
|
3106
|
+
<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  <span class="keywordflow">if</span>(SVFUtil::isa<ConstantExpr>(val))</div>
|
|
3107
|
+
<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  assert(<span class="keyword">false</span> && <span class="stringliteral">"we don't handle all other constant expression for now!"</span>);</div>
|
|
3108
|
+
<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  }</div>
|
|
3109
|
+
<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  }</div>
|
|
3110
|
+
<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> }</div>
|
|
3107
3111
|
</div><!-- fragment -->
|
|
3108
3112
|
</div>
|
|
3109
3113
|
</div>
|
|
@@ -3124,26 +3128,26 @@ Private Attributes</h2></td></tr>
|
|
|
3124
3128
|
|
|
3125
3129
|
<p>Sanity check for <a class="el" href="classSVF_1_1SVFIR.html">SVFIR</a>. </p>
|
|
3126
3130
|
|
|
3127
|
-
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#
|
|
3128
|
-
<div class="fragment"><div class="line"><a name="
|
|
3129
|
-
<div class="line"><a name="
|
|
3130
|
-
<div class="line"><a name="
|
|
3131
|
-
<div class="line"><a name="
|
|
3132
|
-
<div class="line"><a name="
|
|
3133
|
-
<div class="line"><a name="
|
|
3134
|
-
<div class="line"><a name="
|
|
3135
|
-
<div class="line"><a name="
|
|
3136
|
-
<div class="line"><a name="
|
|
3137
|
-
<div class="line"><a name="
|
|
3138
|
-
<div class="line"><a name="
|
|
3139
|
-
<div class="line"><a name="
|
|
3140
|
-
<div class="line"><a name="
|
|
3141
|
-
<div class="line"><a name="
|
|
3142
|
-
<div class="line"><a name="
|
|
3143
|
-
<div class="line"><a name="
|
|
3144
|
-
<div class="line"><a name="
|
|
3145
|
-
<div class="line"><a name="
|
|
3146
|
-
<div class="line"><a name="
|
|
3131
|
+
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l01167">1167</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
|
|
3132
|
+
<div class="fragment"><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span> {</div>
|
|
3133
|
+
<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFIR::iterator</a> nIter = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(); nIter != <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); ++nIter)</div>
|
|
3134
|
+
<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>  {</div>
|
|
3135
|
+
<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>  (void) <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(nIter->first);</div>
|
|
3136
|
+
<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>  <span class="comment">//TODO::</span></div>
|
|
3137
|
+
<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>  <span class="comment">// (1) every source(root) node of a pag tree should be object node</span></div>
|
|
3138
|
+
<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>  <span class="comment">// if a node has no incoming edge, but has outgoing edges</span></div>
|
|
3139
|
+
<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>  <span class="comment">// then it has to be an object node.</span></div>
|
|
3140
|
+
<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>  <span class="comment">// (2) make sure every variable should be initialized</span></div>
|
|
3141
|
+
<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>  <span class="comment">// otherwise it causes the a null pointer, the aliasing relation may not be captured</span></div>
|
|
3142
|
+
<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>  <span class="comment">// when loading a pointer value should make sure</span></div>
|
|
3143
|
+
<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>  <span class="comment">// some value has been store into this pointer before</span></div>
|
|
3144
|
+
<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>  <span class="comment">// q = load p, some value should stored into p first like store w p;</span></div>
|
|
3145
|
+
<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>  <span class="comment">// (3) make sure PAGNode should not have a const expr value (pointer should have unique def)</span></div>
|
|
3146
|
+
<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>  <span class="comment">// (4) look closely into addComplexConsForExt, make sure program locations(e.g.,inst bb)</span></div>
|
|
3147
|
+
<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>  <span class="comment">// are set correctly for dummy gepval node</span></div>
|
|
3148
|
+
<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>  <span class="comment">// (5) reduce unnecessary copy edge (const casts) and ensure correctness.</span></div>
|
|
3149
|
+
<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>  }</div>
|
|
3150
|
+
<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span> }</div>
|
|
3147
3151
|
</div><!-- fragment -->
|
|
3148
3152
|
</div>
|
|
3149
3153
|
</div>
|
|
@@ -3173,83 +3177,83 @@ Private Attributes</h2></td></tr>
|
|
|
3173
3177
|
<p>We assume every <a class="el" href="classSVF_1_1GepValVar.html">GepValVar</a> and its <a class="el" href="classSVF_1_1GepStmt.html">GepStmt</a> are unique across whole program</p>
|
|
3174
3178
|
<p>We will have one unique function exit <a class="el" href="classSVF_1_1ICFGNode.html">ICFGNode</a> for all returns</p>
|
|
3175
3179
|
|
|
3176
|
-
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#
|
|
3177
|
-
<div class="fragment"><div class="line"><a name="
|
|
3178
|
-
<div class="line"><a name="
|
|
3179
|
-
<div class="line"><a name="
|
|
3180
|
-
<div class="line"><a name="
|
|
3181
|
-
<div class="line"><a name="
|
|
3182
|
-
<div class="line"><a name="
|
|
3183
|
-
<div class="line"><a name="
|
|
3184
|
-
<div class="line"><a name="
|
|
3185
|
-
<div class="line"><a name="
|
|
3186
|
-
<div class="line"><a name="
|
|
3187
|
-
<div class="line"><a name="
|
|
3188
|
-
<div class="line"><a name="
|
|
3189
|
-
<div class="line"><a name="
|
|
3190
|
-
<div class="line"><a name="
|
|
3191
|
-
<div class="line"><a name="
|
|
3192
|
-
<div class="line"><a name="
|
|
3193
|
-
<div class="line"><a name="
|
|
3194
|
-
<div class="line"><a name="
|
|
3195
|
-
<div class="line"><a name="
|
|
3196
|
-
<div class="line"><a name="
|
|
3197
|
-
<div class="line"><a name="
|
|
3198
|
-
<div class="line"><a name="
|
|
3199
|
-
<div class="line"><a name="
|
|
3200
|
-
<div class="line"><a name="
|
|
3201
|
-
<div class="line"><a name="
|
|
3202
|
-
<div class="line"><a name="
|
|
3203
|
-
<div class="line"><a name="
|
|
3204
|
-
<div class="line"><a name="
|
|
3205
|
-
<div class="line"><a name="
|
|
3206
|
-
<div class="line"><a name="
|
|
3207
|
-
<div class="line"><a name="
|
|
3208
|
-
<div class="line"><a name="
|
|
3209
|
-
<div class="line"><a name="
|
|
3210
|
-
<div class="line"><a name="
|
|
3211
|
-
<div class="line"><a name="
|
|
3212
|
-
<div class="line"><a name="
|
|
3213
|
-
<div class="line"><a name="
|
|
3214
|
-
<div class="line"><a name="
|
|
3215
|
-
<div class="line"><a name="
|
|
3216
|
-
<div class="line"><a name="
|
|
3217
|
-
<div class="line"><a name="
|
|
3218
|
-
<div class="line"><a name="
|
|
3219
|
-
<div class="line"><a name="
|
|
3220
|
-
<div class="line"><a name="
|
|
3221
|
-
<div class="line"><a name="
|
|
3222
|
-
<div class="line"><a name="
|
|
3223
|
-
<div class="line"><a name="
|
|
3224
|
-
<div class="line"><a name="
|
|
3225
|
-
<div class="line"><a name="
|
|
3226
|
-
<div class="line"><a name="
|
|
3227
|
-
<div class="line"><a name="
|
|
3228
|
-
<div class="line"><a name="
|
|
3229
|
-
<div class="line"><a name="
|
|
3230
|
-
<div class="line"><a name="
|
|
3231
|
-
<div class="line"><a name="
|
|
3232
|
-
<div class="line"><a name="
|
|
3233
|
-
<div class="line"><a name="
|
|
3234
|
-
<div class="line"><a name="
|
|
3235
|
-
<div class="line"><a name="
|
|
3236
|
-
<div class="line"><a name="
|
|
3237
|
-
<div class="line"><a name="
|
|
3238
|
-
<div class="line"><a name="
|
|
3239
|
-
<div class="line"><a name="
|
|
3240
|
-
<div class="line"><a name="
|
|
3241
|
-
<div class="line"><a name="
|
|
3242
|
-
<div class="line"><a name="
|
|
3243
|
-
<div class="line"><a name="
|
|
3244
|
-
<div class="line"><a name="
|
|
3245
|
-
<div class="line"><a name="
|
|
3246
|
-
<div class="line"><a name="
|
|
3247
|
-
<div class="line"><a name="
|
|
3248
|
-
<div class="line"><a name="
|
|
3249
|
-
<div class="line"><a name="
|
|
3250
|
-
<div class="line"><a name="
|
|
3251
|
-
<div class="line"><a name="
|
|
3252
|
-
<div class="line"><a name="
|
|
3180
|
+
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l01239">1239</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
|
|
3181
|
+
<div class="fragment"><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span> {</div>
|
|
3182
|
+
<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1SVFModule.html#a1357c876eccedd58b3abe68875b3a570">SVFModule::pagReadFromTXT</a>())</div>
|
|
3183
|
+
<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>  <span class="keywordflow">return</span>;</div>
|
|
3184
|
+
<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>  </div>
|
|
3185
|
+
<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>  assert(<a class="code" href="classSVF_1_1SVFIRBuilder.html#aefc70f2a0a2103259ae36d026cbb18be">curVal</a> && <span class="stringliteral">"current Val is nullptr?"</span>);</div>
|
|
3186
|
+
<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>  edge-><a class="code" href="classSVF_1_1SVFStmt.html#a0e45ab5b38059371c47d5f2011118a4d">setBB</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a8219f7e2581cc9974b42cf95d8318b15">curBB</a>!=<span class="keyword">nullptr</span> ? <a class="code" href="classSVF_1_1SVFIRBuilder.html#a8219f7e2581cc9974b42cf95d8318b15">curBB</a> : <span class="keyword">nullptr</span>);</div>
|
|
3187
|
+
<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>  edge-><a class="code" href="classSVF_1_1SVFStmt.html#a6ae58a22d43361904c7033f5c790da38">setValue</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#aefc70f2a0a2103259ae36d026cbb18be">curVal</a>);</div>
|
|
3188
|
+
<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>  <span class="comment">// backmap in valuToEdgeMap</span></div>
|
|
3189
|
+
<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a51201a8fce21b56e3f59a31af04c7b76">mapValueToEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#aefc70f2a0a2103259ae36d026cbb18be">curVal</a>, edge);</div>
|
|
3190
|
+
<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>  <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#ae0b05ce161d62362642803158228e5d0">getGlobalICFGNode</a>();</div>
|
|
3191
|
+
<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* curInst = SVFUtil::dyn_cast<SVFInstruction>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#aefc70f2a0a2103259ae36d026cbb18be">curVal</a>))</div>
|
|
3192
|
+
<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>  {</div>
|
|
3193
|
+
<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* srcFun = edge-><a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()->getFunction();</div>
|
|
3194
|
+
<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* dstFun = edge-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()->getFunction();</div>
|
|
3195
|
+
<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>  <span class="keywordflow">if</span>(srcFun!=<span class="keyword">nullptr</span> && !SVFUtil::isa<RetPE>(edge) && !SVFUtil::isa<SVFFunction>(edge-><a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()->getValue()))</div>
|
|
3196
|
+
<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>  {</div>
|
|
3197
|
+
<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>  assert(srcFun==curInst->getFunction() && <span class="stringliteral">"SrcNode of the PAGEdge not in the same function?"</span>);</div>
|
|
3198
|
+
<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>  }</div>
|
|
3199
|
+
<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>  <span class="keywordflow">if</span>(dstFun!=<span class="keyword">nullptr</span> && !SVFUtil::isa<CallPE>(edge) && !SVFUtil::isa<SVFFunction>(edge-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()->getValue()))</div>
|
|
3200
|
+
<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>  {</div>
|
|
3201
|
+
<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>  assert(dstFun==curInst->getFunction() && <span class="stringliteral">"DstNode of the PAGEdge not in the same function?"</span>);</div>
|
|
3202
|
+
<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>  }</div>
|
|
3203
|
+
<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>  </div>
|
|
3204
|
+
<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>  <span class="keywordflow">if</span> (!(SVFUtil::isa<GepStmt>(edge) && SVFUtil::isa<GepValVar>(edge-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>())))</div>
|
|
3205
|
+
<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>  assert(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a8219f7e2581cc9974b42cf95d8318b15">curBB</a> && <span class="stringliteral">"instruction does not have a basic block??"</span>);</div>
|
|
3206
|
+
<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>  </div>
|
|
3207
|
+
<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>  <span class="keywordflow">if</span>(curInst->isRetInst())</div>
|
|
3208
|
+
<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>  {</div>
|
|
3209
|
+
<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>  icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#af1b2d2839f811a00103df87342dfc919">getFunExitICFGNode</a>(curInst->getFunction());</div>
|
|
3210
|
+
<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>  }</div>
|
|
3211
|
+
<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>  <span class="keywordflow">else</span></div>
|
|
3212
|
+
<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>  {</div>
|
|
3213
|
+
<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>  <span class="keywordflow">if</span>(SVFUtil::isa<RetPE>(edge))</div>
|
|
3214
|
+
<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>  icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a881fe977f3a6fde223bd786121e35fcf">getRetICFGNode</a>(curInst);</div>
|
|
3215
|
+
<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>  <span class="keywordflow">else</span></div>
|
|
3216
|
+
<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>  icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(curInst);</div>
|
|
3217
|
+
<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>  }</div>
|
|
3218
|
+
<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>  }</div>
|
|
3219
|
+
<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFArgument.html">SVFArgument</a>* arg = SVFUtil::dyn_cast<SVFArgument>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#aefc70f2a0a2103259ae36d026cbb18be">curVal</a>))</div>
|
|
3220
|
+
<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>  {</div>
|
|
3221
|
+
<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>  assert(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a8219f7e2581cc9974b42cf95d8318b15">curBB</a> && (<a class="code" href="classSVF_1_1SVFIRBuilder.html#a8219f7e2581cc9974b42cf95d8318b15">curBB</a>-><a class="code" href="classSVF_1_1SVFBasicBlock.html#af48d08d3adf7dd3ed69d97e4df360059">getParent</a>()-><a class="code" href="classSVF_1_1SVFFunction.html#a793f485e92d12cf407f2ffa41861eb3d">getEntryBlock</a>() == <a class="code" href="classSVF_1_1SVFIRBuilder.html#a8219f7e2581cc9974b42cf95d8318b15">curBB</a>));</div>
|
|
3222
|
+
<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>  icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a0dca4655c2f6112a5be1f921b8e81076">getFunEntryICFGNode</a>(arg->getParent());</div>
|
|
3223
|
+
<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>  }</div>
|
|
3224
|
+
<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<SVFConstant>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#aefc70f2a0a2103259ae36d026cbb18be">curVal</a>) ||</div>
|
|
3225
|
+
<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>  SVFUtil::isa<SVFFunction>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#aefc70f2a0a2103259ae36d026cbb18be">curVal</a>) ||</div>
|
|
3226
|
+
<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>  SVFUtil::isa<SVFMetadataAsValue>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#aefc70f2a0a2103259ae36d026cbb18be">curVal</a>))</div>
|
|
3227
|
+
<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>  {</div>
|
|
3228
|
+
<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>  <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1SVFIRBuilder.html#a8219f7e2581cc9974b42cf95d8318b15">curBB</a>)</div>
|
|
3229
|
+
<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#ae3d9b4acb63a7dbe316e87bad4e3987a">addGlobalPAGEdge</a>(edge);</div>
|
|
3230
|
+
<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>  <span class="keywordflow">else</span></div>
|
|
3231
|
+
<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>  {</div>
|
|
3232
|
+
<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>  icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a8219f7e2581cc9974b42cf95d8318b15">curBB</a>-><a class="code" href="classSVF_1_1SVFBasicBlock.html#a7bde256bc906af7f7204929019f4a33e">front</a>());</div>
|
|
3233
|
+
<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>  }</div>
|
|
3234
|
+
<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>  }</div>
|
|
3235
|
+
<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>  <span class="keywordflow">else</span></div>
|
|
3236
|
+
<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>  {</div>
|
|
3237
|
+
<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>  assert(<span class="keyword">false</span> && <span class="stringliteral">"what else value can we have?"</span>);</div>
|
|
3238
|
+
<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>  }</div>
|
|
3239
|
+
<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>  </div>
|
|
3240
|
+
<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a6a84868ab4e2845e884fba08d82b40f6">addToSVFStmtList</a>(icfgNode,edge);</div>
|
|
3241
|
+
<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>  icfgNode-><a class="code" href="classSVF_1_1ICFGNode.html#a8a133398c691ab3639ceefbc57cd33be">addSVFStmt</a>(edge);</div>
|
|
3242
|
+
<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallPE.html">CallPE</a>* callPE = SVFUtil::dyn_cast<CallPE>(edge))</div>
|
|
3243
|
+
<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>  {</div>
|
|
3244
|
+
<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>  <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callNode = <span class="keyword">const_cast<</span><a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>*<span class="keyword">></span>(callPE->getCallSite());</div>
|
|
3245
|
+
<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>  <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>* entryNode = <span class="keyword">const_cast<</span><a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>*<span class="keyword">></span>(callPE->getFunEntryICFGNode());</div>
|
|
3246
|
+
<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1ICFGEdge.html">ICFGEdge</a>* edge = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a86535e50d1feba706b19491d905baef1">hasInterICFGEdge</a>(callNode,entryNode, <a class="code" href="classSVF_1_1ICFGEdge.html#a395c34788e98950bc43e8cb44313e429a3486c9d9a182f2ba5d986fe74439ec2e">ICFGEdge::CallCF</a>))</div>
|
|
3247
|
+
<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>  SVFUtil::cast<CallCFGEdge>(edge)->addCallPE(callPE);</div>
|
|
3248
|
+
<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>  }</div>
|
|
3249
|
+
<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1RetPE.html">RetPE</a>* retPE = SVFUtil::dyn_cast<RetPE>(edge))</div>
|
|
3250
|
+
<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>  {</div>
|
|
3251
|
+
<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>  <a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a>* retNode = <span class="keyword">const_cast<</span><a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a>*<span class="keyword">></span>(retPE->getCallSite()->getRetICFGNode());</div>
|
|
3252
|
+
<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>  <a class="code" href="classSVF_1_1FunExitICFGNode.html">FunExitICFGNode</a>* exitNode = <span class="keyword">const_cast<</span><a class="code" href="classSVF_1_1FunExitICFGNode.html">FunExitICFGNode</a>*<span class="keyword">></span>(retPE->getFunExitICFGNode());</div>
|
|
3253
|
+
<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1ICFGEdge.html">ICFGEdge</a>* edge = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a86535e50d1feba706b19491d905baef1">hasInterICFGEdge</a>(exitNode, retNode, <a class="code" href="classSVF_1_1ICFGEdge.html#a395c34788e98950bc43e8cb44313e429ad2370a77f6cc112b8c26efbcc36bf541">ICFGEdge::RetCF</a>))</div>
|
|
3254
|
+
<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>  SVFUtil::cast<RetCFGEdge>(edge)->addRetPE(retPE);</div>
|
|
3255
|
+
<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>  }</div>
|
|
3256
|
+
<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span> }</div>
|
|
3253
3257
|
</div><!-- fragment -->
|
|
3254
3258
|
</div>
|
|
3255
3259
|
</div>
|
|
@@ -3357,38 +3361,38 @@ Private Attributes</h2></td></tr>
|
|
|
3357
3361
|
|
|
3358
3362
|
<p>connect PAG edges based on callgraph </p>
|
|
3359
3363
|
|
|
3360
|
-
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#
|
|
3361
|
-
<div class="fragment"><div class="line"><a name="
|
|
3362
|
-
<div class="line"><a name="
|
|
3363
|
-
<div class="line"><a name="
|
|
3364
|
-
<div class="line"><a name="
|
|
3365
|
-
<div class="line"><a name="
|
|
3366
|
-
<div class="line"><a name="
|
|
3367
|
-
<div class="line"><a name="
|
|
3368
|
-
<div class="line"><a name="
|
|
3369
|
-
<div class="line"><a name="
|
|
3370
|
-
<div class="line"><a name="
|
|
3371
|
-
<div class="line"><a name="
|
|
3372
|
-
<div class="line"><a name="
|
|
3373
|
-
<div class="line"><a name="
|
|
3374
|
-
<div class="line"><a name="
|
|
3375
|
-
<div class="line"><a name="
|
|
3376
|
-
<div class="line"><a name="
|
|
3377
|
-
<div class="line"><a name="
|
|
3378
|
-
<div class="line"><a name="
|
|
3379
|
-
<div class="line"><a name="
|
|
3380
|
-
<div class="line"><a name="
|
|
3381
|
-
<div class="line"><a name="
|
|
3382
|
-
<div class="line"><a name="
|
|
3383
|
-
<div class="line"><a name="
|
|
3384
|
-
<div class="line"><a name="
|
|
3385
|
-
<div class="line"><a name="
|
|
3386
|
-
<div class="line"><a name="
|
|
3387
|
-
<div class="line"><a name="
|
|
3388
|
-
<div class="line"><a name="
|
|
3389
|
-
<div class="line"><a name="
|
|
3390
|
-
<div class="line"><a name="
|
|
3391
|
-
<div class="line"><a name="
|
|
3364
|
+
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l01131">1131</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
|
|
3365
|
+
<div class="fragment"><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span> {</div>
|
|
3366
|
+
<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>  PTACallGraph::CallEdgeMap::const_iterator iter = callgraph-><a class="code" href="classSVF_1_1PTACallGraph.html#ad49fa2a288945f6910deb11acdf6a42d">getIndCallMap</a>().begin();</div>
|
|
3367
|
+
<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>  PTACallGraph::CallEdgeMap::const_iterator eiter = callgraph-><a class="code" href="classSVF_1_1PTACallGraph.html#ad49fa2a288945f6910deb11acdf6a42d">getIndCallMap</a>().end();</div>
|
|
3368
|
+
<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>  <span class="keywordflow">for</span> (; iter != eiter; iter++)</div>
|
|
3369
|
+
<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>  {</div>
|
|
3370
|
+
<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callBlock = iter->first;</div>
|
|
3371
|
+
<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* callbase = SVFUtil::cast<CallBase>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getLLVMValue(callBlock-><a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>()));</div>
|
|
3372
|
+
<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>  assert(callBlock-><a class="code" href="classSVF_1_1CallICFGNode.html#aa11226a2e4fa6a7b1d78006cc8ca0518">isIndirectCall</a>() && <span class="stringliteral">"this is not an indirect call?"</span>);</div>
|
|
3373
|
+
<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PTACallGraph.html#a5f5a5ec7e707a21994d301cc07d32a5a">PTACallGraph::FunctionSet</a>& functions = iter->second;</div>
|
|
3374
|
+
<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>  <span class="keywordflow">for</span> (PTACallGraph::FunctionSet::const_iterator func_iter = functions.begin(); func_iter != functions.end(); func_iter++)</div>
|
|
3375
|
+
<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>  {</div>
|
|
3376
|
+
<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* callee = SVFUtil::cast<Function>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getLLVMValue(*func_iter));</div>
|
|
3377
|
+
<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>  </div>
|
|
3378
|
+
<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(*func_iter))</div>
|
|
3379
|
+
<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>  {</div>
|
|
3380
|
+
<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(callee, callee->empty() ? <span class="keyword">nullptr</span> : &callee->getEntryBlock());</div>
|
|
3381
|
+
<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svfcallee = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#a50fc24901350df9db890ba16a9b87e33">getSVFFunction</a>(callee);</div>
|
|
3382
|
+
<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a8b664a9d689562bd857f056e6e08c59b">handleExtCall</a>(callbase, svfcallee);</div>
|
|
3383
|
+
<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>  }</div>
|
|
3384
|
+
<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>  <span class="keywordflow">else</span></div>
|
|
3385
|
+
<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>  {</div>
|
|
3386
|
+
<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(callBlock-><a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>(), callBlock-><a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>()-><a class="code" href="classSVF_1_1SVFInstruction.html#ae009f41cbf48d949d4325e08fe8d7198">getParent</a>());</div>
|
|
3387
|
+
<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a3ccc53ca9a6862674ee2ec3bd67aa515">handleDirectCall</a>(<span class="keyword">const_cast<</span><a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>*<span class="keyword">></span>(callbase), callee);</div>
|
|
3388
|
+
<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>  }</div>
|
|
3389
|
+
<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>  }</div>
|
|
3390
|
+
<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>  }</div>
|
|
3391
|
+
<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>  </div>
|
|
3392
|
+
<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>  <span class="comment">// dump SVFIR</span></div>
|
|
3393
|
+
<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a1dd9ad3f11454be49b4c5099503db8e8">Options::PAGDotGraph</a>())</div>
|
|
3394
|
+
<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a1cb32461439c4dc8d044c2bfadb11307">dump</a>(<span class="stringliteral">"svfir_final"</span>);</div>
|
|
3395
|
+
<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span> }</div>
|
|
3392
3396
|
</div><!-- fragment -->
|
|
3393
3397
|
</div>
|
|
3394
3398
|
</div>
|
|
@@ -3419,20 +3423,20 @@ Private Attributes</h2></td></tr>
|
|
|
3419
3423
|
<p>Our visit overrides. </p>
|
|
3420
3424
|
<p>Visit alloca instructions Add edge V (dst) <– O (src), V here is a value node on <a class="el" href="classSVF_1_1SVFIR.html">SVFIR</a>, O is object node on <a class="el" href="classSVF_1_1SVFIR.html">SVFIR</a> </p>
|
|
3421
3425
|
|
|
3422
|
-
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#
|
|
3423
|
-
<div class="fragment"><div class="line"><a name="
|
|
3424
|
-
<div class="line"><a name="
|
|
3425
|
-
<div class="line"><a name="
|
|
3426
|
-
<div class="line"><a name="
|
|
3427
|
-
<div class="line"><a name="
|
|
3428
|
-
<div class="line"><a name="
|
|
3429
|
-
<div class="line"><a name="
|
|
3430
|
-
<div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  </div>
|
|
3431
|
-
<div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5a93f3d13e2b3df126fbc42b1bd09006">getObjectNode</a>(&inst);</div>
|
|
3426
|
+
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00621">621</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
|
|
3427
|
+
<div class="fragment"><div class="line"><a name="l00622"></a><span class="lineno"> 622</span> {</div>
|
|
3428
|
+
<div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  </div>
|
|
3429
|
+
<div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  <span class="comment">// AllocaInst should always be a pointer type</span></div>
|
|
3430
|
+
<div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  assert(SVFUtil::isa<PointerType>(inst.getType()));</div>
|
|
3431
|
+
<div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  </div>
|
|
3432
|
+
<div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"process alloca "</span> << <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getSVFValue(&inst)->toString() << <span class="stringliteral">" \n"</span>);</div>
|
|
3433
|
+
<div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&inst);</div>
|
|
3432
3434
|
<div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  </div>
|
|
3433
|
-
<div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#
|
|
3435
|
+
<div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5a93f3d13e2b3df126fbc42b1bd09006">getObjectNode</a>(&inst);</div>
|
|
3434
3436
|
<div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  </div>
|
|
3435
|
-
<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> 
|
|
3437
|
+
<div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a2a0711cb1fdd3c5c90b07ff107aff1ac">addAddrEdge</a>(src, dst);</div>
|
|
3438
|
+
<div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  </div>
|
|
3439
|
+
<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> }</div>
|
|
3436
3440
|
</div><!-- fragment -->
|
|
3437
3441
|
</div>
|
|
3438
3442
|
</div>
|
|
@@ -3515,17 +3519,17 @@ Private Attributes</h2></td></tr>
|
|
|
3515
3519
|
</div><div class="memdoc">
|
|
3516
3520
|
<p>Visit Binary Operator </p>
|
|
3517
3521
|
|
|
3518
|
-
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#
|
|
3519
|
-
<div class="fragment"><div class="line"><a name="
|
|
3520
|
-
<div class="line"><a name="
|
|
3521
|
-
<div class="line"><a name="
|
|
3522
|
-
<div class="line"><a name="
|
|
3523
|
-
<div class="line"><a name="
|
|
3524
|
-
<div class="line"><a name="
|
|
3525
|
-
<div class="line"><a name="
|
|
3526
|
-
<div class="line"><a name="
|
|
3527
|
-
<div class="line"><a name="
|
|
3528
|
-
<div class="line"><a name="
|
|
3522
|
+
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00747">747</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
|
|
3523
|
+
<div class="fragment"><div class="line"><a name="l00748"></a><span class="lineno"> 748</span> {</div>
|
|
3524
|
+
<div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&inst);</div>
|
|
3525
|
+
<div class="line"><a name="l00750"></a><span class="lineno"> 750</span>  assert(inst.getNumOperands() == 2 && <span class="stringliteral">"not two operands for BinaryOperator?"</span>);</div>
|
|
3526
|
+
<div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* op1 = inst.getOperand(0);</div>
|
|
3527
|
+
<div class="line"><a name="l00752"></a><span class="lineno"> 752</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op1Node = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(op1);</div>
|
|
3528
|
+
<div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* op2 = inst.getOperand(1);</div>
|
|
3529
|
+
<div class="line"><a name="l00754"></a><span class="lineno"> 754</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op2Node = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(op2);</div>
|
|
3530
|
+
<div class="line"><a name="l00755"></a><span class="lineno"> 755</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> opcode = inst.getOpcode();</div>
|
|
3531
|
+
<div class="line"><a name="l00756"></a><span class="lineno"> 756</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a3f954c61381fe31088e791772c334105">addBinaryOPEdge</a>(op1Node, op2Node, dst, opcode);</div>
|
|
3532
|
+
<div class="line"><a name="l00757"></a><span class="lineno"> 757</span> }</div>
|
|
3529
3533
|
</div><!-- fragment -->
|
|
3530
3534
|
</div>
|
|
3531
3535
|
</div>
|
|
@@ -3546,27 +3550,27 @@ Private Attributes</h2></td></tr>
|
|
|
3546
3550
|
</div><div class="memdoc">
|
|
3547
3551
|
<p>Branch and switch instructions are treated as UnaryOP br cmp label if.then, label if.else </p>
|
|
3548
3552
|
|
|
3549
|
-
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#
|
|
3550
|
-
<div class="fragment"><div class="line"><a name="
|
|
3551
|
-
<div class="line"><a name="
|
|
3552
|
-
<div class="line"><a name="
|
|
3553
|
-
<div class="line"><a name="
|
|
3554
|
-
<div class="line"><a name="
|
|
3555
|
-
<div class="line"><a name="
|
|
3556
|
-
<div class="line"><a name="
|
|
3557
|
-
<div class="line"><a name="l00929"></a><span class="lineno"> 929</span>  </div>
|
|
3558
|
-
<div class="line"><a name="l00930"></a><span class="lineno"> 930</span>  assert(inst.getNumSuccessors() <= 2 && <span class="stringliteral">"if/else has more than two branches?"</span>);</div>
|
|
3553
|
+
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00923">923</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
|
|
3554
|
+
<div class="fragment"><div class="line"><a name="l00924"></a><span class="lineno"> 924</span> {</div>
|
|
3555
|
+
<div class="line"><a name="l00925"></a><span class="lineno"> 925</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> brinst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&inst);</div>
|
|
3556
|
+
<div class="line"><a name="l00926"></a><span class="lineno"> 926</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> cond;</div>
|
|
3557
|
+
<div class="line"><a name="l00927"></a><span class="lineno"> 927</span>  <span class="keywordflow">if</span> (inst.isConditional())</div>
|
|
3558
|
+
<div class="line"><a name="l00928"></a><span class="lineno"> 928</span>  cond = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst.getCondition());</div>
|
|
3559
|
+
<div class="line"><a name="l00929"></a><span class="lineno"> 929</span>  <span class="keywordflow">else</span></div>
|
|
3560
|
+
<div class="line"><a name="l00930"></a><span class="lineno"> 930</span>  cond = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a3de9a2a565c303f68a90c32dc59febd5">getNullPtr</a>();</div>
|
|
3559
3561
|
<div class="line"><a name="l00931"></a><span class="lineno"> 931</span>  </div>
|
|
3560
|
-
<div class="line"><a name="l00932"></a><span class="lineno"> 932</span>  <
|
|
3561
|
-
<div class="line"><a name="l00933"></a><span class="lineno"> 933</span> 
|
|
3562
|
-
<div class="line"><a name="l00934"></a><span class="lineno"> 934</span> 
|
|
3563
|
-
<div class="line"><a name="l00935"></a><span class="lineno"> 935</span> 
|
|
3564
|
-
<div class="line"><a name="l00936"></a><span class="lineno"> 936</span> 
|
|
3565
|
-
<div class="line"><a name="l00937"></a><span class="lineno"> 937</span>  <span class="keyword">const</span> <a class="code" href="
|
|
3566
|
-
<div class="line"><a name="l00938"></a><span class="lineno"> 938</span> 
|
|
3567
|
-
<div class="line"><a name="l00939"></a><span class="lineno"> 939</span> 
|
|
3568
|
-
<div class="line"><a name="l00940"></a><span class="lineno"> 940</span> 
|
|
3569
|
-
<div class="line"><a name="l00941"></a><span class="lineno"> 941</span> }</div>
|
|
3562
|
+
<div class="line"><a name="l00932"></a><span class="lineno"> 932</span>  assert(inst.getNumSuccessors() <= 2 && <span class="stringliteral">"if/else has more than two branches?"</span>);</div>
|
|
3563
|
+
<div class="line"><a name="l00933"></a><span class="lineno"> 933</span>  </div>
|
|
3564
|
+
<div class="line"><a name="l00934"></a><span class="lineno"> 934</span>  <a class="code" href="classSVF_1_1BranchStmt.html#a6a0e64824777f04be4c169125dd4f666">BranchStmt::SuccAndCondPairVec</a> successors;</div>
|
|
3565
|
+
<div class="line"><a name="l00935"></a><span class="lineno"> 935</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i < inst.getNumSuccessors(); ++i)</div>
|
|
3566
|
+
<div class="line"><a name="l00936"></a><span class="lineno"> 936</span>  {</div>
|
|
3567
|
+
<div class="line"><a name="l00937"></a><span class="lineno"> 937</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* succInst = &inst.getSuccessor(i)->front();</div>
|
|
3568
|
+
<div class="line"><a name="l00938"></a><span class="lineno"> 938</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfSuccInst = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#ae74f307b6f96950ceedb2c375ef1c3a3">getSVFInstruction</a>(succInst);</div>
|
|
3569
|
+
<div class="line"><a name="l00939"></a><span class="lineno"> 939</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(svfSuccInst);</div>
|
|
3570
|
+
<div class="line"><a name="l00940"></a><span class="lineno"> 940</span>  successors.push_back(std::make_pair(icfgNode, 1-i));</div>
|
|
3571
|
+
<div class="line"><a name="l00941"></a><span class="lineno"> 941</span>  }</div>
|
|
3572
|
+
<div class="line"><a name="l00942"></a><span class="lineno"> 942</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5e56beb1a362b6e596183b04d37fd9e0">addBranchStmt</a>(brinst, cond,successors);</div>
|
|
3573
|
+
<div class="line"><a name="l00943"></a><span class="lineno"> 943</span> }</div>
|
|
3570
3574
|
</div><!-- fragment -->
|
|
3571
3575
|
</div>
|
|
3572
3576
|
</div>
|
|
@@ -3586,10 +3590,10 @@ Private Attributes</h2></td></tr>
|
|
|
3586
3590
|
</table>
|
|
3587
3591
|
</div><div class="memdoc">
|
|
3588
3592
|
|
|
3589
|
-
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#
|
|
3590
|
-
<div class="fragment"><div class="line"><a name="
|
|
3591
|
-
<div class="line"><a name="
|
|
3592
|
-
<div class="line"><a name="
|
|
3593
|
+
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00814">814</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
|
|
3594
|
+
<div class="fragment"><div class="line"><a name="l00815"></a><span class="lineno"> 815</span> {</div>
|
|
3595
|
+
<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5aa87f9ea35b30b4b4797f8a7f9f293c">visitCallSite</a>(&i);</div>
|
|
3596
|
+
<div class="line"><a name="l00817"></a><span class="lineno"> 817</span> }</div>
|
|
3593
3597
|
</div><!-- fragment -->
|
|
3594
3598
|
</div>
|
|
3595
3599
|
</div>
|
|
@@ -3609,10 +3613,10 @@ Private Attributes</h2></td></tr>
|
|
|
3609
3613
|
</table>
|
|
3610
3614
|
</div><div class="memdoc">
|
|
3611
3615
|
|
|
3612
|
-
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#
|
|
3613
|
-
<div class="fragment"><div class="line"><a name="
|
|
3614
|
-
<div class="line"><a name="
|
|
3615
|
-
<div class="line"><a name="
|
|
3616
|
+
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00804">804</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
|
|
3617
|
+
<div class="fragment"><div class="line"><a name="l00805"></a><span class="lineno"> 805</span> {</div>
|
|
3618
|
+
<div class="line"><a name="l00806"></a><span class="lineno"> 806</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5aa87f9ea35b30b4b4797f8a7f9f293c">visitCallSite</a>(&i);</div>
|
|
3619
|
+
<div class="line"><a name="l00807"></a><span class="lineno"> 807</span> }</div>
|
|
3616
3620
|
</div><!-- fragment -->
|
|
3617
3621
|
</div>
|
|
3618
3622
|
</div>
|
|
@@ -3633,48 +3637,48 @@ Private Attributes</h2></td></tr>
|
|
|
3633
3637
|
</div><div class="memdoc">
|
|
3634
3638
|
<p>Collect callsite arguments and returns</p>
|
|
3635
3639
|
|
|
3636
|
-
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#
|
|
3637
|
-
<div class="fragment"><div class="line"><a name="
|
|
3638
|
-
<div class="line"><a name="
|
|
3639
|
-
<div class="line"><a name="
|
|
3640
|
-
<div class="line"><a name="
|
|
3641
|
-
<div class="line"><a name="
|
|
3642
|
-
<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>  </div>
|
|
3643
|
-
<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfcall = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#ae74f307b6f96950ceedb2c375ef1c3a3">getSVFInstruction</a>(cs);</div>
|
|
3640
|
+
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00822">822</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
|
|
3641
|
+
<div class="fragment"><div class="line"><a name="l00823"></a><span class="lineno"> 823</span> {</div>
|
|
3642
|
+
<div class="line"><a name="l00824"></a><span class="lineno"> 824</span>  </div>
|
|
3643
|
+
<div class="line"><a name="l00825"></a><span class="lineno"> 825</span>  <span class="comment">// skip llvm intrinsics</span></div>
|
|
3644
|
+
<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>  <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a003b769751b93b94bdb011bd704cfde1">isIntrinsicInst</a>(cs))</div>
|
|
3645
|
+
<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  <span class="keywordflow">return</span>;</div>
|
|
3644
3646
|
<div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  </div>
|
|
3645
|
-
<div class="line"><a name="l00829"></a><span class="lineno"> 829</span>  <a class="code" href="
|
|
3646
|
-
<div class="line"><a name="l00830"></a><span class="lineno"> 830</span> 
|
|
3647
|
-
<div class="line"><a name="l00831"></a><span class="lineno"> 831</span>  </div>
|
|
3648
|
-
<div class="line"><a name="l00832"></a><span class="lineno"> 832</span> 
|
|
3649
|
-
<div class="line"><a name="l00833"></a><span class="lineno"> 833</span> 
|
|
3650
|
-
<div class="line"><a name="l00834"></a><span class="lineno"> 834</span>  </div>
|
|
3651
|
-
<div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#
|
|
3647
|
+
<div class="line"><a name="l00829"></a><span class="lineno"> 829</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfcall = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#ae74f307b6f96950ceedb2c375ef1c3a3">getSVFInstruction</a>(cs);</div>
|
|
3648
|
+
<div class="line"><a name="l00830"></a><span class="lineno"> 830</span>  </div>
|
|
3649
|
+
<div class="line"><a name="l00831"></a><span class="lineno"> 831</span>  <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>,</div>
|
|
3650
|
+
<div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"process callsite "</span> << svfcall-><a class="code" href="classSVF_1_1SVFValue.html#a4a0cfe3a8f37d33ffcdca3d66026dcc3">toString</a>() << <span class="stringliteral">"\n"</span>);</div>
|
|
3651
|
+
<div class="line"><a name="l00833"></a><span class="lineno"> 833</span>  </div>
|
|
3652
|
+
<div class="line"><a name="l00834"></a><span class="lineno"> 834</span>  <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callBlockNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#aa41516cdd2be5066adf22798a4fe2213">getCallICFGNode</a>(svfcall);</div>
|
|
3653
|
+
<div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  <a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a>* retBlockNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a881fe977f3a6fde223bd786121e35fcf">getRetICFGNode</a>(svfcall);</div>
|
|
3652
3654
|
<div class="line"><a name="l00836"></a><span class="lineno"> 836</span>  </div>
|
|
3653
|
-
<div class="line"><a name="
|
|
3654
|
-
<div class="line"><a name="
|
|
3655
|
-
<div class="line"><a name="l00840"></a><span class="lineno"> 840</span>  </div>
|
|
3656
|
-
<div class="line"><a name="l00841"></a><span class="lineno"> 841</span> 
|
|
3657
|
-
<div class="line"><a name="l00842"></a><span class="lineno"> 842</span> 
|
|
3658
|
-
<div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  </div>
|
|
3659
|
-
<div class="line"><a name="l00844"></a><span class="lineno"> 844</span> 
|
|
3660
|
-
<div class="line"><a name="l00845"></a><span class="lineno"> 845</span> 
|
|
3661
|
-
<div class="line"><a name="l00846"></a><span class="lineno"> 846</span> 
|
|
3662
|
-
<div class="line"><a name="l00847"></a><span class="lineno"> 847</span> 
|
|
3663
|
-
<div class="line"><a name="l00848"></a><span class="lineno"> 848</span> 
|
|
3664
|
-
<div class="line"><a name="l00849"></a><span class="lineno"> 849</span> 
|
|
3665
|
-
<div class="line"><a name="l00850"></a><span class="lineno"> 850</span> 
|
|
3666
|
-
<div class="line"><a name="l00851"></a><span class="lineno"> 851</span> 
|
|
3667
|
-
<div class="line"><a name="l00852"></a><span class="lineno"> 852</span> 
|
|
3668
|
-
<div class="line"><a name="l00853"></a><span class="lineno"> 853</span> 
|
|
3669
|
-
<div class="line"><a name="l00854"></a><span class="lineno"> 854</span> 
|
|
3670
|
-
<div class="line"><a name="l00855"></a><span class="lineno"> 855</span> 
|
|
3671
|
-
<div class="line"><a name="l00856"></a><span class="lineno"> 856</span> 
|
|
3672
|
-
<div class="line"><a name="l00857"></a><span class="lineno"> 857</span> 
|
|
3673
|
-
<div class="line"><a name="l00858"></a><span class="lineno"> 858</span> 
|
|
3674
|
-
<div class="line"><a name="l00859"></a><span class="lineno"> 859</span> 
|
|
3675
|
-
<div class="line"><a name="l00860"></a><span class="lineno"> 860</span> 
|
|
3676
|
-
<div class="line"><a name="l00861"></a><span class="lineno"> 861</span> 
|
|
3677
|
-
<div class="line"><a name="l00862"></a><span class="lineno"> 862</span> 
|
|
3655
|
+
<div class="line"><a name="l00837"></a><span class="lineno"> 837</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a98341496bf470d23384f3d86a58591db">addCallSite</a>(callBlockNode);</div>
|
|
3656
|
+
<div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  </div>
|
|
3657
|
+
<div class="line"><a name="l00840"></a><span class="lineno"> 840</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i < cs->arg_size(); i++)</div>
|
|
3658
|
+
<div class="line"><a name="l00841"></a><span class="lineno"> 841</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a69963e4030433103e84e57fc015871d8">addCallSiteArgs</a>(callBlockNode,<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs->getArgOperand(i))));</div>
|
|
3659
|
+
<div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  </div>
|
|
3660
|
+
<div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  <span class="keywordflow">if</span>(!cs->getType()->isVoidTy())</div>
|
|
3661
|
+
<div class="line"><a name="l00844"></a><span class="lineno"> 844</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a72efebdfe007ec8c515967ede76b6ce0">addCallSiteRets</a>(retBlockNode,<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs)));</div>
|
|
3662
|
+
<div class="line"><a name="l00845"></a><span class="lineno"> 845</span>  </div>
|
|
3663
|
+
<div class="line"><a name="l00846"></a><span class="lineno"> 846</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *callee = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#ad56c48be3ba6ebb95416623256524097">LLVMUtil::getCallee</a>(cs))</div>
|
|
3664
|
+
<div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  {</div>
|
|
3665
|
+
<div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  callee = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a3d34fcdfc98add848a34fd5259c11eb2">LLVMUtil::getDefFunForMultipleModule</a>(callee);</div>
|
|
3666
|
+
<div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svfcallee = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#a50fc24901350df9db890ba16a9b87e33">getSVFFunction</a>(callee);</div>
|
|
3667
|
+
<div class="line"><a name="l00850"></a><span class="lineno"> 850</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(svfcallee))</div>
|
|
3668
|
+
<div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  {</div>
|
|
3669
|
+
<div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a8b664a9d689562bd857f056e6e08c59b">handleExtCall</a>(cs, svfcallee);</div>
|
|
3670
|
+
<div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  }</div>
|
|
3671
|
+
<div class="line"><a name="l00854"></a><span class="lineno"> 854</span>  <span class="keywordflow">else</span></div>
|
|
3672
|
+
<div class="line"><a name="l00855"></a><span class="lineno"> 855</span>  {</div>
|
|
3673
|
+
<div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a3ccc53ca9a6862674ee2ec3bd67aa515">handleDirectCall</a>(cs, callee);</div>
|
|
3674
|
+
<div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  }</div>
|
|
3675
|
+
<div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  }</div>
|
|
3676
|
+
<div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  <span class="keywordflow">else</span></div>
|
|
3677
|
+
<div class="line"><a name="l00860"></a><span class="lineno"> 860</span>  {</div>
|
|
3678
|
+
<div class="line"><a name="l00861"></a><span class="lineno"> 861</span>  <span class="comment">//If the callee was not identified as a function (null F), this is indirect.</span></div>
|
|
3679
|
+
<div class="line"><a name="l00862"></a><span class="lineno"> 862</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5ae68d4465feb54fcb8fd0cf20b7a71a">handleIndCall</a>(cs);</div>
|
|
3680
|
+
<div class="line"><a name="l00863"></a><span class="lineno"> 863</span>  }</div>
|
|
3681
|
+
<div class="line"><a name="l00864"></a><span class="lineno"> 864</span> }</div>
|
|
3678
3682
|
</div><!-- fragment -->
|
|
3679
3683
|
</div>
|
|
3680
3684
|
</div>
|
|
@@ -3694,26 +3698,26 @@ Private Attributes</h2></td></tr>
|
|
|
3694
3698
|
</table>
|
|
3695
3699
|
</div><div class="memdoc">
|
|
3696
3700
|
|
|
3697
|
-
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#
|
|
3698
|
-
<div class="fragment"><div class="line"><a name="
|
|
3699
|
-
<div class="line"><a name="
|
|
3700
|
-
<div class="line"><a name="
|
|
3701
|
-
<div class="line"><a name="
|
|
3702
|
-
<div class="line"><a name="
|
|
3703
|
-
<div class="line"><a name="
|
|
3704
|
-
<div class="line"><a name="
|
|
3705
|
-
<div class="line"><a name="
|
|
3706
|
-
<div class="line"><a name="
|
|
3707
|
-
<div class="line"><a name="
|
|
3708
|
-
<div class="line"><a name="
|
|
3709
|
-
<div class="line"><a name="
|
|
3710
|
-
<div class="line"><a name="
|
|
3711
|
-
<div class="line"><a name="
|
|
3712
|
-
<div class="line"><a name="
|
|
3713
|
-
<div class="line"><a name="
|
|
3714
|
-
<div class="line"><a name="
|
|
3715
|
-
<div class="line"><a name="
|
|
3716
|
-
<div class="line"><a name="
|
|
3701
|
+
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00723">723</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
|
|
3702
|
+
<div class="fragment"><div class="line"><a name="l00724"></a><span class="lineno"> 724</span> {</div>
|
|
3703
|
+
<div class="line"><a name="l00725"></a><span class="lineno"> 725</span>  </div>
|
|
3704
|
+
<div class="line"><a name="l00726"></a><span class="lineno"> 726</span>  <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"process cast "</span> << <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getSVFValue(&inst)->toString() << <span class="stringliteral">" \n"</span>);</div>
|
|
3705
|
+
<div class="line"><a name="l00727"></a><span class="lineno"> 727</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&inst);</div>
|
|
3706
|
+
<div class="line"><a name="l00728"></a><span class="lineno"> 728</span>  </div>
|
|
3707
|
+
<div class="line"><a name="l00729"></a><span class="lineno"> 729</span>  <span class="keywordflow">if</span> (SVFUtil::isa<IntToPtrInst>(&inst))</div>
|
|
3708
|
+
<div class="line"><a name="l00730"></a><span class="lineno"> 730</span>  {</div>
|
|
3709
|
+
<div class="line"><a name="l00731"></a><span class="lineno"> 731</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a8bf1847f31ff90937ce76cd0c0af7edb">addBlackHoleAddrEdge</a>(dst);</div>
|
|
3710
|
+
<div class="line"><a name="l00732"></a><span class="lineno"> 732</span>  }</div>
|
|
3711
|
+
<div class="line"><a name="l00733"></a><span class="lineno"> 733</span>  <span class="keywordflow">else</span></div>
|
|
3712
|
+
<div class="line"><a name="l00734"></a><span class="lineno"> 734</span>  {</div>
|
|
3713
|
+
<div class="line"><a name="l00735"></a><span class="lineno"> 735</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* opnd = inst.getOperand(0);</div>
|
|
3714
|
+
<div class="line"><a name="l00736"></a><span class="lineno"> 736</span>  <span class="keywordflow">if</span> (!SVFUtil::isa<PointerType>(opnd->getType()))</div>
|
|
3715
|
+
<div class="line"><a name="l00737"></a><span class="lineno"> 737</span>  opnd = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a38ce45ae5f017c90115ce444b44d478c">stripAllCasts</a>(opnd);</div>
|
|
3716
|
+
<div class="line"><a name="l00738"></a><span class="lineno"> 738</span>  </div>
|
|
3717
|
+
<div class="line"><a name="l00739"></a><span class="lineno"> 739</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(opnd);</div>
|
|
3718
|
+
<div class="line"><a name="l00740"></a><span class="lineno"> 740</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(src, dst);</div>
|
|
3719
|
+
<div class="line"><a name="l00741"></a><span class="lineno"> 741</span>  }</div>
|
|
3720
|
+
<div class="line"><a name="l00742"></a><span class="lineno"> 742</span> }</div>
|
|
3717
3721
|
</div><!-- fragment -->
|
|
3718
3722
|
</div>
|
|
3719
3723
|
</div>
|
|
@@ -3734,17 +3738,17 @@ Private Attributes</h2></td></tr>
|
|
|
3734
3738
|
</div><div class="memdoc">
|
|
3735
3739
|
<p>Visit compare instruction </p>
|
|
3736
3740
|
|
|
3737
|
-
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#
|
|
3738
|
-
<div class="fragment"><div class="line"><a name="
|
|
3739
|
-
<div class="line"><a name="
|
|
3740
|
-
<div class="line"><a name="
|
|
3741
|
-
<div class="line"><a name="
|
|
3742
|
-
<div class="line"><a name="
|
|
3743
|
-
<div class="line"><a name="
|
|
3744
|
-
<div class="line"><a name="
|
|
3745
|
-
<div class="line"><a name="
|
|
3746
|
-
<div class="line"><a name="
|
|
3747
|
-
<div class="line"><a name="
|
|
3741
|
+
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00775">775</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
|
|
3742
|
+
<div class="fragment"><div class="line"><a name="l00776"></a><span class="lineno"> 776</span> {</div>
|
|
3743
|
+
<div class="line"><a name="l00777"></a><span class="lineno"> 777</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&inst);</div>
|
|
3744
|
+
<div class="line"><a name="l00778"></a><span class="lineno"> 778</span>  assert(inst.getNumOperands() == 2 && <span class="stringliteral">"not two operands for compare instruction?"</span>);</div>
|
|
3745
|
+
<div class="line"><a name="l00779"></a><span class="lineno"> 779</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* op1 = inst.getOperand(0);</div>
|
|
3746
|
+
<div class="line"><a name="l00780"></a><span class="lineno"> 780</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op1Node = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(op1);</div>
|
|
3747
|
+
<div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* op2 = inst.getOperand(1);</div>
|
|
3748
|
+
<div class="line"><a name="l00782"></a><span class="lineno"> 782</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op2Node = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(op2);</div>
|
|
3749
|
+
<div class="line"><a name="l00783"></a><span class="lineno"> 783</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> predicate = inst.getPredicate();</div>
|
|
3750
|
+
<div class="line"><a name="l00784"></a><span class="lineno"> 784</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4e1d75ac5f54872762460c86a67de3a6">addCmpEdge</a>(op1Node, op2Node, dst, predicate);</div>
|
|
3751
|
+
<div class="line"><a name="l00785"></a><span class="lineno"> 785</span> }</div>
|
|
3748
3752
|
</div><!-- fragment -->
|
|
3749
3753
|
</div>
|
|
3750
3754
|
</div>
|
|
@@ -3766,11 +3770,11 @@ Private Attributes</h2></td></tr>
|
|
|
3766
3770
|
<p>The �extractelement� instruction extracts a single scalar element from a vector at a specified index. TODO: for now we just assume the pointer after extraction points to blackhole The first operand of an �extractelement� instruction is a value of vector type. The second operand is an index indicating the position from which to extract the element.</p>
|
|
3767
3771
|
<p><result> = extractelement <4 x i32> vec, i32 0 ; yields i32 </p>
|
|
3768
3772
|
|
|
3769
|
-
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#
|
|
3770
|
-
<div class="fragment"><div class="line"><a name="
|
|
3771
|
-
<div class="line"><a name="
|
|
3772
|
-
<div class="line"><a name="
|
|
3773
|
-
<div class="line"><a name="
|
|
3773
|
+
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00913">913</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
|
|
3774
|
+
<div class="fragment"><div class="line"><a name="l00914"></a><span class="lineno"> 914</span> {</div>
|
|
3775
|
+
<div class="line"><a name="l00915"></a><span class="lineno"> 915</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&inst);</div>
|
|
3776
|
+
<div class="line"><a name="l00916"></a><span class="lineno"> 916</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a8bf1847f31ff90937ce76cd0c0af7edb">addBlackHoleAddrEdge</a>(dst);</div>
|
|
3777
|
+
<div class="line"><a name="l00917"></a><span class="lineno"> 917</span> }</div>
|
|
3774
3778
|
</div><!-- fragment -->
|
|
3775
3779
|
</div>
|
|
3776
3780
|
</div>
|
|
@@ -3791,11 +3795,11 @@ Private Attributes</h2></td></tr>
|
|
|
3791
3795
|
</div><div class="memdoc">
|
|
3792
3796
|
<p>visit extract value instructions for structures in registers TODO: for now we just assume the pointer after extraction points to blackhole for example %24 = extractvalue { i32, struct.s_hash* } call34, 0 %24 is a pointer points to first field of a register value call34 however we can not create call34 as an memory object, as it is register value. Is that necessary treat extract value as getelementptr instruction later to get more precise results? </p>
|
|
3793
3797
|
|
|
3794
|
-
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#
|
|
3795
|
-
<div class="fragment"><div class="line"><a name="
|
|
3796
|
-
<div class="line"><a name="
|
|
3797
|
-
<div class="line"><a name="
|
|
3798
|
-
<div class="line"><a name="
|
|
3798
|
+
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00899">899</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
|
|
3799
|
+
<div class="fragment"><div class="line"><a name="l00900"></a><span class="lineno"> 900</span> {</div>
|
|
3800
|
+
<div class="line"><a name="l00901"></a><span class="lineno"> 901</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&inst);</div>
|
|
3801
|
+
<div class="line"><a name="l00902"></a><span class="lineno"> 902</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a8bf1847f31ff90937ce76cd0c0af7edb">addBlackHoleAddrEdge</a>(dst);</div>
|
|
3802
|
+
<div class="line"><a name="l00903"></a><span class="lineno"> 903</span> }</div>
|
|
3799
3803
|
</div><!-- fragment -->
|
|
3800
3804
|
</div>
|
|
3801
3805
|
</div>
|
|
@@ -3848,16 +3852,16 @@ Private Attributes</h2></td></tr>
|
|
|
3848
3852
|
<p><result> = freeze ty <val> If <val> is undef or poison, ‘freeze’ returns an arbitrary, but fixed value of type <code>ty</code> Otherwise, this instruction is a no-op and returns the input <val></p>
|
|
3849
3853
|
<p><result> = freeze ty <val> If <val> is undef or poison, ‘freeze’ returns an arbitrary, but fixed value of type <code>ty</code> Otherwise, this instruction is a no-op and returns the input <val> For now, we assume <val> is never a poison or undef. </p>
|
|
3850
3854
|
|
|
3851
|
-
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#
|
|
3852
|
-
<div class="fragment"><div class="line"><a name="
|
|
3853
|
-
<div class="line"><a name="
|
|
3854
|
-
<div class="line"><a name="
|
|
3855
|
-
<div class="line"><a name="
|
|
3856
|
-
<div class="line"><a name="
|
|
3857
|
-
<div class="line"><a name="
|
|
3858
|
-
<div class="line"><a name="
|
|
3859
|
-
<div class="line"><a name="
|
|
3860
|
-
<div class="line"><a name="
|
|
3855
|
+
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00984">984</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
|
|
3856
|
+
<div class="fragment"><div class="line"><a name="l00985"></a><span class="lineno"> 985</span> {</div>
|
|
3857
|
+
<div class="line"><a name="l00986"></a><span class="lineno"> 986</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&inst);</div>
|
|
3858
|
+
<div class="line"><a name="l00987"></a><span class="lineno"> 987</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i < inst.getNumOperands(); i++)</div>
|
|
3859
|
+
<div class="line"><a name="l00988"></a><span class="lineno"> 988</span>  {</div>
|
|
3860
|
+
<div class="line"><a name="l00989"></a><span class="lineno"> 989</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* opnd = inst.getOperand(i);</div>
|
|
3861
|
+
<div class="line"><a name="l00990"></a><span class="lineno"> 990</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(opnd);</div>
|
|
3862
|
+
<div class="line"><a name="l00991"></a><span class="lineno"> 991</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(src,dst);</div>
|
|
3863
|
+
<div class="line"><a name="l00992"></a><span class="lineno"> 992</span>  }</div>
|
|
3864
|
+
<div class="line"><a name="l00993"></a><span class="lineno"> 993</span> }</div>
|
|
3861
3865
|
</div><!-- fragment -->
|
|
3862
3866
|
</div>
|
|
3863
3867
|
</div>
|
|
@@ -3878,28 +3882,28 @@ Private Attributes</h2></td></tr>
|
|
|
3878
3882
|
</div><div class="memdoc">
|
|
3879
3883
|
<p>Visit getelementptr instructions </p>
|
|
3880
3884
|
|
|
3881
|
-
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#
|
|
3882
|
-
<div class="fragment"><div class="line"><a name="
|
|
3883
|
-
<div class="line"><a name="
|
|
3884
|
-
<div class="line"><a name="
|
|
3885
|
-
<div class="line"><a name="
|
|
3886
|
-
<div class="line"><a name="
|
|
3887
|
-
<div class="line"><a name="
|
|
3888
|
-
<div class="line"><a name="
|
|
3889
|
-
<div class="line"><a name="
|
|
3890
|
-
<div class="line"><a name="
|
|
3891
|
-
<div class="line"><a name="
|
|
3892
|
-
<div class="line"><a name="l00706"></a><span class="lineno"> 706</span>  </div>
|
|
3893
|
-
<div class="line"><a name="l00707"></a><span class="lineno"> 707</span>  assert(SVFUtil::isa<PointerType>(inst.getType()));</div>
|
|
3885
|
+
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00697">697</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
|
|
3886
|
+
<div class="fragment"><div class="line"><a name="l00698"></a><span class="lineno"> 698</span> {</div>
|
|
3887
|
+
<div class="line"><a name="l00699"></a><span class="lineno"> 699</span>  </div>
|
|
3888
|
+
<div class="line"><a name="l00700"></a><span class="lineno"> 700</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&inst);</div>
|
|
3889
|
+
<div class="line"><a name="l00701"></a><span class="lineno"> 701</span>  <span class="comment">// GetElementPtrInst should always be a pointer or a vector contains pointers</span></div>
|
|
3890
|
+
<div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  <span class="comment">// for now we don't handle vector type here</span></div>
|
|
3891
|
+
<div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  <span class="keywordflow">if</span>(SVFUtil::isa<VectorType>(inst.getType()))</div>
|
|
3892
|
+
<div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  {</div>
|
|
3893
|
+
<div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a8bf1847f31ff90937ce76cd0c0af7edb">addBlackHoleAddrEdge</a>(dst);</div>
|
|
3894
|
+
<div class="line"><a name="l00706"></a><span class="lineno"> 706</span>  <span class="keywordflow">return</span>;</div>
|
|
3895
|
+
<div class="line"><a name="l00707"></a><span class="lineno"> 707</span>  }</div>
|
|
3894
3896
|
<div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  </div>
|
|
3895
|
-
<div class="line"><a name="l00709"></a><span class="lineno"> 709</span> 
|
|
3897
|
+
<div class="line"><a name="l00709"></a><span class="lineno"> 709</span>  assert(SVFUtil::isa<PointerType>(inst.getType()));</div>
|
|
3896
3898
|
<div class="line"><a name="l00710"></a><span class="lineno"> 710</span>  </div>
|
|
3897
|
-
<div class="line"><a name="l00711"></a><span class="lineno"> 711</span>  <a class="code" href="
|
|
3899
|
+
<div class="line"><a name="l00711"></a><span class="lineno"> 711</span>  <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"process gep "</span> << <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getSVFValue(&inst)->toString() << <span class="stringliteral">" \n"</span>);</div>
|
|
3898
3900
|
<div class="line"><a name="l00712"></a><span class="lineno"> 712</span>  </div>
|
|
3899
|
-
<div class="line"><a name="l00713"></a><span class="lineno"> 713</span>  <a class="code" href="
|
|
3900
|
-
<div class="line"><a name="l00714"></a><span class="lineno"> 714</span> 
|
|
3901
|
-
<div class="line"><a name="l00715"></a><span class="lineno"> 715</span>  <a class="code" href="
|
|
3902
|
-
<div class="line"><a name="l00716"></a><span class="lineno"> 716</span> 
|
|
3901
|
+
<div class="line"><a name="l00713"></a><span class="lineno"> 713</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst.getPointerOperand());</div>
|
|
3902
|
+
<div class="line"><a name="l00714"></a><span class="lineno"> 714</span>  </div>
|
|
3903
|
+
<div class="line"><a name="l00715"></a><span class="lineno"> 715</span>  <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a> ap(0, <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getSVFType(inst.getSourceElementType()));</div>
|
|
3904
|
+
<div class="line"><a name="l00716"></a><span class="lineno"> 716</span>  <span class="keywordtype">bool</span> constGep = <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac8c440fe6513495edb8949df5a32d979">computeGepOffset</a>(&inst, ap);</div>
|
|
3905
|
+
<div class="line"><a name="l00717"></a><span class="lineno"> 717</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4e1b6797df3e7b98da876f50741e6a3a">addGepEdge</a>(src, dst, ap, constGep);</div>
|
|
3906
|
+
<div class="line"><a name="l00718"></a><span class="lineno"> 718</span> }</div>
|
|
3903
3907
|
</div><!-- fragment -->
|
|
3904
3908
|
</div>
|
|
3905
3909
|
</div>
|
|
@@ -3932,52 +3936,52 @@ Private Attributes</h2></td></tr>
|
|
|
3932
3936
|
<p>initialize global variable</p>
|
|
3933
3937
|
<p>initialize global functions</p>
|
|
3934
3938
|
|
|
3935
|
-
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#
|
|
3936
|
-
<div class="fragment"><div class="line"><a name="
|
|
3937
|
-
<div class="line"><a name="
|
|
3938
|
-
<div class="line"><a name="
|
|
3939
|
-
<div class="line"><a name="
|
|
3940
|
-
<div class="line"><a name="
|
|
3941
|
-
<div class="line"><a name="
|
|
3942
|
-
<div class="line"><a name="
|
|
3943
|
-
<div class="line"><a name="
|
|
3944
|
-
<div class="line"><a name="
|
|
3945
|
-
<div class="line"><a name="
|
|
3946
|
-
<div class="line"><a name="
|
|
3947
|
-
<div class="line"><a name="
|
|
3948
|
-
<div class="line"><a name="
|
|
3949
|
-
<div class="line"><a name="
|
|
3950
|
-
<div class="line"><a name="
|
|
3951
|
-
<div class="line"><a name="
|
|
3952
|
-
<div class="line"><a name="
|
|
3953
|
-
<div class="line"><a name="
|
|
3954
|
-
<div class="line"><a name="
|
|
3955
|
-
<div class="line"><a name="
|
|
3956
|
-
<div class="line"><a name="
|
|
3957
|
-
<div class="line"><a name="
|
|
3958
|
-
<div class="line"><a name="
|
|
3959
|
-
<div class="line"><a name="
|
|
3960
|
-
<div class="line"><a name="
|
|
3961
|
-
<div class="line"><a name="
|
|
3962
|
-
<div class="line"><a name="
|
|
3963
|
-
<div class="line"><a name="
|
|
3964
|
-
<div class="line"><a name="
|
|
3965
|
-
<div class="line"><a name="
|
|
3966
|
-
<div class="line"><a name="
|
|
3967
|
-
<div class="line"><a name="
|
|
3968
|
-
<div class="line"><a name="
|
|
3969
|
-
<div class="line"><a name="
|
|
3970
|
-
<div class="line"><a name="
|
|
3971
|
-
<div class="line"><a name="
|
|
3972
|
-
<div class="line"><a name="
|
|
3973
|
-
<div class="line"><a name="
|
|
3974
|
-
<div class="line"><a name="
|
|
3975
|
-
<div class="line"><a name="
|
|
3976
|
-
<div class="line"><a name="
|
|
3977
|
-
<div class="line"><a name="
|
|
3978
|
-
<div class="line"><a name="
|
|
3979
|
-
<div class="line"><a name="
|
|
3980
|
-
<div class="line"><a name="
|
|
3939
|
+
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00568">568</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
|
|
3940
|
+
<div class="fragment"><div class="line"><a name="l00569"></a><span class="lineno"> 569</span> {</div>
|
|
3941
|
+
<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  </div>
|
|
3942
|
+
<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> &M : <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getLLVMModules())</div>
|
|
3943
|
+
<div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  {</div>
|
|
3944
|
+
<div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  <span class="keywordflow">for</span> (Module::global_iterator I = M.global_begin(), E = M.global_end(); I != E; ++I)</div>
|
|
3945
|
+
<div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  {</div>
|
|
3946
|
+
<div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a> *gvar = &*I;</div>
|
|
3947
|
+
<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> idx = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(gvar);</div>
|
|
3948
|
+
<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5a93f3d13e2b3df126fbc42b1bd09006">getObjectNode</a>(gvar);</div>
|
|
3949
|
+
<div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  </div>
|
|
3950
|
+
<div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(gvar, <span class="keyword">nullptr</span>);</div>
|
|
3951
|
+
<div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a2a0711cb1fdd3c5c90b07ff107aff1ac">addAddrEdge</a>(obj, idx);</div>
|
|
3952
|
+
<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  </div>
|
|
3953
|
+
<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  <span class="keywordflow">if</span> (gvar->hasInitializer())</div>
|
|
3954
|
+
<div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  {</div>
|
|
3955
|
+
<div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a> *C = gvar->getInitializer();</div>
|
|
3956
|
+
<div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"add global var node "</span> << <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getSVFValue(gvar)->toString() << <span class="stringliteral">"\n"</span>);</div>
|
|
3957
|
+
<div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#ae7fcd2050a57a43bfed2c7fd1c41d250">InitialGlobal</a>(gvar, C, 0);</div>
|
|
3958
|
+
<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  }</div>
|
|
3959
|
+
<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  }</div>
|
|
3960
|
+
<div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  </div>
|
|
3961
|
+
<div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  </div>
|
|
3962
|
+
<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  <span class="keywordflow">for</span> (Module::const_iterator I = M.begin(), E = M.end(); I != E; ++I)</div>
|
|
3963
|
+
<div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  {</div>
|
|
3964
|
+
<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fun = &*I;</div>
|
|
3965
|
+
<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> idx = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(fun);</div>
|
|
3966
|
+
<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5a93f3d13e2b3df126fbc42b1bd09006">getObjectNode</a>(fun);</div>
|
|
3967
|
+
<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  </div>
|
|
3968
|
+
<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"add global function node "</span> << fun->getName().str() << <span class="stringliteral">"\n"</span>);</div>
|
|
3969
|
+
<div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(fun, <span class="keyword">nullptr</span>);</div>
|
|
3970
|
+
<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a2a0711cb1fdd3c5c90b07ff107aff1ac">addAddrEdge</a>(obj, idx);</div>
|
|
3971
|
+
<div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  }</div>
|
|
3972
|
+
<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  </div>
|
|
3973
|
+
<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  <span class="comment">// Handle global aliases (due to linkage of multiple bc files), e.g., @x = internal alias @y. We need to add a copy from y to x.</span></div>
|
|
3974
|
+
<div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  <span class="keywordflow">for</span> (Module::alias_iterator I = M.alias_begin(), E = M.alias_end(); I != E; I++)</div>
|
|
3975
|
+
<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  {</div>
|
|
3976
|
+
<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a0fd33072b099f61eaa642e94ed0c03fc">GlobalAlias</a>* alias = &*I;</div>
|
|
3977
|
+
<div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getSVFValue(alias));</div>
|
|
3978
|
+
<div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getSVFValue(alias->getAliasee()));</div>
|
|
3979
|
+
<div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5adf8baa546292434ba1fec48db2d0a7">processCE</a>(alias->getAliasee());</div>
|
|
3980
|
+
<div class="line"><a name="l00611"></a><span class="lineno"> 611</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(alias, <span class="keyword">nullptr</span>);</div>
|
|
3981
|
+
<div class="line"><a name="l00612"></a><span class="lineno"> 612</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(src,dst);</div>
|
|
3982
|
+
<div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  }</div>
|
|
3983
|
+
<div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  }</div>
|
|
3984
|
+
<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> }</div>
|
|
3981
3985
|
</div><!-- fragment -->
|
|
3982
3986
|
</div>
|
|
3983
3987
|
</div>
|
|
@@ -4093,10 +4097,10 @@ Private Attributes</h2></td></tr>
|
|
|
4093
4097
|
</table>
|
|
4094
4098
|
</div><div class="memdoc">
|
|
4095
4099
|
|
|
4096
|
-
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#
|
|
4097
|
-
<div class="fragment"><div class="line"><a name="
|
|
4098
|
-
<div class="line"><a name="
|
|
4099
|
-
<div class="line"><a name="
|
|
4100
|
+
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00809">809</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
|
|
4101
|
+
<div class="fragment"><div class="line"><a name="l00810"></a><span class="lineno"> 810</span> {</div>
|
|
4102
|
+
<div class="line"><a name="l00811"></a><span class="lineno"> 811</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5aa87f9ea35b30b4b4797f8a7f9f293c">visitCallSite</a>(&i);</div>
|
|
4103
|
+
<div class="line"><a name="l00812"></a><span class="lineno"> 812</span> }</div>
|
|
4100
4104
|
</div><!-- fragment -->
|
|
4101
4105
|
</div>
|
|
4102
4106
|
</div>
|
|
@@ -4147,16 +4151,16 @@ Private Attributes</h2></td></tr>
|
|
|
4147
4151
|
</table>
|
|
4148
4152
|
</div><div class="memdoc">
|
|
4149
4153
|
|
|
4150
|
-
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#
|
|
4151
|
-
<div class="fragment"><div class="line"><a name="
|
|
4152
|
-
<div class="line"><a name="
|
|
4153
|
-
<div class="line"><a name="l00666"></a><span class="lineno"> 666</span>  </div>
|
|
4154
|
-
<div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&inst);</div>
|
|
4154
|
+
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00665">665</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
|
|
4155
|
+
<div class="fragment"><div class="line"><a name="l00666"></a><span class="lineno"> 666</span> {</div>
|
|
4156
|
+
<div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"process load "</span> << <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getSVFValue(&inst)->toString() << <span class="stringliteral">" \n"</span>);</div>
|
|
4155
4157
|
<div class="line"><a name="l00668"></a><span class="lineno"> 668</span>  </div>
|
|
4156
|
-
<div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>
|
|
4158
|
+
<div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&inst);</div>
|
|
4157
4159
|
<div class="line"><a name="l00670"></a><span class="lineno"> 670</span>  </div>
|
|
4158
|
-
<div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#
|
|
4159
|
-
<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> 
|
|
4160
|
+
<div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst.getPointerOperand());</div>
|
|
4161
|
+
<div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  </div>
|
|
4162
|
+
<div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4469ae4c52c162d3fbbd559420045243">addLoadEdge</a>(src, dst);</div>
|
|
4163
|
+
<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> }</div>
|
|
4160
4164
|
</div><!-- fragment -->
|
|
4161
4165
|
</div>
|
|
4162
4166
|
</div>
|
|
@@ -4177,28 +4181,28 @@ Private Attributes</h2></td></tr>
|
|
|
4177
4181
|
</div><div class="memdoc">
|
|
4178
4182
|
<p>Visit phi instructions </p>
|
|
4179
4183
|
|
|
4180
|
-
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#
|
|
4181
|
-
<div class="fragment"><div class="line"><a name="
|
|
4182
|
-
<div class="line"><a name="l00639"></a><span class="lineno"> 639</span>  </div>
|
|
4183
|
-
<div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"process phi "</span> << <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getSVFValue(&inst)->toString() << <span class="stringliteral">" \n"</span>);</div>
|
|
4184
|
+
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00639">639</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
|
|
4185
|
+
<div class="fragment"><div class="line"><a name="l00640"></a><span class="lineno"> 640</span> {</div>
|
|
4184
4186
|
<div class="line"><a name="l00641"></a><span class="lineno"> 641</span>  </div>
|
|
4185
|
-
<div class="line"><a name="l00642"></a><span class="lineno"> 642</span>  <a class="code" href="
|
|
4187
|
+
<div class="line"><a name="l00642"></a><span class="lineno"> 642</span>  <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"process phi "</span> << <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getSVFValue(&inst)->toString() << <span class="stringliteral">" \n"</span>);</div>
|
|
4186
4188
|
<div class="line"><a name="l00643"></a><span class="lineno"> 643</span>  </div>
|
|
4187
|
-
<div class="line"><a name="l00644"></a><span class="lineno"> 644</span>  <
|
|
4188
|
-
<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> 
|
|
4189
|
-
<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> 
|
|
4190
|
-
<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> 
|
|
4191
|
-
<div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  <span class="
|
|
4192
|
-
<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> 
|
|
4193
|
-
<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> 
|
|
4194
|
-
<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> 
|
|
4195
|
-
<div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  <span class="
|
|
4196
|
-
<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> 
|
|
4197
|
-
<div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  <span class="keyword">const</span> <a class="code" href="
|
|
4198
|
-
<div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  <a class="code" href="
|
|
4199
|
-
<div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#
|
|
4200
|
-
<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> 
|
|
4201
|
-
<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> 
|
|
4189
|
+
<div class="line"><a name="l00644"></a><span class="lineno"> 644</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&inst);</div>
|
|
4190
|
+
<div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  </div>
|
|
4191
|
+
<div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i < inst.getNumIncomingValues(); ++i)</div>
|
|
4192
|
+
<div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  {</div>
|
|
4193
|
+
<div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val = inst.getIncomingValue(i);</div>
|
|
4194
|
+
<div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* incomingInst = SVFUtil::dyn_cast<Instruction>(val);</div>
|
|
4195
|
+
<div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  <span class="keywordtype">bool</span> matched = (incomingInst == <span class="keyword">nullptr</span> ||</div>
|
|
4196
|
+
<div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  incomingInst->getFunction() == inst.getFunction());</div>
|
|
4197
|
+
<div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  (void) matched; <span class="comment">// Suppress warning of unused variable under release build</span></div>
|
|
4198
|
+
<div class="line"><a name="l00653"></a><span class="lineno"> 653</span>  assert(matched && <span class="stringliteral">"incomingInst's Function incorrect"</span>);</div>
|
|
4199
|
+
<div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* predInst = &inst.getIncomingBlock(i)->back();</div>
|
|
4200
|
+
<div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfPrevInst = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#ae74f307b6f96950ceedb2c375ef1c3a3">getSVFInstruction</a>(predInst);</div>
|
|
4201
|
+
<div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(svfPrevInst);</div>
|
|
4202
|
+
<div class="line"><a name="l00657"></a><span class="lineno"> 657</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(val);</div>
|
|
4203
|
+
<div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a2bd394d9fe3b7a10080987b7a707f5c0">addPhiStmt</a>(dst,src,icfgNode);</div>
|
|
4204
|
+
<div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  }</div>
|
|
4205
|
+
<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> }</div>
|
|
4202
4206
|
</div><!-- fragment -->
|
|
4203
4207
|
</div>
|
|
4204
4208
|
</div>
|
|
@@ -4251,26 +4255,26 @@ Private Attributes</h2></td></tr>
|
|
|
4251
4255
|
</div><div class="memdoc">
|
|
4252
4256
|
<p>Visit return instructions of a function </p>
|
|
4253
4257
|
|
|
4254
|
-
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#
|
|
4255
|
-
<div class="fragment"><div class="line"><a name="
|
|
4256
|
-
<div class="line"><a name="
|
|
4257
|
-
<div class="line"><a name="
|
|
4258
|
-
<div class="line"><a name="
|
|
4259
|
-
<div class="line"><a name="l00872"></a><span class="lineno"> 872</span>  </div>
|
|
4260
|
-
<div class="line"><a name="l00873"></a><span class="lineno"> 873</span>  <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"process return "</span> << <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getSVFValue(&inst)->toString() << <span class="stringliteral">" \n"</span>);</div>
|
|
4258
|
+
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00869">869</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
|
|
4259
|
+
<div class="fragment"><div class="line"><a name="l00870"></a><span class="lineno"> 870</span> {</div>
|
|
4260
|
+
<div class="line"><a name="l00871"></a><span class="lineno"> 871</span>  </div>
|
|
4261
|
+
<div class="line"><a name="l00872"></a><span class="lineno"> 872</span>  <span class="comment">// ReturnInst itself should always not be a pointer type</span></div>
|
|
4262
|
+
<div class="line"><a name="l00873"></a><span class="lineno"> 873</span>  assert(!SVFUtil::isa<PointerType>(inst.getType()));</div>
|
|
4261
4263
|
<div class="line"><a name="l00874"></a><span class="lineno"> 874</span>  </div>
|
|
4262
|
-
<div class="line"><a name="l00875"></a><span class="lineno"> 875</span>  <
|
|
4263
|
-
<div class="line"><a name="l00876"></a><span class="lineno"> 876</span> 
|
|
4264
|
-
<div class="line"><a name="l00877"></a><span class="lineno"> 877</span> 
|
|
4265
|
-
<div class="line"><a name="l00878"></a><span class="lineno"> 878</span> 
|
|
4266
|
-
<div class="line"><a name="l00879"></a><span class="lineno"> 879</span>  <a class="code" href="
|
|
4267
|
-
<div class="line"><a name="l00880"></a><span class="lineno"> 880</span> 
|
|
4268
|
-
<div class="line"><a name="l00881"></a><span class="lineno"> 881</span>  <
|
|
4269
|
-
<div class="line"><a name="l00882"></a><span class="lineno"> 882</span>  <
|
|
4270
|
-
<div class="line"><a name="l00883"></a><span class="lineno"> 883</span>  <span class="
|
|
4271
|
-
<div class="line"><a name="l00884"></a><span class="lineno"> 884</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#
|
|
4272
|
-
<div class="line"><a name="l00885"></a><span class="lineno"> 885</span> 
|
|
4273
|
-
<div class="line"><a name="l00886"></a><span class="lineno"> 886</span> 
|
|
4264
|
+
<div class="line"><a name="l00875"></a><span class="lineno"> 875</span>  <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"process return "</span> << <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getSVFValue(&inst)->toString() << <span class="stringliteral">" \n"</span>);</div>
|
|
4265
|
+
<div class="line"><a name="l00876"></a><span class="lineno"> 876</span>  </div>
|
|
4266
|
+
<div class="line"><a name="l00877"></a><span class="lineno"> 877</span>  <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* src = inst.getReturnValue())</div>
|
|
4267
|
+
<div class="line"><a name="l00878"></a><span class="lineno"> 878</span>  {</div>
|
|
4268
|
+
<div class="line"><a name="l00879"></a><span class="lineno"> 879</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a> = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#a50fc24901350df9db890ba16a9b87e33">getSVFFunction</a>(inst.getParent()->getParent());</div>
|
|
4269
|
+
<div class="line"><a name="l00880"></a><span class="lineno"> 880</span>  </div>
|
|
4270
|
+
<div class="line"><a name="l00881"></a><span class="lineno"> 881</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rnF = <a class="code" href="classSVF_1_1SVFIRBuilder.html#aff99c8de4acf4eeaf01803dadf459b92">getReturnNode</a>(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>);</div>
|
|
4271
|
+
<div class="line"><a name="l00882"></a><span class="lineno"> 882</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(src);</div>
|
|
4272
|
+
<div class="line"><a name="l00883"></a><span class="lineno"> 883</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfInst = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#ae74f307b6f96950ceedb2c375ef1c3a3">getSVFInstruction</a>(&inst);</div>
|
|
4273
|
+
<div class="line"><a name="l00884"></a><span class="lineno"> 884</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(svfInst);</div>
|
|
4274
|
+
<div class="line"><a name="l00885"></a><span class="lineno"> 885</span>  <span class="comment">//vnS may be null if src is a null ptr</span></div>
|
|
4275
|
+
<div class="line"><a name="l00886"></a><span class="lineno"> 886</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a2bd394d9fe3b7a10080987b7a707f5c0">addPhiStmt</a>(rnF,vnS,icfgNode);</div>
|
|
4276
|
+
<div class="line"><a name="l00887"></a><span class="lineno"> 887</span>  }</div>
|
|
4277
|
+
<div class="line"><a name="l00888"></a><span class="lineno"> 888</span> }</div>
|
|
4274
4278
|
</div><!-- fragment -->
|
|
4275
4279
|
</div>
|
|
4276
4280
|
</div>
|
|
@@ -4292,17 +4296,17 @@ Private Attributes</h2></td></tr>
|
|
|
4292
4296
|
<p>Visit select instructions </p>
|
|
4293
4297
|
<p>Two operands have same incoming basic block, both are the current BB</p>
|
|
4294
4298
|
|
|
4295
|
-
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#
|
|
4296
|
-
<div class="fragment"><div class="line"><a name="
|
|
4297
|
-
<div class="line"><a name="l00791"></a><span class="lineno"> 791</span>  </div>
|
|
4298
|
-
<div class="line"><a name="l00792"></a><span class="lineno"> 792</span>  <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"process select "</span> << <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getSVFValue(&inst)->toString() << <span class="stringliteral">" \n"</span>);</div>
|
|
4299
|
+
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00791">791</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
|
|
4300
|
+
<div class="fragment"><div class="line"><a name="l00792"></a><span class="lineno"> 792</span> {</div>
|
|
4299
4301
|
<div class="line"><a name="l00793"></a><span class="lineno"> 793</span>  </div>
|
|
4300
|
-
<div class="line"><a name="l00794"></a><span class="lineno"> 794</span>  <a class="code" href="
|
|
4301
|
-
<div class="line"><a name="l00795"></a><span class="lineno"> 795</span> 
|
|
4302
|
-
<div class="line"><a name="l00796"></a><span class="lineno"> 796</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>
|
|
4303
|
-
<div class="line"><a name="l00797"></a><span class="lineno"> 797</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>
|
|
4304
|
-
<div class="line"><a name="
|
|
4305
|
-
<div class="line"><a name="
|
|
4302
|
+
<div class="line"><a name="l00794"></a><span class="lineno"> 794</span>  <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"process select "</span> << <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getSVFValue(&inst)->toString() << <span class="stringliteral">" \n"</span>);</div>
|
|
4303
|
+
<div class="line"><a name="l00795"></a><span class="lineno"> 795</span>  </div>
|
|
4304
|
+
<div class="line"><a name="l00796"></a><span class="lineno"> 796</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&inst);</div>
|
|
4305
|
+
<div class="line"><a name="l00797"></a><span class="lineno"> 797</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src1 = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst.getTrueValue());</div>
|
|
4306
|
+
<div class="line"><a name="l00798"></a><span class="lineno"> 798</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src2 = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst.getFalseValue());</div>
|
|
4307
|
+
<div class="line"><a name="l00799"></a><span class="lineno"> 799</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> cond = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst.getCondition());</div>
|
|
4308
|
+
<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5bf90e30bb591caba9ff85535e6a33f8">addSelectStmt</a>(dst,src1,src2, cond);</div>
|
|
4309
|
+
<div class="line"><a name="l00802"></a><span class="lineno"> 802</span> }</div>
|
|
4306
4310
|
</div><!-- fragment -->
|
|
4307
4311
|
</div>
|
|
4308
4312
|
</div>
|
|
@@ -4354,20 +4358,20 @@ Private Attributes</h2></td></tr>
|
|
|
4354
4358
|
</div><div class="memdoc">
|
|
4355
4359
|
<p>Visit store instructions </p>
|
|
4356
4360
|
|
|
4357
|
-
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#
|
|
4358
|
-
<div class="fragment"><div class="line"><a name="
|
|
4359
|
-
<div class="line"><a name="
|
|
4360
|
-
<div class="line"><a name="
|
|
4361
|
-
<div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  </div>
|
|
4362
|
-
<div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"process store "</span> << <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getSVFValue(&inst)->toString() << <span class="stringliteral">" \n"</span>);</div>
|
|
4361
|
+
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00679">679</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
|
|
4362
|
+
<div class="fragment"><div class="line"><a name="l00680"></a><span class="lineno"> 680</span> {</div>
|
|
4363
|
+
<div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  <span class="comment">// StoreInst itself should always not be a pointer type</span></div>
|
|
4364
|
+
<div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  assert(!SVFUtil::isa<PointerType>(inst.getType()));</div>
|
|
4363
4365
|
<div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  </div>
|
|
4364
|
-
<div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  <a class="code" href="
|
|
4366
|
+
<div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"process store "</span> << <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getSVFValue(&inst)->toString() << <span class="stringliteral">" \n"</span>);</div>
|
|
4365
4367
|
<div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  </div>
|
|
4366
|
-
<div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>
|
|
4368
|
+
<div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst.getPointerOperand());</div>
|
|
4367
4369
|
<div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  </div>
|
|
4368
|
-
<div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#
|
|
4370
|
+
<div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst.getValueOperand());</div>
|
|
4369
4371
|
<div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  </div>
|
|
4370
|
-
<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> 
|
|
4372
|
+
<div class="line"><a name="l00690"></a><span class="lineno"> 690</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a30f043eeca79259d84b97e265110f018">addStoreEdge</a>(src, dst);</div>
|
|
4373
|
+
<div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  </div>
|
|
4374
|
+
<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> }</div>
|
|
4371
4375
|
</div><!-- fragment -->
|
|
4372
4376
|
</div>
|
|
4373
4377
|
</div>
|
|
@@ -4387,27 +4391,27 @@ Private Attributes</h2></td></tr>
|
|
|
4387
4391
|
</table>
|
|
4388
4392
|
</div><div class="memdoc">
|
|
4389
4393
|
|
|
4390
|
-
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#
|
|
4391
|
-
<div class="fragment"><div class="line"><a name="
|
|
4392
|
-
<div class="line"><a name="
|
|
4393
|
-
<div class="line"><a name="
|
|
4394
|
-
<div class="line"><a name="l00947"></a><span class="lineno"> 947</span>  </div>
|
|
4395
|
-
<div class="line"><a name="l00948"></a><span class="lineno"> 948</span>  <a class="code" href="classSVF_1_1BranchStmt.html#a6a0e64824777f04be4c169125dd4f666">BranchStmt::SuccAndCondPairVec</a> successors;</div>
|
|
4394
|
+
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00945">945</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
|
|
4395
|
+
<div class="fragment"><div class="line"><a name="l00946"></a><span class="lineno"> 946</span> {</div>
|
|
4396
|
+
<div class="line"><a name="l00947"></a><span class="lineno"> 947</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> brinst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&inst);</div>
|
|
4397
|
+
<div class="line"><a name="l00948"></a><span class="lineno"> 948</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> cond = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst.getCondition());</div>
|
|
4396
4398
|
<div class="line"><a name="l00949"></a><span class="lineno"> 949</span>  </div>
|
|
4397
|
-
<div class="line"><a name="l00950"></a><span class="lineno"> 950</span>  <
|
|
4398
|
-
<div class="line"><a name="l00951"></a><span class="lineno"> 951</span> 
|
|
4399
|
-
<div class="line"><a name="l00952"></a><span class="lineno"> 952</span>  <
|
|
4400
|
-
<div class="line"><a name="l00953"></a><span class="lineno"> 953</span>  <
|
|
4401
|
-
<div class="line"><a name="l00954"></a><span class="lineno"> 954</span> 
|
|
4402
|
-
<div class="line"><a name="l00955"></a><span class="lineno"> 955</span> 
|
|
4403
|
-
<div class="line"><a name="l00956"></a><span class="lineno"> 956</span> 
|
|
4404
|
-
<div class="line"><a name="l00957"></a><span class="lineno"> 957</span>  <
|
|
4405
|
-
<div class="line"><a name="l00958"></a><span class="lineno"> 958</span>  <span class="keyword">const</span> <a class="code" href="
|
|
4406
|
-
<div class="line"><a name="l00959"></a><span class="lineno"> 959</span>  <span class="keyword">const</span> <a class="code" href="
|
|
4407
|
-
<div class="line"><a name="l00960"></a><span class="lineno"> 960</span> 
|
|
4408
|
-
<div class="line"><a name="l00961"></a><span class="lineno"> 961</span> 
|
|
4409
|
-
<div class="line"><a name="l00962"></a><span class="lineno"> 962</span> 
|
|
4410
|
-
<div class="line"><a name="l00963"></a><span class="lineno"> 963</span> }</div>
|
|
4399
|
+
<div class="line"><a name="l00950"></a><span class="lineno"> 950</span>  <a class="code" href="classSVF_1_1BranchStmt.html#a6a0e64824777f04be4c169125dd4f666">BranchStmt::SuccAndCondPairVec</a> successors;</div>
|
|
4400
|
+
<div class="line"><a name="l00951"></a><span class="lineno"> 951</span>  </div>
|
|
4401
|
+
<div class="line"><a name="l00952"></a><span class="lineno"> 952</span>  <span class="comment">// get case successor basic block and related case value</span></div>
|
|
4402
|
+
<div class="line"><a name="l00953"></a><span class="lineno"> 953</span>  <a class="code" href="namespaceSVF.html#a8de26e1810ea0c3b1e8ad62f1c8a864d">SuccBBAndCondValPairVec</a> succBB2CondValPairVec;</div>
|
|
4403
|
+
<div class="line"><a name="l00954"></a><span class="lineno"> 954</span>  <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a9001722dd27bf487351725c3d7b65f2f">LLVMUtil::getSuccBBandCondValPairVec</a>(inst, succBB2CondValPairVec);</div>
|
|
4404
|
+
<div class="line"><a name="l00955"></a><span class="lineno"> 955</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> &succBB2CaseValue : succBB2CondValPairVec)</div>
|
|
4405
|
+
<div class="line"><a name="l00956"></a><span class="lineno"> 956</span>  {</div>
|
|
4406
|
+
<div class="line"><a name="l00957"></a><span class="lineno"> 957</span>  <a class="code" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a> val = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a33e8378ae1a911169394e545a4ba2220">LLVMUtil::getCaseValue</a>(inst, succBB2CaseValue);</div>
|
|
4407
|
+
<div class="line"><a name="l00958"></a><span class="lineno"> 958</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *succBB = succBB2CaseValue.first;</div>
|
|
4408
|
+
<div class="line"><a name="l00959"></a><span class="lineno"> 959</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* succInst = &succBB->front();</div>
|
|
4409
|
+
<div class="line"><a name="l00960"></a><span class="lineno"> 960</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfSuccInst = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#ae74f307b6f96950ceedb2c375ef1c3a3">getSVFInstruction</a>(succInst);</div>
|
|
4410
|
+
<div class="line"><a name="l00961"></a><span class="lineno"> 961</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(svfSuccInst);</div>
|
|
4411
|
+
<div class="line"><a name="l00962"></a><span class="lineno"> 962</span>  successors.push_back(std::make_pair(icfgNode, val));</div>
|
|
4412
|
+
<div class="line"><a name="l00963"></a><span class="lineno"> 963</span>  }</div>
|
|
4413
|
+
<div class="line"><a name="l00964"></a><span class="lineno"> 964</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5e56beb1a362b6e596183b04d37fd9e0">addBranchStmt</a>(brinst, cond, successors);</div>
|
|
4414
|
+
<div class="line"><a name="l00965"></a><span class="lineno"> 965</span> }</div>
|
|
4411
4415
|
</div><!-- fragment -->
|
|
4412
4416
|
</div>
|
|
4413
4417
|
</div>
|
|
@@ -4428,15 +4432,15 @@ Private Attributes</h2></td></tr>
|
|
|
4428
4432
|
</div><div class="memdoc">
|
|
4429
4433
|
<p>Visit Unary Operator </p>
|
|
4430
4434
|
|
|
4431
|
-
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#
|
|
4432
|
-
<div class="fragment"><div class="line"><a name="
|
|
4433
|
-
<div class="line"><a name="
|
|
4434
|
-
<div class="line"><a name="
|
|
4435
|
-
<div class="line"><a name="
|
|
4436
|
-
<div class="line"><a name="
|
|
4437
|
-
<div class="line"><a name="
|
|
4438
|
-
<div class="line"><a name="
|
|
4439
|
-
<div class="line"><a name="
|
|
4435
|
+
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00762">762</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
|
|
4436
|
+
<div class="fragment"><div class="line"><a name="l00763"></a><span class="lineno"> 763</span> {</div>
|
|
4437
|
+
<div class="line"><a name="l00764"></a><span class="lineno"> 764</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&inst);</div>
|
|
4438
|
+
<div class="line"><a name="l00765"></a><span class="lineno"> 765</span>  assert(inst.getNumOperands() == 1 && <span class="stringliteral">"not one operand for Unary instruction?"</span>);</div>
|
|
4439
|
+
<div class="line"><a name="l00766"></a><span class="lineno"> 766</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* opnd = inst.getOperand(0);</div>
|
|
4440
|
+
<div class="line"><a name="l00767"></a><span class="lineno"> 767</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(opnd);</div>
|
|
4441
|
+
<div class="line"><a name="l00768"></a><span class="lineno"> 768</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> opcode = inst.getOpcode();</div>
|
|
4442
|
+
<div class="line"><a name="l00769"></a><span class="lineno"> 769</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a9e81039d17b70e6a3d7310d05fa73c45">addUnaryOPEdge</a>(src, dst, opcode);</div>
|
|
4443
|
+
<div class="line"><a name="l00770"></a><span class="lineno"> 770</span> }</div>
|
|
4440
4444
|
</div><!-- fragment -->
|
|
4441
4445
|
</div>
|
|
4442
4446
|
</div>
|
|
@@ -4488,13 +4492,13 @@ Private Attributes</h2></td></tr>
|
|
|
4488
4492
|
<p>TODO: var arguments need to be handled. <a href="https://llvm.org/docs/LangRef.html#id1911">https://llvm.org/docs/LangRef.html#id1911</a></p>
|
|
4489
4493
|
<p>ap = alloca struct.va_list ap2 = bitcast struct.va_list* ap to i8* ; Read a single integer argument from ap2 tmp = va_arg i8* ap2, i32 (VAArgInst) TODO: for now, create a copy edge from ap2 to tmp, we assume here tmp should point to the n-th argument of the var_args </p>
|
|
4490
4494
|
|
|
4491
|
-
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#
|
|
4492
|
-
<div class="fragment"><div class="line"><a name="
|
|
4493
|
-
<div class="line"><a name="
|
|
4494
|
-
<div class="line"><a name="
|
|
4495
|
-
<div class="line"><a name="
|
|
4496
|
-
<div class="line"><a name="
|
|
4497
|
-
<div class="line"><a name="
|
|
4495
|
+
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00972">972</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
|
|
4496
|
+
<div class="fragment"><div class="line"><a name="l00973"></a><span class="lineno"> 973</span> {</div>
|
|
4497
|
+
<div class="line"><a name="l00974"></a><span class="lineno"> 974</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&inst);</div>
|
|
4498
|
+
<div class="line"><a name="l00975"></a><span class="lineno"> 975</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* opnd = inst.getPointerOperand();</div>
|
|
4499
|
+
<div class="line"><a name="l00976"></a><span class="lineno"> 976</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(opnd);</div>
|
|
4500
|
+
<div class="line"><a name="l00977"></a><span class="lineno"> 977</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(src,dst);</div>
|
|
4501
|
+
<div class="line"><a name="l00978"></a><span class="lineno"> 978</span> }</div>
|
|
4498
4502
|
</div><!-- fragment -->
|
|
4499
4503
|
</div>
|
|
4500
4504
|
</div>
|
|
@@ -4698,10 +4702,10 @@ Private Attributes</h2></td></tr>
|
|
|
4698
4702
|
<div class="ttc" id="aclassSVF_1_1SVFIR_html_ae61030da4a84b5c9c47903804af9d107"><div class="ttname"><a href="classSVF_1_1SVFIR.html#ae61030da4a84b5c9c47903804af9d107">SVF::SVFIR::addBranchStmt</a></div><div class="ttdeci">BranchStmt * addBranchStmt(NodeID br, NodeID cond, const BranchStmt::SuccAndCondPairVec &succs)</div><div class="ttdoc">Add BranchStmt.</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00186">SVFIR.cpp:186</a></div></div>
|
|
4699
4703
|
<div class="ttc" id="aclassSVF_1_1SVFCallInst_html_a3cbb4b4089c8b27d01da15f2d2f22e14"><div class="ttname"><a href="classSVF_1_1SVFCallInst.html#a3cbb4b4089c8b27d01da15f2d2f22e14">SVF::SVFCallInst::getArgOperand</a></div><div class="ttdeci">const SVFValue * getArgOperand(u32_t i) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00746">SVFValue.h:746</a></div></div>
|
|
4700
4704
|
<div class="ttc" id="aclassSVF_1_1SVFValue_html_a2401b022638769f59f86ab424a189b6e"><div class="ttname"><a href="classSVF_1_1SVFValue.html#a2401b022638769f59f86ab424a189b6e">SVF::SVFValue::getName</a></div><div class="ttdeci">const std::string & getName() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00243">SVFValue.h:243</a></div></div>
|
|
4701
|
-
<div class="ttc" id="aclassSVF_1_1SVFIRBuilder_html_ae4516ec05eabece1bc8e0cad1ec8cf1c"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#ae4516ec05eabece1bc8e0cad1ec8cf1c">SVF::SVFIRBuilder::getGepValVar</a></div><div class="ttdeci">NodeID getGepValVar(const Value *val, const AccessPath &ap, const SVFType *elementType)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#
|
|
4705
|
+
<div class="ttc" id="aclassSVF_1_1SVFIRBuilder_html_ae4516ec05eabece1bc8e0cad1ec8cf1c"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#ae4516ec05eabece1bc8e0cad1ec8cf1c">SVF::SVFIRBuilder::getGepValVar</a></div><div class="ttdeci">NodeID getGepValVar(const Value *val, const AccessPath &ap, const SVFType *elementType)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01193">SVFIRBuilder.cpp:1193</a></div></div>
|
|
4702
4706
|
<div class="ttc" id="aclassSVF_1_1SVFIRBuilder_html_af4b18e8e1fdfb117cb5dd1a81cea4b71"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#af4b18e8e1fdfb117cb5dd1a81cea4b71">SVF::SVFIRBuilder::initialiseNodes</a></div><div class="ttdeci">void initialiseNodes()</div><div class="ttdoc">Initialize nodes and edges.</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00182">SVFIRBuilder.cpp:182</a></div></div>
|
|
4703
4707
|
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a38ce45ae5f017c90115ce444b44d478c"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a38ce45ae5f017c90115ce444b44d478c">SVF::LLVMUtil::stripAllCasts</a></div><div class="ttdeci">const Value * stripAllCasts(const Value *val)</div><div class="ttdoc">Strip off the all casts.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00263">LLVMUtil.cpp:263</a></div></div>
|
|
4704
|
-
<div class="ttc" id="aclassSVF_1_1SVFIRBuilder_html_a4c6cd51def26ebd8e839df9fdc4b64b8"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a4c6cd51def26ebd8e839df9fdc4b64b8">SVF::SVFIRBuilder::visitGlobal</a></div><div class="ttdeci">void visitGlobal(SVFModule *svfModule)</div><div class="ttdoc">Handle globals including (global variable and functions)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#
|
|
4708
|
+
<div class="ttc" id="aclassSVF_1_1SVFIRBuilder_html_a4c6cd51def26ebd8e839df9fdc4b64b8"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a4c6cd51def26ebd8e839df9fdc4b64b8">SVF::SVFIRBuilder::visitGlobal</a></div><div class="ttdeci">void visitGlobal(SVFModule *svfModule)</div><div class="ttdoc">Handle globals including (global variable and functions)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00568">SVFIRBuilder.cpp:568</a></div></div>
|
|
4705
4709
|
<div class="ttc" id="aclassSVF_1_1SVFIRBuilder_html_a5e56beb1a362b6e596183b04d37fd9e0"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a5e56beb1a362b6e596183b04d37fd9e0">SVF::SVFIRBuilder::addBranchStmt</a></div><div class="ttdeci">void addBranchStmt(NodeID br, NodeID cond, const BranchStmt::SuccAndCondPairVec &succs)</div><div class="ttdoc">Add Branch statement.</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00343">SVFIRBuilder.h:343</a></div></div>
|
|
4706
4710
|
<div class="ttc" id="aclassSVF_1_1SVFBasicBlock_html_a7bde256bc906af7f7204929019f4a33e"><div class="ttname"><a href="classSVF_1_1SVFBasicBlock.html#a7bde256bc906af7f7204929019f4a33e">SVF::SVFBasicBlock::front</a></div><div class="ttdeci">const SVFInstruction * front() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00598">SVFValue.h:598</a></div></div>
|
|
4707
4711
|
<div class="ttc" id="anamespaceSVF_html_a8de26e1810ea0c3b1e8ad62f1c8a864d"><div class="ttname"><a href="namespaceSVF.html#a8de26e1810ea0c3b1e8ad62f1c8a864d">SVF::SuccBBAndCondValPairVec</a></div><div class="ttdeci">std::vector< SuccBBAndCondValPair > SuccBBAndCondValPairVec</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00183">BasicTypes.h:183</a></div></div>
|
|
@@ -4709,7 +4713,7 @@ Private Attributes</h2></td></tr>
|
|
|
4709
4713
|
<div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_acf40310917909e4234282c0695a43160"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">SVF::LLVMModuleSet::getLLVMModuleSet</a></div><div class="ttdeci">static LLVMModuleSet * getLLVMModuleSet()</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00101">LLVMModule.h:101</a></div></div>
|
|
4710
4714
|
<div class="ttc" id="aclassSVF_1_1SVFIRBuilder_html_a8bf1847f31ff90937ce76cd0c0af7edb"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a8bf1847f31ff90937ce76cd0c0af7edb">SVF::SVFIRBuilder::addBlackHoleAddrEdge</a></div><div class="ttdeci">void addBlackHoleAddrEdge(NodeID node)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00285">SVFIRBuilder.h:285</a></div></div>
|
|
4711
4715
|
<div class="ttc" id="aclassSVF_1_1IRGraph_html_a96010999a4e5013beb1c37ef753ff910"><div class="ttname"><a href="classSVF_1_1IRGraph.html#a96010999a4e5013beb1c37ef753ff910">SVF::IRGraph::getReturnNode</a></div><div class="ttdeci">NodeID getReturnNode(const SVFFunction *func) const</div><div class="ttdoc">GetReturnNode - Return the unique node representing the return value of a function.</div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8h_source.html#l00153">IRGraph.h:153</a></div></div>
|
|
4712
|
-
<div class="ttc" id="aclassSVF_1_1SVFIRBuilder_html_a09baa8c7246853c3faaed85b38f0da60"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a09baa8c7246853c3faaed85b38f0da60">SVF::SVFIRBuilder::sanityCheck</a></div><div class="ttdeci">void sanityCheck()</div><div class="ttdoc">Sanity check for SVFIR.</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#
|
|
4716
|
+
<div class="ttc" id="aclassSVF_1_1SVFIRBuilder_html_a09baa8c7246853c3faaed85b38f0da60"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a09baa8c7246853c3faaed85b38f0da60">SVF::SVFIRBuilder::sanityCheck</a></div><div class="ttdeci">void sanityCheck()</div><div class="ttdoc">Sanity check for SVFIR.</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01167">SVFIRBuilder.cpp:1167</a></div></div>
|
|
4713
4717
|
<div class="ttc" id="aclassSVF_1_1SVFIR_html_a69963e4030433103e84e57fc015871d8"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a69963e4030433103e84e57fc015871d8">SVF::SVFIR::addCallSiteArgs</a></div><div class="ttdeci">void addCallSiteArgs(CallICFGNode *callBlockNode, const SVFVar *arg)</div><div class="ttdoc">Add callsite arguments.</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00513">SVFIR.h:513</a></div></div>
|
|
4714
4718
|
<div class="ttc" id="aclassSVF_1_1SVFIR_html_a5298f34143ec3a2e6bb74ebad668cbbc"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a5298f34143ec3a2e6bb74ebad668cbbc">SVF::SVFIR::getBaseValVar</a></div><div class="ttdeci">NodeID getBaseValVar(NodeID nodeId)</div><div class="ttdoc">Base and Offset methods for Value and Object node.</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00519">SVFIR.cpp:519</a></div></div>
|
|
4715
4719
|
<div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a688bd5e1bf36b3e75bfcea9388871dc4"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a688bd5e1bf36b3e75bfcea9388871dc4">SVF::SVFUtil::isMemcpyExtFun</a></div><div class="ttdeci">bool isMemcpyExtFun(const SVFFunction *fun)</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00314">SVFUtil.h:314</a></div></div>
|
|
@@ -4734,7 +4738,7 @@ Private Attributes</h2></td></tr>
|
|
|
4734
4738
|
<div class="ttc" id="aclassSVF_1_1SVFIRBuilder_html_abaf03c3031ef3940c73e3cd8e8ca17b6"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#abaf03c3031ef3940c73e3cd8e8ca17b6">SVF::SVFIRBuilder::addCallEdge</a></div><div class="ttdeci">void addCallEdge(NodeID src, NodeID dst, const CallICFGNode *cs, const FunEntryICFGNode *entry)</div><div class="ttdoc">Add Call edge.</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00366">SVFIRBuilder.h:366</a></div></div>
|
|
4735
4739
|
<div class="ttc" id="aclassSVF_1_1SymbolTableInfo_html_aafd4da7cef6387bb974abe20185b7b96"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#aafd4da7cef6387bb974abe20185b7b96">SVF::SymbolTableInfo::retSyms</a></div><div class="ttdeci">FunToIDMapTy & retSyms()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00280">SymbolTableInfo.h:280</a></div></div>
|
|
4736
4740
|
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_ad56c48be3ba6ebb95416623256524097"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#ad56c48be3ba6ebb95416623256524097">SVF::LLVMUtil::getCallee</a></div><div class="ttdeci">const Function * getCallee(const CallBase *cs)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00074">LLVMUtil.h:74</a></div></div>
|
|
4737
|
-
<div class="ttc" id="aclassSVF_1_1SVFIRBuilder_html_a5aa87f9ea35b30b4b4797f8a7f9f293c"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a5aa87f9ea35b30b4b4797f8a7f9f293c">SVF::SVFIRBuilder::visitCallSite</a></div><div class="ttdeci">void visitCallSite(CallBase *cs)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#
|
|
4741
|
+
<div class="ttc" id="aclassSVF_1_1SVFIRBuilder_html_a5aa87f9ea35b30b4b4797f8a7f9f293c"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a5aa87f9ea35b30b4b4797f8a7f9f293c">SVF::SVFIRBuilder::visitCallSite</a></div><div class="ttdeci">void visitCallSite(CallBase *cs)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00822">SVFIRBuilder.cpp:822</a></div></div>
|
|
4738
4742
|
<div class="ttc" id="aclassSVF_1_1IRGraph_html_a0a18bca50f7cd3a1882754f19303d257"><div class="ttname"><a href="classSVF_1_1IRGraph.html#a0a18bca50f7cd3a1882754f19303d257">SVF::IRGraph::getNodeNumAfterPAGBuild</a></div><div class="ttdeci">u32_t getNodeNumAfterPAGBuild() const</div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8h_source.html#l00195">IRGraph.h:195</a></div></div>
|
|
4739
4743
|
<div class="ttc" id="aclassSVF_1_1SVFIRBuilder_html_aff99c8de4acf4eeaf01803dadf459b92"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#aff99c8de4acf4eeaf01803dadf459b92">SVF::SVFIRBuilder::getReturnNode</a></div><div class="ttdeci">NodeID getReturnNode(const SVFFunction *func)</div><div class="ttdoc">getReturnNode - Return the node representing the unique return value of a function.</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00105">SVFIRBuilder.h:105</a></div></div>
|
|
4740
4744
|
<div class="ttc" id="anamespaceSVF_html_aa962cc1d782cc46553251e96b64a754b"><div class="ttname"><a href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">SVF::PointerType</a></div><div class="ttdeci">llvm::PointerType PointerType</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00094">BasicTypes.h:94</a></div></div>
|
|
@@ -4780,6 +4784,7 @@ Private Attributes</h2></td></tr>
|
|
|
4780
4784
|
<div class="ttc" id="aclassSVF_1_1SVFType_html_a3672b4797c400aac90c6d36ce29e0e57"><div class="ttname"><a href="classSVF_1_1SVFType.html#a3672b4797c400aac90c6d36ce29e0e57">SVF::SVFType::getPointerTo</a></div><div class="ttdeci">const SVFPointerType * getPointerTo() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00297">SVFType.h:297</a></div></div>
|
|
4781
4785
|
<div class="ttc" id="anamespacellvm_html_a7cfc92a12082d69711c97bb3d1b99c48"><div class="ttname"><a href="namespacellvm.html#a7cfc92a12082d69711c97bb3d1b99c48">llvm::bridge_gep_end</a></div><div class="ttdeci">bridge_gep_iterator bridge_gep_end(const User *GEP)</div><div class="ttdef"><b>Definition:</b> <a href="GEPTypeBridgeIterator_8h_source.html#l00157">GEPTypeBridgeIterator.h:157</a></div></div>
|
|
4782
4786
|
<div class="ttc" id="aclassSVF_1_1SVFIR_html_a2b1de62f88588b068d4eed125049ed8d"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a2b1de62f88588b068d4eed125049ed8d">SVF::SVFIR::addBlackholePtrNode</a></div><div class="ttdeci">NodeID addBlackholePtrNode()</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00596">SVFIR.h:596</a></div></div>
|
|
4787
|
+
<div class="ttc" id="aclassSVF_1_1AccessPath_html_a5427d08c9eb9d86e66c2bff6aeba6bac"><div class="ttname"><a href="classSVF_1_1AccessPath.html#a5427d08c9eb9d86e66c2bff6aeba6bac">SVF::AccessPath::getConstantStructFldIdx</a></div><div class="ttdeci">APOffset getConstantStructFldIdx() const</div><div class="ttdoc">Get methods.</div><div class="ttdef"><b>Definition:</b> <a href="AccessPath_8h_source.html#l00100">AccessPath.h:100</a></div></div>
|
|
4783
4788
|
<div class="ttc" id="anamespaceSVF_html_a1d008c0666c145622b81d427be64c52d"><div class="ttname"><a href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">SVF::Type</a></div><div class="ttdeci">llvm::Type Type</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00081">BasicTypes.h:81</a></div></div>
|
|
4784
4789
|
<div class="ttc" id="aclassSVF_1_1ICFG_html_a881fe977f3a6fde223bd786121e35fcf"><div class="ttname"><a href="classSVF_1_1ICFG.html#a881fe977f3a6fde223bd786121e35fcf">SVF::ICFG::getRetICFGNode</a></div><div class="ttdeci">RetICFGNode * getRetICFGNode(const SVFInstruction *inst)</div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8cpp_source.html#l00254">ICFG.cpp:254</a></div></div>
|
|
4785
4790
|
<div class="ttc" id="aclassSVF_1_1CallPE_html"><div class="ttname"><a href="classSVF_1_1CallPE.html">SVF::CallPE</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00545">SVFStatements.h:545</a></div></div>
|
|
@@ -4802,14 +4807,13 @@ Private Attributes</h2></td></tr>
|
|
|
4802
4807
|
<div class="ttc" id="aclassSVF_1_1SVFIR_html_a38f6d0c7db935fd4e556761f96f1fa09"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a38f6d0c7db935fd4e556761f96f1fa09">SVF::SVFIR::addRetNode</a></div><div class="ttdeci">NodeID addRetNode(const SVFFunction *val, NodeID i)</div><div class="ttdoc">Add a unique return node for a procedure.</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00549">SVFIR.h:549</a></div></div>
|
|
4803
4808
|
<div class="ttc" id="aclassSVF_1_1SymbolTableInfo_html_a24df52313f8093bb651ae9da972cd663"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#a24df52313f8093bb651ae9da972cd663">SVF::SymbolTableInfo::getFlattenedElemIdx</a></div><div class="ttdeci">u32_t getFlattenedElemIdx(const SVFType *T, u32_t origId)</div><div class="ttdoc">Flattened element idx of an array or struct by considering stride.</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00181">SymbolTableInfo.cpp:181</a></div></div>
|
|
4804
4809
|
<div class="ttc" id="aclassSVF_1_1ICFG_html_aaf521832909781894659725300cf4f49"><div class="ttname"><a href="classSVF_1_1ICFG.html#aaf521832909781894659725300cf4f49">SVF::ICFG::getIntraICFGNode</a></div><div class="ttdeci">IntraICFGNode * getIntraICFGNode(const SVFInstruction *inst)</div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8cpp_source.html#l00265">ICFG.cpp:265</a></div></div>
|
|
4805
|
-
<div class="ttc" id="aclassSVF_1_1AccessPath_html_a68e49bb797a84ea035ea338549f2e054"><div class="ttname"><a href="classSVF_1_1AccessPath.html#a68e49bb797a84ea035ea338549f2e054">SVF::AccessPath::getConstantFieldIdx</a></div><div class="ttdeci">APOffset getConstantFieldIdx() const</div><div class="ttdoc">Get methods.</div><div class="ttdef"><b>Definition:</b> <a href="AccessPath_8h_source.html#l00098">AccessPath.h:98</a></div></div>
|
|
4806
4810
|
<div class="ttc" id="aclassSVF_1_1SVFStat_html_ac9d390c417df6f6af6b274618b87010d"><div class="ttname"><a href="classSVF_1_1SVFStat.html#ac9d390c417df6f6af6b274618b87010d">SVF::SVFStat::getClk</a></div><div class="ttdeci">static double getClk(bool mark=false)</div><div class="ttdef"><b>Definition:</b> <a href="SVFStat_8cpp_source.html#l00047">SVFStat.cpp:47</a></div></div>
|
|
4807
4811
|
<div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_ac1a9d20d62066ec4e181fad223669e32"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#ac1a9d20d62066ec4e181fad223669e32">SVF::LLVMModuleSet::getContext</a></div><div class="ttdeci">LLVMContext & getContext() const</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00329">LLVMModule.h:329</a></div></div>
|
|
4808
4812
|
<div class="ttc" id="aclassSVF_1_1SVFIRBuilder_html_a4e1b6797df3e7b98da876f50741e6a3a"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a4e1b6797df3e7b98da876f50741e6a3a">SVF::SVFIRBuilder::addGepEdge</a></div><div class="ttdeci">void addGepEdge(NodeID src, NodeID dst, const AccessPath &ap, bool constGep)</div><div class="ttdoc">Add Gep edge.</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00378">SVFIRBuilder.h:378</a></div></div>
|
|
4809
4813
|
<div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a2f74db48793a0db76c000ffecf9e1bd2"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a2f74db48793a0db76c000ffecf9e1bd2">SVF::SVFUtil::getTaskDataAtHareParForSite</a></div><div class="ttdeci">const SVFValue * getTaskDataAtHareParForSite(const CallSite cs)</div><div class="ttdoc">Return the task data argument of the parallel_for routine.</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00599">SVFUtil.h:599</a></div></div>
|
|
4810
4814
|
<div class="ttc" id="aclassSVF_1_1SVFIR_html_adb6db6407bdc9a39e5bf8cd941f0ad15"><div class="ttname"><a href="classSVF_1_1SVFIR.html#adb6db6407bdc9a39e5bf8cd941f0ad15">SVF::SVFIR::getTypeLocSetsMap</a></div><div class="ttdeci">SVFTypeLocSetsPair & getTypeLocSetsMap(NodeID argId)</div><div class="ttdoc">Given an arg NodeId, get its base SVFType* and all its field location sets.</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00231">SVFIR.h:231</a></div></div>
|
|
4811
|
-
<div class="ttc" id="aclassSVF_1_1SVFIRBuilder_html_af4e2ec8dee9fca167e20b01cc10b56fd"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#af4e2ec8dee9fca167e20b01cc10b56fd">SVF::SVFIRBuilder::getGlobalVarField</a></div><div class="ttdeci">NodeID getGlobalVarField(const GlobalVariable *gvar, u32_t offset, SVFType *tpy)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#
|
|
4812
|
-
<div class="ttc" id="aclassSVF_1_1SVFIRBuilder_html_abc394c99f0905c958a230412134eda01"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">SVF::SVFIRBuilder::setCurrentBBAndValueForPAGEdge</a></div><div class="ttdeci">void setCurrentBBAndValueForPAGEdge(PAGEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#
|
|
4815
|
+
<div class="ttc" id="aclassSVF_1_1SVFIRBuilder_html_af4e2ec8dee9fca167e20b01cc10b56fd"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#af4e2ec8dee9fca167e20b01cc10b56fd">SVF::SVFIRBuilder::getGlobalVarField</a></div><div class="ttdeci">NodeID getGlobalVarField(const GlobalVariable *gvar, u32_t offset, SVFType *tpy)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00463">SVFIRBuilder.cpp:463</a></div></div>
|
|
4816
|
+
<div class="ttc" id="aclassSVF_1_1SVFIRBuilder_html_abc394c99f0905c958a230412134eda01"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">SVF::SVFIRBuilder::setCurrentBBAndValueForPAGEdge</a></div><div class="ttdeci">void setCurrentBBAndValueForPAGEdge(PAGEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01239">SVFIRBuilder.cpp:1239</a></div></div>
|
|
4813
4817
|
<div class="ttc" id="aclassSVF_1_1ICFG_html_af1b2d2839f811a00103df87342dfc919"><div class="ttname"><a href="classSVF_1_1ICFG.html#af1b2d2839f811a00103df87342dfc919">SVF::ICFG::getFunExitICFGNode</a></div><div class="ttdeci">FunExitICFGNode * getFunExitICFGNode(const SVFFunction *fun)</div><div class="ttdoc">Add a function exit node.</div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8cpp_source.html#l00283">ICFG.cpp:283</a></div></div>
|
|
4814
4818
|
<div class="ttc" id="anamespaceSVF_html_a146d286041987860388da3d8bc85cee3"><div class="ttname"><a href="namespaceSVF.html#a146d286041987860388da3d8bc85cee3">SVF::ArrayType</a></div><div class="ttdeci">llvm::ArrayType ArrayType</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00093">BasicTypes.h:93</a></div></div>
|
|
4815
4819
|
<div class="ttc" id="aclassSVF_1_1SymbolTableInfo_html_ab582424fdb6d9674c1bd4466cdfbe497"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#ab582424fdb6d9674c1bd4466cdfbe497">SVF::SymbolTableInfo::constantSymID</a></div><div class="ttdeci">SymID constantSymID() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00193">SymbolTableInfo.h:193</a></div></div>
|
|
@@ -4829,7 +4833,7 @@ Private Attributes</h2></td></tr>
|
|
|
4829
4833
|
<div class="ttc" id="aclassSVF_1_1SVFType_html"><div class="ttname"><a href="classSVF_1_1SVFType.html">SVF::SVFType</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00242">SVFType.h:242</a></div></div>
|
|
4830
4834
|
<div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_aedfa6e9216c6c788c26aef1967689b76"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#aedfa6e9216c6c788c26aef1967689b76">SVF::SVFUtil::isHeapAllocExtCallViaArg</a></div><div class="ttdeci">bool isHeapAllocExtCallViaArg(const CallSite cs)</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00431">SVFUtil.h:431</a></div></div>
|
|
4831
4835
|
<div class="ttc" id="aclassSVF_1_1GepStmt_html_a6c74f234a6b40bc5292bb14874c2e600"><div class="ttname"><a href="classSVF_1_1GepStmt.html#a6c74f234a6b40bc5292bb14874c2e600">SVF::GepStmt::getAccessPath</a></div><div class="ttdeci">const AccessPath & getAccessPath() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00491">SVFStatements.h:491</a></div></div>
|
|
4832
|
-
<div class="ttc" id="aclassSVF_1_1AccessPath_html_ab95df74c97fba13206df48e00131e15f"><div class="ttname"><a href="classSVF_1_1AccessPath.html#ab95df74c97fba13206df48e00131e15f">SVF::AccessPath::setFldIdx</a></div><div class="ttdeci">void setFldIdx(APOffset idx)</div><div class="ttdef"><b>Definition:</b> <a href="AccessPath_8h_source.html#
|
|
4836
|
+
<div class="ttc" id="aclassSVF_1_1AccessPath_html_ab95df74c97fba13206df48e00131e15f"><div class="ttname"><a href="classSVF_1_1AccessPath.html#ab95df74c97fba13206df48e00131e15f">SVF::AccessPath::setFldIdx</a></div><div class="ttdeci">void setFldIdx(APOffset idx)</div><div class="ttdef"><b>Definition:</b> <a href="AccessPath_8h_source.html#l00104">AccessPath.h:104</a></div></div>
|
|
4833
4837
|
<div class="ttc" id="aclassSVF_1_1SVFIR_html_ac27b9eedd489f13175c010a32203abae"><div class="ttname"><a href="classSVF_1_1SVFIR.html#ac27b9eedd489f13175c010a32203abae">SVF::SVFIR::addFunArgs</a></div><div class="ttdeci">void addFunArgs(const SVFFunction *fun, const SVFVar *arg)</div><div class="ttdoc">Get/set method for function/callsite arguments and returns.</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00499">SVFIR.h:499</a></div></div>
|
|
4834
4838
|
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a76b0d0ac69c170838cfc8ee26f4518a0"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a76b0d0ac69c170838cfc8ee26f4518a0">SVF::LLVMUtil::getProgFunction</a></div><div class="ttdeci">const Function * getProgFunction(const std::string &funName)</div><div class="ttdoc">Get program entry function from module.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00088">LLVMUtil.h:88</a></div></div>
|
|
4835
4839
|
<div class="ttc" id="anamespaceSVF_html_a7875172ff434b2210eea7cecfbbd959e"><div class="ttname"><a href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">SVF::Instruction</a></div><div class="ttdeci">llvm::Instruction Instruction</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00085">BasicTypes.h:85</a></div></div>
|
|
@@ -4889,8 +4893,8 @@ Private Attributes</h2></td></tr>
|
|
|
4889
4893
|
<div class="ttc" id="aclassSVF_1_1SVFIRBuilder_html_a9e81039d17b70e6a3d7310d05fa73c45"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a9e81039d17b70e6a3d7310d05fa73c45">SVF::SVFIRBuilder::addUnaryOPEdge</a></div><div class="ttdeci">void addUnaryOPEdge(NodeID src, NodeID dst, u32_t opcode)</div><div class="ttdoc">Add Unary edge.</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00337">SVFIRBuilder.h:337</a></div></div>
|
|
4890
4894
|
<div class="ttc" id="anamespaceSVF_html_a8ad3aa124fabddc2fdd07c50403d70a9"><div class="ttname"><a href="namespaceSVF.html#a8ad3aa124fabddc2fdd07c50403d70a9">SVF::ConstantDataSequential</a></div><div class="ttdeci">llvm::ConstantDataSequential ConstantDataSequential</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00117">BasicTypes.h:117</a></div></div>
|
|
4891
4895
|
<div class="ttc" id="aclassSVF_1_1SVFIR_html_a1f77275b24345164f30d519238121f92"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a1f77275b24345164f30d519238121f92">SVF::SVFIR::addGepStmt</a></div><div class="ttdeci">GepStmt * addGepStmt(NodeID src, NodeID dst, const AccessPath &ap, bool constGep)</div><div class="ttdoc">Add Gep edge.</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00327">SVFIR.cpp:327</a></div></div>
|
|
4892
|
-
<div class="ttc" id="aclassSVF_1_1SVFIRBuilder_html_a892ab8cad098e9e9d8425e7f05e35c59"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a892ab8cad098e9e9d8425e7f05e35c59">SVF::SVFIRBuilder::getBaseValueForExtArg</a></div><div class="ttdeci">const Value * getBaseValueForExtArg(const Value *V)</div><div class="ttdoc">Get the base value of (i8* src and i8* dst) for external argument (e.g. memcpy(i8* dst,...</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#
|
|
4893
|
-
<div class="ttc" id="aclassSVF_1_1SVFIRBuilder_html_a5ae68d4465feb54fcb8fd0cf20b7a71a"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a5ae68d4465feb54fcb8fd0cf20b7a71a">SVF::SVFIRBuilder::handleIndCall</a></div><div class="ttdeci">void handleIndCall(CallBase *cs)</div><div class="ttdoc">Handle indirect call.</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#
|
|
4896
|
+
<div class="ttc" id="aclassSVF_1_1SVFIRBuilder_html_a892ab8cad098e9e9d8425e7f05e35c59"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a892ab8cad098e9e9d8425e7f05e35c59">SVF::SVFIRBuilder::getBaseValueForExtArg</a></div><div class="ttdeci">const Value * getBaseValueForExtArg(const Value *V)</div><div class="ttdoc">Get the base value of (i8* src and i8* dst) for external argument (e.g. memcpy(i8* dst,...</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01065">SVFIRBuilder.cpp:1065</a></div></div>
|
|
4897
|
+
<div class="ttc" id="aclassSVF_1_1SVFIRBuilder_html_a5ae68d4465feb54fcb8fd0cf20b7a71a"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a5ae68d4465feb54fcb8fd0cf20b7a71a">SVF::SVFIRBuilder::handleIndCall</a></div><div class="ttdeci">void handleIndCall(CallBase *cs)</div><div class="ttdoc">Handle indirect call.</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01122">SVFIRBuilder.cpp:1122</a></div></div>
|
|
4894
4898
|
<div class="ttc" id="aclassSVF_1_1NodeIDAllocator_html_a26b5e09e10448694435f74a8b622a7e8"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator.html#a26b5e09e10448694435f74a8b622a7e8">SVF::NodeIDAllocator::allocateValueId</a></div><div class="ttdeci">NodeID allocateValueId(void)</div><div class="ttdoc">Allocate a value ID as determined by the strategy.</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00128">NodeIDAllocator.cpp:128</a></div></div>
|
|
4895
4899
|
<div class="ttc" id="aclassSVF_1_1SymbolTableInfo_html_a26eb45eab3da4695a6e5bad51b01ddc5"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#a26eb45eab3da4695a6e5bad51b01ddc5">SVF::SymbolTableInfo::getTotalSymNum</a></div><div class="ttdeci">u32_t getTotalSymNum() const</div><div class="ttdoc">Statistics.</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00248">SymbolTableInfo.h:248</a></div></div>
|
|
4896
4900
|
<div class="ttc" id="aclassSVF_1_1IRGraph_html_a8b10c318674a47035d617b3ade4f069b"><div class="ttname"><a href="classSVF_1_1IRGraph.html#a8b10c318674a47035d617b3ade4f069b">SVF::IRGraph::getVarargNode</a></div><div class="ttdeci">NodeID getVarargNode(const SVFFunction *func) const</div><div class="ttdoc">getVarargNode - Return the unique node representing the variadic argument of a variadic function.</div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8h_source.html#l00158">IRGraph.h:158</a></div></div>
|
|
@@ -4909,7 +4913,7 @@ Private Attributes</h2></td></tr>
|
|
|
4909
4913
|
<div class="ttc" id="aclassSVF_1_1SymbolTableBuilder_html"><div class="ttname"><a href="classSVF_1_1SymbolTableBuilder.html">SVF::SymbolTableBuilder</a></div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableBuilder_8h_source.html#l00042">SymbolTableBuilder.h:42</a></div></div>
|
|
4910
4914
|
<div class="ttc" id="aclassSVF_1_1SVFIRBuilder_html_a15105737c91d01ba9daf2161fad220ef"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">SVF::SVFIRBuilder::setCurrentLocation</a></div><div class="ttdeci">void setCurrentLocation(const Value *val, const BasicBlock *bb)</div><div class="ttdoc">Set current basic block in order to keep track of control flow information.</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00241">SVFIRBuilder.h:241</a></div></div>
|
|
4911
4915
|
<div class="ttc" id="anamespaceSVF_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#l00050">SVFUtil.h:50</a></div></div>
|
|
4912
|
-
<div class="ttc" id="aclassSVF_1_1SVFIRBuilder_html_a7c401d6929e583be734c0c4e9957d0d7"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a7c401d6929e583be734c0c4e9957d0d7">SVF::SVFIRBuilder::getAccessPathFromBaseNode</a></div><div class="ttdeci">AccessPath getAccessPathFromBaseNode(NodeID nodeId)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#
|
|
4916
|
+
<div class="ttc" id="aclassSVF_1_1SVFIRBuilder_html_a7c401d6929e583be734c0c4e9957d0d7"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a7c401d6929e583be734c0c4e9957d0d7">SVF::SVFIRBuilder::getAccessPathFromBaseNode</a></div><div class="ttdeci">AccessPath getAccessPathFromBaseNode(NodeID nodeId)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01326">SVFIRBuilder.cpp:1326</a></div></div>
|
|
4913
4917
|
<div class="ttc" id="aclassSVF_1_1SVFIRBuilder_html_a89e8cc23aad23d2c326b4a5ff12535ca"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a89e8cc23aad23d2c326b4a5ff12535ca">SVF::SVFIRBuilder::addRetEdge</a></div><div class="ttdeci">void addRetEdge(NodeID src, NodeID dst, const CallICFGNode *cs, const FunExitICFGNode *exit)</div><div class="ttdoc">Add Return edge.</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00372">SVFIRBuilder.h:372</a></div></div>
|
|
4914
4918
|
<div class="ttc" id="aclassSVF_1_1SymbolTableInfo_html"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html">SVF::SymbolTableInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00047">SymbolTableInfo.h:47</a></div></div>
|
|
4915
4919
|
<div class="ttc" id="aclassSVF_1_1SVFIR_html_ad0977d55d947bdccd98d61c66d3f0cc7"><div class="ttname"><a href="classSVF_1_1SVFIR.html#ad0977d55d947bdccd98d61c66d3f0cc7">SVF::SVFIR::getGepValVar</a></div><div class="ttdeci">NodeID getGepValVar(const SVFValue *curInst, NodeID base, const AccessPath &ap) const</div><div class="ttdoc">Due to constraint expression, curInst is used to distinguish different instructions (e....</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00540">SVFIR.cpp:540</a></div></div>
|
|
@@ -4957,7 +4961,7 @@ Private Attributes</h2></td></tr>
|
|
|
4957
4961
|
<div class="ttc" id="aclassSVF_1_1SVFIR_html_a756ae2b40ec29f2f92c95919f615e5ec"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a756ae2b40ec29f2f92c95919f615e5ec">SVF::SVFIR::setICFG</a></div><div class="ttdeci">void setICFG(ICFG *i)</div><div class="ttdoc">Set/Get ICFG.</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00166">SVFIR.h:166</a></div></div>
|
|
4958
4962
|
<div class="ttc" id="aclassSVF_1_1SVFIR_html_a0814a6a71c4a8f08253bf16ad1ba5dc5"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a0814a6a71c4a8f08253bf16ad1ba5dc5">SVF::SVFIR::addVariantGepStmt</a></div><div class="ttdeci">GepStmt * addVariantGepStmt(NodeID src, NodeID dst, const AccessPath &ap)</div><div class="ttdoc">Add Variant(Gep) edge.</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00365">SVFIR.cpp:365</a></div></div>
|
|
4959
4963
|
<div class="ttc" id="aclassSVF_1_1SVFInstruction_html_ae009f41cbf48d949d4325e08fe8d7198"><div class="ttname"><a href="classSVF_1_1SVFInstruction.html#ae009f41cbf48d949d4325e08fe8d7198">SVF::SVFInstruction::getParent</a></div><div class="ttdeci">const SVFBasicBlock * getParent() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00658">SVFValue.h:658</a></div></div>
|
|
4960
|
-
<div class="ttc" id="aclassSVF_1_1SVFIRBuilder_html_ae7fcd2050a57a43bfed2c7fd1c41d250"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#ae7fcd2050a57a43bfed2c7fd1c41d250">SVF::SVFIRBuilder::InitialGlobal</a></div><div class="ttdeci">void InitialGlobal(const GlobalVariable *gvar, Constant *C, u32_t offset)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#
|
|
4964
|
+
<div class="ttc" id="aclassSVF_1_1SVFIRBuilder_html_ae7fcd2050a57a43bfed2c7fd1c41d250"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#ae7fcd2050a57a43bfed2c7fd1c41d250">SVF::SVFIRBuilder::InitialGlobal</a></div><div class="ttdeci">void InitialGlobal(const GlobalVariable *gvar, Constant *C, u32_t offset)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00490">SVFIRBuilder.cpp:490</a></div></div>
|
|
4961
4965
|
<div class="ttc" id="aclassSVF_1_1SVFInstruction_html"><div class="ttname"><a href="classSVF_1_1SVFInstruction.html">SVF::SVFInstruction</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00631">SVFValue.h:631</a></div></div>
|
|
4962
4966
|
<div class="ttc" id="aclassSVF_1_1Options_html_a88bb706e03a3dd04546b4ce62af7b140"><div class="ttname"><a href="classSVF_1_1Options.html#a88bb706e03a3dd04546b4ce62af7b140">SVF::Options::VtableInSVFIR</a></div><div class="ttdeci">static const Option< bool > VtableInSVFIR</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00248">Options.h:248</a></div></div>
|
|
4963
4967
|
<div class="ttc" id="anamespaceSVF_html_ad781b0b14e89773e774072b280658ef3"><div class="ttname"><a href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">SVF::s64_t</a></div><div class="ttdeci">signed long long s64_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00054">SVFType.h:54</a></div></div>
|
|
@@ -4967,7 +4971,7 @@ Private Attributes</h2></td></tr>
|
|
|
4967
4971
|
<div class="ttc" id="aclassSVF_1_1PAGBuilderFromFile_html"><div class="ttname"><a href="classSVF_1_1PAGBuilderFromFile.html">SVF::PAGBuilderFromFile</a></div><div class="ttdef"><b>Definition:</b> <a href="PAGBuilderFromFile_8h_source.html#l00041">PAGBuilderFromFile.h:41</a></div></div>
|
|
4968
4972
|
<div class="ttc" id="aclassSVF_1_1SVFValue_html_a7effb0f37f486745e0cdc3ae5e9c732b"><div class="ttname"><a href="classSVF_1_1SVFValue.html#a7effb0f37f486745e0cdc3ae5e9c732b">SVF::SVFValue::getSourceLoc</a></div><div class="ttdeci">virtual const std::string getSourceLoc() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00280">SVFValue.h:280</a></div></div>
|
|
4969
4973
|
<div class="ttc" id="aclassSVF_1_1SVFIR_html_a7eb14738f0cf08cc8b5c623c953db4ba"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a7eb14738f0cf08cc8b5c623c953db4ba">SVF::SVFIR::addCmpStmt</a></div><div class="ttdeci">CmpStmt * addCmpStmt(NodeID op1, NodeID op2, NodeID dst, u32_t predict)</div><div class="ttdoc">Add Copy edge.</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00127">SVFIR.cpp:127</a></div></div>
|
|
4970
|
-
<div class="ttc" id="aclassSVF_1_1SVFIRBuilder_html_a3ccc53ca9a6862674ee2ec3bd67aa515"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a3ccc53ca9a6862674ee2ec3bd67aa515">SVF::SVFIRBuilder::handleDirectCall</a></div><div class="ttdeci">void handleDirectCall(CallBase *cs, const Function *F)</div><div class="ttdoc">Handle direct call.</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#
|
|
4974
|
+
<div class="ttc" id="aclassSVF_1_1SVFIRBuilder_html_a3ccc53ca9a6862674ee2ec3bd67aa515"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a3ccc53ca9a6862674ee2ec3bd67aa515">SVF::SVFIRBuilder::handleDirectCall</a></div><div class="ttdeci">void handleDirectCall(CallBase *cs, const Function *F)</div><div class="ttdoc">Handle direct call.</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00999">SVFIRBuilder.cpp:999</a></div></div>
|
|
4971
4975
|
<div class="ttc" id="aclassSVF_1_1SVFCallInst_html_a496d0e963f0f6a4f9c08183fa91792b0"><div class="ttname"><a href="classSVF_1_1SVFCallInst.html#a496d0e963f0f6a4f9c08183fa91792b0">SVF::SVFCallInst::arg_size</a></div><div class="ttdeci">u32_t arg_size() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00738">SVFValue.h:738</a></div></div>
|
|
4972
4976
|
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_aa0b3e34188f721ff7145e47cb607c79a"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#aa0b3e34188f721ff7145e47cb607c79a">SVF::LLVMUtil::isCmpConstantExpr</a></div><div class="ttdeci">const ConstantExpr * isCmpConstantExpr(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00298">LLVMUtil.h:298</a></div></div>
|
|
4973
4977
|
<div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_abba4111230f6009bbf50518ee36a9870"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#abba4111230f6009bbf50518ee36a9870">SVF::LLVMUtil::getPtrElementType</a></div><div class="ttdeci">static Type * getPtrElementType(const PointerType *pty)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00119">LLVMUtil.h:119</a></div></div>
|