svf-tools 1.0.746 → 1.0.748

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +1 -1
  2. package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +1181 -1173
  3. package/SVF-doxygen/html/html/LLVMModule_8h_source.html +29 -29
  4. package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +2 -2
  5. package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +1 -1
  6. package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +1 -1
  7. package/SVF-doxygen/html/html/SrcSnkSolver_8h_source.html +5 -4
  8. package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +2 -2
  9. package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +1 -1
  10. package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet-members.html +1 -1
  11. package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +1154 -1145
  12. package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +1 -1
  13. package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +1 -1
  14. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +2 -2
  15. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkSolver-members.html +2 -2
  16. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkSolver.html +12 -12
  17. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +2 -2
  18. package/SVF-doxygen/html/html/functions_func_l.html +2 -2
  19. package/SVF-doxygen/html/html/functions_g.html +1 -1
  20. package/SVF-doxygen/html/html/functions_i.html +1 -1
  21. package/SVF-doxygen/html/html/functions_l.html +2 -2
  22. package/SVF-doxygen/html/html/functions_type_g.html +1 -1
  23. package/SVF-doxygen/html/html/functions_type_i.html +1 -1
  24. package/SVF-doxygen/html/html/search/all_7.js +1 -1
  25. package/SVF-doxygen/html/html/search/all_9.js +1 -1
  26. package/SVF-doxygen/html/html/search/all_c.js +1 -1
  27. package/SVF-doxygen/html/html/search/functions_b.js +1 -1
  28. package/SVF-doxygen/html/html/search/typedefs_6.js +1 -1
  29. package/SVF-doxygen/html/html/search/typedefs_7.js +1 -1
  30. package/SVF-doxygen/html/html/svf-llvm_2tools_2MTA_2MTAResultValidator_8h_source.html +1 -1
  31. package/SVF-doxygen/html/html/svf_2include_2MTA_2MTAResultValidator_8h_source.html +1 -1
  32. package/package.json +1 -1
  33. package/svf/include/SABER/SrcSnkSolver.h +2 -2
  34. package/svf-llvm/include/SVF-LLVM/LLVMModule.h +1 -1
  35. package/svf-llvm/lib/LLVMModule.cpp +14 -6
@@ -185,1173 +185,1181 @@ $(function() {
185
185
  <div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html">LLVMModuleSet</a>* mset = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">getLLVMModuleSet</a>();</div>
186
186
  <div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; </div>
187
187
  <div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; mset-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a298966366b02d0a34f409c2c77da3789">loadModules</a>(moduleNameVec);</div>
188
- <div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; </div>
189
- <div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">if</span> (!moduleNameVec.empty())</div>
190
- <div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; {</div>
191
- <div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <a class="code" href="classSVF_1_1SVFModule.html#ab930bb5449538c4d0da1297a103788a1">SVFModule::getSVFModule</a>()-&gt;<a class="code" href="classSVF_1_1SVFModule.html#acaba1ff38ed1fdd8a9a1251a1b36be92">setModuleIdentifier</a>(moduleNameVec.front());</div>
192
- <div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; }</div>
193
- <div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; </div>
194
- <div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; mset-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#af8edfe08027020f14b81b44362c6018e">build</a>();</div>
195
- <div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; </div>
196
- <div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordtype">double</span> endSVFModuleTime = <a class="code" href="classSVF_1_1SVFStat.html#ac9d390c417df6f6af6b274618b87010d">SVFStat::getClk</a>(<span class="keyword">true</span>);</div>
197
- <div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <a class="code" href="classSVF_1_1SVFStat.html#aa4950ec26b66a085ad38ac154b789db5">SVFStat::timeOfBuildingLLVMModule</a> =</div>
198
- <div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; (endSVFModuleTime - startSVFModuleTime) / <a class="code" href="SVFType_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div>
199
- <div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; </div>
200
- <div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; mset-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a15e97e3f2ba62d3fe444bb17cd637dbd">buildSymbolTable</a>();</div>
201
- <div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="comment">// Don&#39;t releaseLLVMModuleSet() here, as IRBuilder might still need LLVMMoudleSet</span></div>
202
- <div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFModule.html#ab930bb5449538c4d0da1297a103788a1">SVFModule::getSVFModule</a>();</div>
203
- <div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;}</div>
204
- <div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; </div>
205
- <div class="line"><a name="l00135"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a15e97e3f2ba62d3fe444bb17cd637dbd"> 135</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a15e97e3f2ba62d3fe444bb17cd637dbd">LLVMModuleSet::buildSymbolTable</a>()<span class="keyword"> const</span></div>
206
- <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;<span class="keyword"></span>{</div>
207
- <div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordtype">double</span> startSymInfoTime = <a class="code" href="classSVF_1_1SVFStat.html#ac9d390c417df6f6af6b274618b87010d">SVFStat::getClk</a>(<span class="keyword">true</span>);</div>
208
- <div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1SVFModule.html#a1357c876eccedd58b3abe68875b3a570">SVFModule::pagReadFromTXT</a>())</div>
209
- <div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; {</div>
210
- <div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a4550f2fb815882edfb666ac818792064">SVFUtil::pasMsg</a>(<span class="stringliteral">&quot;Building Symbol table ...\n&quot;</span>));</div>
211
- <div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <a class="code" href="classSVF_1_1SymbolTableBuilder.html">SymbolTableBuilder</a> builder(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a5552135a27684cbe4d2a5ed346f64644">symInfo</a>);</div>
212
- <div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; builder.<a class="code" href="classSVF_1_1SymbolTableBuilder.html#aef0bb1e88d0b69313c673318f7b7cb5f">buildMemModel</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a43832e93a42ae43d44b0cc160981678f">svfModule</a>);</div>
213
- <div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; }</div>
214
- <div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordtype">double</span> endSymInfoTime = <a class="code" href="classSVF_1_1SVFStat.html#ac9d390c417df6f6af6b274618b87010d">SVFStat::getClk</a>(<span class="keyword">true</span>);</div>
215
- <div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <a class="code" href="classSVF_1_1SVFStat.html#ae89293bc063bdc74a988e9c37c70321e">SVFStat::timeOfBuildingSymbolTable</a> =</div>
216
- <div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; (endSymInfoTime - startSymInfoTime) / <a class="code" href="SVFType_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div>
217
- <div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;}</div>
218
- <div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; </div>
219
- <div class="line"><a name="l00150"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#af8edfe08027020f14b81b44362c6018e"> 150</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#af8edfe08027020f14b81b44362c6018e">LLVMModuleSet::build</a>()</div>
220
- <div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;{</div>
221
- <div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a3204400c52ec55da70418471d5c9bad5">preProcessed</a>==<span class="keyword">false</span>)</div>
222
- <div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a8b5f24c873db1f6a0614d1dac48bb4bb">prePassSchedule</a>();</div>
223
- <div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; </div>
224
- <div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#ac7c646a78c989807c52263fc35fb3628">buildFunToFunMap</a>();</div>
225
- <div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#aaab03cb6ff665bc008c67b866ba81e47">buildGlobalDefToRepMap</a>();</div>
226
- <div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; </div>
227
- <div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a3a718b0a27c2d13878c0718af97ad73d">Options::SVFMain</a>())</div>
228
- <div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a8af6b911b728713f66f7c809d5c0fbf1">addSVFMain</a>();</div>
229
- <div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; </div>
230
- <div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a4ca8c4678a7fefe26372fc1f4b2880fd">createSVFDataStructure</a>();</div>
231
- <div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#ac6a5540354696f4c9170e0a5832ba70e">initSVFFunction</a>();</div>
232
- <div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;}</div>
233
- <div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; </div>
234
- <div class="line"><a name="l00165"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a4ca8c4678a7fefe26372fc1f4b2880fd"> 165</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a4ca8c4678a7fefe26372fc1f4b2880fd">LLVMModuleSet::createSVFDataStructure</a>()</div>
235
- <div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;{</div>
236
- <div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(IntegerType::getInt8Ty(<a class="code" href="classSVF_1_1LLVMModuleSet.html#ac1a9d20d62066ec4e181fad223669e32">getContext</a>()));</div>
237
- <div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const Function*&gt;</a> candidateDecls;</div>
238
- <div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const Function*&gt;</a> candidateDefs;</div>
239
- <div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a>&amp; mod : <a class="code" href="classSVF_1_1LLVMModuleSet.html#acde6292e719c80f93d3d1c344ab442cd">modules</a>)</div>
240
- <div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; {</div>
241
- <div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>&amp; func : mod.functions())</div>
242
- <div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; {</div>
243
- <div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keywordflow">if</span> (func.isDeclaration())</div>
244
- <div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; {</div>
245
- <div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; candidateDecls.insert(&amp;func);</div>
246
- <div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; }</div>
247
- <div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="keywordflow">else</span></div>
248
- <div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; {</div>
249
- <div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordflow">if</span> (mod.getName().str() == <a class="code" href="classSVF_1_1Options.html#a2ed1e6f7911ae5cfbf79213e4d07531e">Options::ExtAPIInput</a>() &amp;&amp; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a377cefaad4b688ab6edf94ba4abe00ee">FunDefToDeclsMap</a>[&amp;func].empty())</div>
250
- <div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; {</div>
251
- <div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="keywordflow">continue</span>;</div>
252
- <div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; }</div>
253
- <div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="keywordflow">else</span></div>
254
- <div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; {</div>
255
- <div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; candidateDecls.insert(&amp;func);</div>
256
- <div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; }</div>
257
- <div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; }</div>
258
- <div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; }</div>
259
- <div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; }</div>
260
- <div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* func: candidateDefs)</div>
261
- <div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; {</div>
262
- <div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a024f5de163fde6f63cb2d762b4b28d8a">createSVFFunction</a>(func);</div>
263
- <div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; }</div>
264
- <div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; </div>
265
- <div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* func: candidateDecls)</div>
266
- <div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; {</div>
267
- <div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a024f5de163fde6f63cb2d762b4b28d8a">createSVFFunction</a>(func);</div>
268
- <div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; }</div>
269
- <div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; </div>
270
- <div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a>&amp; mod : <a class="code" href="classSVF_1_1LLVMModuleSet.html#acde6292e719c80f93d3d1c344ab442cd">modules</a>)</div>
271
- <div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; {</div>
272
- <div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>&amp; global : mod.globals())</div>
273
- <div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; {</div>
274
- <div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <a class="code" href="classSVF_1_1SVFGlobalValue.html">SVFGlobalValue</a>* svfglobal = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFGlobalValue.html">SVFGlobalValue</a>(</div>
275
- <div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; global.getName().str(), <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(global.getType()));</div>
276
- <div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a43832e93a42ae43d44b0cc160981678f">svfModule</a>-&gt;<a class="code" href="classSVF_1_1SVFModule.html#a0bc5a63d8c10da51766007cf40b095e5">addGlobalSet</a>(svfglobal);</div>
277
- <div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a7de84e7817406867b173e1591e0681ac">addGlobalValueMap</a>(&amp;global, svfglobal);</div>
278
- <div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; }</div>
279
- <div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; </div>
280
- <div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a0fd33072b099f61eaa642e94ed0c03fc">GlobalAlias</a>&amp; alias : mod.aliases())</div>
281
- <div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; {</div>
282
- <div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <a class="code" href="classSVF_1_1SVFGlobalValue.html">SVFGlobalValue</a>* svfalias = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFGlobalValue.html">SVFGlobalValue</a>(</div>
283
- <div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; alias.getName().str(), <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(alias.getType()));</div>
284
- <div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a43832e93a42ae43d44b0cc160981678f">svfModule</a>-&gt;<a class="code" href="classSVF_1_1SVFModule.html#aa6627399cf4d30d576f76f681d83449d">addAliasSet</a>(svfalias);</div>
285
- <div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a7de84e7817406867b173e1591e0681ac">addGlobalValueMap</a>(&amp;alias, svfalias);</div>
286
- <div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; }</div>
287
- <div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; </div>
288
- <div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aacffd97ab4cb45aeae2e67ec479889aa">GlobalIFunc</a>&amp; ifunc : mod.ifuncs())</div>
289
- <div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; {</div>
290
- <div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <a class="code" href="classSVF_1_1SVFGlobalValue.html">SVFGlobalValue</a>* svfifunc = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFGlobalValue.html">SVFGlobalValue</a>(</div>
291
- <div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; ifunc.getName().str(), <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(ifunc.getType()));</div>
292
- <div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a43832e93a42ae43d44b0cc160981678f">svfModule</a>-&gt;<a class="code" href="classSVF_1_1SVFModule.html#aa6627399cf4d30d576f76f681d83449d">addAliasSet</a>(svfifunc);</div>
293
- <div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a7de84e7817406867b173e1591e0681ac">addGlobalValueMap</a>(&amp;ifunc, svfifunc);</div>
294
- <div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; }</div>
295
- <div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; }</div>
296
- <div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160;}</div>
297
- <div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; </div>
298
- <div class="line"><a name="l00239"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a024f5de163fde6f63cb2d762b4b28d8a"> 239</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a024f5de163fde6f63cb2d762b4b28d8a">LLVMModuleSet::createSVFFunction</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* func)</div>
299
- <div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160;{</div>
300
- <div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svfFunc = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>(</div>
301
- <div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(func-&gt;getType()),</div>
302
- <div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; SVFUtil::cast&lt;SVFFunctionType&gt;(</div>
303
- <div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(func-&gt;getFunctionType())),</div>
304
- <div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; func-&gt;isDeclaration(), <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a4638a12f5481dff947b59cf8353e619b">LLVMUtil::isIntrinsicFun</a>(func),</div>
305
- <div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; func-&gt;hasAddressTaken(), func-&gt;isVarArg(), <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFLoopAndDomInfo.html">SVFLoopAndDomInfo</a>);</div>
306
- <div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; svfFunc-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a8325774df9d65d78ef6a66fef59b9a97">setName</a>(func-&gt;getName().str());</div>
307
- <div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a43832e93a42ae43d44b0cc160981678f">svfModule</a>-&gt;<a class="code" href="classSVF_1_1SVFModule.html#a8a0fe93cc13b799fc28540fb312573c6">addFunctionSet</a>(svfFunc);</div>
308
- <div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#ab671d5bb9ca5761e2b438a4d4da229cf">addFunctionMap</a>(func, svfFunc);</div>
309
- <div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; </div>
310
- <div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a58cdfbc4160cae08745b67844ac29801">Argument</a>&amp; arg : func-&gt;args())</div>
311
- <div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; {</div>
312
- <div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <a class="code" href="classSVF_1_1SVFArgument.html">SVFArgument</a>* svfarg = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFArgument.html">SVFArgument</a>(</div>
313
- <div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(arg.getType()), svfFunc, arg.getArgNo(),</div>
314
- <div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a428bd75b33fab60988d8758090712f29">LLVMUtil::isArgOfUncalledFunction</a>(&amp;arg));</div>
315
- <div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="comment">// Setting up arg name</span></div>
316
- <div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keywordflow">if</span> (arg.hasName())</div>
317
- <div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; svfarg-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a8325774df9d65d78ef6a66fef59b9a97">setName</a>(arg.getName().str());</div>
318
- <div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordflow">else</span></div>
319
- <div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; svfarg-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a8325774df9d65d78ef6a66fef59b9a97">setName</a>(std::to_string(arg.getArgNo()));</div>
320
- <div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; </div>
321
- <div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; svfFunc-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#ad865b8440a6e0d5d212798d2213e1e9c">addArgument</a>(svfarg);</div>
322
- <div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5595ec3f7582934dc499770825bf5373">addArgumentMap</a>(&amp;arg, svfarg);</div>
323
- <div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; }</div>
324
- <div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; </div>
325
- <div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>&amp; bb : *func)</div>
326
- <div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; {</div>
327
- <div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* svfBB =</div>
328
- <div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(bb.getType()), svfFunc);</div>
329
- <div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keywordflow">if</span> (bb.hasName())</div>
330
- <div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; svfBB-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a8325774df9d65d78ef6a66fef59b9a97">setName</a>(bb.getName().str());</div>
331
- <div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; svfFunc-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#a0d5031bd11b6372803082111ec2cb4f6">addBasicBlock</a>(svfBB);</div>
332
- <div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a3eaadb33cd21d0bd868526b5ddb051d9">addBasicBlockMap</a>(&amp;bb, svfBB);</div>
333
- <div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>&amp; inst : bb)</div>
334
- <div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; {</div>
335
- <div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfInst = <span class="keyword">nullptr</span>;</div>
336
- <div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* call = SVFUtil::dyn_cast&lt;CallBase&gt;(&amp;inst))</div>
337
- <div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; {</div>
338
- <div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#ab1b4c565ae6be788b934defc21a5cfaf">LLVMUtil::isVirtualCallSite</a>(call))</div>
339
- <div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; svfInst = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFVirtualCallInst.html">SVFVirtualCallInst</a>(</div>
340
- <div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(call-&gt;getType()), svfBB,</div>
341
- <div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; call-&gt;getFunctionType()-&gt;isVarArg(),</div>
342
- <div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; inst.isTerminator());</div>
343
- <div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="keywordflow">else</span></div>
344
- <div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; svfInst = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFCallInst.html">SVFCallInst</a>(</div>
345
- <div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(call-&gt;getType()), svfBB,</div>
346
- <div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; call-&gt;getFunctionType()-&gt;isVarArg(),</div>
347
- <div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; inst.isTerminator());</div>
348
- <div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; }</div>
349
- <div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keywordflow">else</span></div>
350
- <div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; {</div>
351
- <div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; svfInst =</div>
352
- <div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(inst.getType()),</div>
353
- <div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; svfBB, inst.isTerminator(),</div>
354
- <div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; SVFUtil::isa&lt;ReturnInst&gt;(inst));</div>
355
- <div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; }</div>
356
- <div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; </div>
357
- <div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="comment">// Set instruction&#39;s string representation</span></div>
358
- <div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keywordflow">if</span> (inst.hasName() &amp;&amp; !inst.getName().empty())</div>
359
- <div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; {</div>
360
- <div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; svfInst-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a8325774df9d65d78ef6a66fef59b9a97">setName</a>(inst.getName().str());</div>
361
- <div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; }</div>
362
- <div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keywordflow">else</span></div>
363
- <div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; {</div>
364
- <div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a7b8b93fec1dc8c63c0a5837a85b99129">LLVMUtil::llvmToString</a>(inst);</div>
365
- <div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keyword">auto</span> it = str.begin(), ite = str.end();</div>
366
- <div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <span class="keywordflow">while</span> (it != ite &amp;&amp; std::isspace(*it))</div>
367
- <div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; ++it;</div>
368
- <div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="comment">// 0xf (15) is the max length a local string can hold</span></div>
369
- <div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; svfInst-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a8325774df9d65d78ef6a66fef59b9a97">setName</a>({it, std::min(it + 0xf, ite)});</div>
370
- <div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; }</div>
371
- <div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; svfBB-&gt;<a class="code" href="classSVF_1_1SVFBasicBlock.html#ac1b15d8f9c2499add8dbc889ae5cab65">addInstruction</a>(svfInst);</div>
372
- <div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a172084437a8450314a17f7085a32b5d2">addInstructionMap</a>(&amp;inst, svfInst);</div>
373
- <div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; }</div>
374
- <div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; }</div>
375
- <div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160;}</div>
376
- <div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; </div>
377
- <div class="line"><a name="l00318"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#ac6a5540354696f4c9170e0a5832ba70e"> 318</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#ac6a5540354696f4c9170e0a5832ba70e">LLVMModuleSet::initSVFFunction</a>()</div>
378
- <div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160;{</div>
379
- <div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a>&amp; mod : <a class="code" href="classSVF_1_1LLVMModuleSet.html#acde6292e719c80f93d3d1c344ab442cd">modules</a>)</div>
380
- <div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; {</div>
381
- <div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>&amp; f : mod.functions())</div>
382
- <div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; {</div>
383
- <div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svffun = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a50fc24901350df9db890ba16a9b87e33">getSVFFunction</a>(&amp;f);</div>
384
- <div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a20162d2894d6a12ba29410311fba4002">initSVFBasicBlock</a>(&amp;f);</div>
385
- <div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; </div>
386
- <div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">SVFUtil::isExtCall</a>(svffun))</div>
387
- <div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; {</div>
388
- <div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a8ba9092747108e0289014d52465a692d">initDomTree</a>(svffun, &amp;f);</div>
389
- <div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; }</div>
390
- <div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; }</div>
391
- <div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; }</div>
392
- <div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160;}</div>
188
+ <div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; mset-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a8820d1df9098db6eadf3a9c67e380e55">loadExtAPIModules</a>();</div>
189
+ <div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; </div>
190
+ <div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordflow">if</span> (!moduleNameVec.empty())</div>
191
+ <div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; {</div>
192
+ <div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <a class="code" href="classSVF_1_1SVFModule.html#ab930bb5449538c4d0da1297a103788a1">SVFModule::getSVFModule</a>()-&gt;<a class="code" href="classSVF_1_1SVFModule.html#acaba1ff38ed1fdd8a9a1251a1b36be92">setModuleIdentifier</a>(moduleNameVec.front());</div>
193
+ <div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; }</div>
194
+ <div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; </div>
195
+ <div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; mset-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#af8edfe08027020f14b81b44362c6018e">build</a>();</div>
196
+ <div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; </div>
197
+ <div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordtype">double</span> endSVFModuleTime = <a class="code" href="classSVF_1_1SVFStat.html#ac9d390c417df6f6af6b274618b87010d">SVFStat::getClk</a>(<span class="keyword">true</span>);</div>
198
+ <div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <a class="code" href="classSVF_1_1SVFStat.html#aa4950ec26b66a085ad38ac154b789db5">SVFStat::timeOfBuildingLLVMModule</a> =</div>
199
+ <div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; (endSVFModuleTime - startSVFModuleTime) / <a class="code" href="SVFType_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div>
200
+ <div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; </div>
201
+ <div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; mset-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a15e97e3f2ba62d3fe444bb17cd637dbd">buildSymbolTable</a>();</div>
202
+ <div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="comment">// Don&#39;t releaseLLVMModuleSet() here, as IRBuilder might still need LLVMMoudleSet</span></div>
203
+ <div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFModule.html#ab930bb5449538c4d0da1297a103788a1">SVFModule::getSVFModule</a>();</div>
204
+ <div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;}</div>
205
+ <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; </div>
206
+ <div class="line"><a name="l00136"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a15e97e3f2ba62d3fe444bb17cd637dbd"> 136</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a15e97e3f2ba62d3fe444bb17cd637dbd">LLVMModuleSet::buildSymbolTable</a>()<span class="keyword"> const</span></div>
207
+ <div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;<span class="keyword"></span>{</div>
208
+ <div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordtype">double</span> startSymInfoTime = <a class="code" href="classSVF_1_1SVFStat.html#ac9d390c417df6f6af6b274618b87010d">SVFStat::getClk</a>(<span class="keyword">true</span>);</div>
209
+ <div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1SVFModule.html#a1357c876eccedd58b3abe68875b3a570">SVFModule::pagReadFromTXT</a>())</div>
210
+ <div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; {</div>
211
+ <div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a4550f2fb815882edfb666ac818792064">SVFUtil::pasMsg</a>(<span class="stringliteral">&quot;Building Symbol table ...\n&quot;</span>));</div>
212
+ <div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <a class="code" href="classSVF_1_1SymbolTableBuilder.html">SymbolTableBuilder</a> builder(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a5552135a27684cbe4d2a5ed346f64644">symInfo</a>);</div>
213
+ <div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; builder.<a class="code" href="classSVF_1_1SymbolTableBuilder.html#aef0bb1e88d0b69313c673318f7b7cb5f">buildMemModel</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a43832e93a42ae43d44b0cc160981678f">svfModule</a>);</div>
214
+ <div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; }</div>
215
+ <div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordtype">double</span> endSymInfoTime = <a class="code" href="classSVF_1_1SVFStat.html#ac9d390c417df6f6af6b274618b87010d">SVFStat::getClk</a>(<span class="keyword">true</span>);</div>
216
+ <div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <a class="code" href="classSVF_1_1SVFStat.html#ae89293bc063bdc74a988e9c37c70321e">SVFStat::timeOfBuildingSymbolTable</a> =</div>
217
+ <div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; (endSymInfoTime - startSymInfoTime) / <a class="code" href="SVFType_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div>
218
+ <div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;}</div>
219
+ <div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; </div>
220
+ <div class="line"><a name="l00151"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#af8edfe08027020f14b81b44362c6018e"> 151</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#af8edfe08027020f14b81b44362c6018e">LLVMModuleSet::build</a>()</div>
221
+ <div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;{</div>
222
+ <div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a3204400c52ec55da70418471d5c9bad5">preProcessed</a>==<span class="keyword">false</span>)</div>
223
+ <div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a8b5f24c873db1f6a0614d1dac48bb4bb">prePassSchedule</a>();</div>
224
+ <div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; </div>
225
+ <div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#ac7c646a78c989807c52263fc35fb3628">buildFunToFunMap</a>();</div>
226
+ <div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#aaab03cb6ff665bc008c67b866ba81e47">buildGlobalDefToRepMap</a>();</div>
227
+ <div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; </div>
228
+ <div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a3a718b0a27c2d13878c0718af97ad73d">Options::SVFMain</a>())</div>
229
+ <div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a8af6b911b728713f66f7c809d5c0fbf1">addSVFMain</a>();</div>
230
+ <div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; </div>
231
+ <div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a4ca8c4678a7fefe26372fc1f4b2880fd">createSVFDataStructure</a>();</div>
232
+ <div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#ac6a5540354696f4c9170e0a5832ba70e">initSVFFunction</a>();</div>
233
+ <div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;}</div>
234
+ <div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; </div>
235
+ <div class="line"><a name="l00166"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a4ca8c4678a7fefe26372fc1f4b2880fd"> 166</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a4ca8c4678a7fefe26372fc1f4b2880fd">LLVMModuleSet::createSVFDataStructure</a>()</div>
236
+ <div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;{</div>
237
+ <div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(IntegerType::getInt8Ty(<a class="code" href="classSVF_1_1LLVMModuleSet.html#ac1a9d20d62066ec4e181fad223669e32">getContext</a>()));</div>
238
+ <div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const Function*&gt;</a> candidateDecls;</div>
239
+ <div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const Function*&gt;</a> candidateDefs;</div>
240
+ <div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; </div>
241
+ <div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a>&amp; mod : <a class="code" href="classSVF_1_1LLVMModuleSet.html#acde6292e719c80f93d3d1c344ab442cd">modules</a>)</div>
242
+ <div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; {</div>
243
+ <div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; std::vector&lt;Function*&gt; removedFuncList;</div>
244
+ <div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>&amp; func : mod.functions())</div>
245
+ <div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; {</div>
246
+ <div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keywordflow">if</span> (func.isDeclaration())</div>
247
+ <div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; {</div>
248
+ <div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; candidateDecls.insert(&amp;func);</div>
249
+ <div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; }</div>
250
+ <div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordflow">else</span></div>
251
+ <div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; {</div>
252
+ <div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="keywordflow">if</span> (mod.getName().str() == <a class="code" href="classSVF_1_1Options.html#a2ed1e6f7911ae5cfbf79213e4d07531e">Options::ExtAPIInput</a>() &amp;&amp; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a377cefaad4b688ab6edf94ba4abe00ee">FunDefToDeclsMap</a>[&amp;func].empty() &amp;&amp; func.getName().str() != <span class="stringliteral">&quot;svf__main&quot;</span>)</div>
253
+ <div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; {</div>
254
+ <div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; removedFuncList.push_back(&amp;func);</div>
255
+ <div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordflow">continue</span>;</div>
256
+ <div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; }</div>
257
+ <div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="keywordflow">else</span></div>
258
+ <div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; {</div>
259
+ <div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; candidateDefs.insert(&amp;func);</div>
260
+ <div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; }</div>
261
+ <div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; }</div>
262
+ <div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; }</div>
263
+ <div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* func : removedFuncList)</div>
264
+ <div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; {</div>
265
+ <div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; mod.getFunctionList().remove(func);</div>
266
+ <div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; }</div>
267
+ <div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; }</div>
268
+ <div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* func: candidateDefs)</div>
269
+ <div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; {</div>
270
+ <div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a024f5de163fde6f63cb2d762b4b28d8a">createSVFFunction</a>(func);</div>
271
+ <div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; }</div>
272
+ <div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; </div>
273
+ <div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* func: candidateDecls)</div>
274
+ <div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; {</div>
275
+ <div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a024f5de163fde6f63cb2d762b4b28d8a">createSVFFunction</a>(func);</div>
276
+ <div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; }</div>
277
+ <div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; </div>
278
+ <div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a>&amp; mod : <a class="code" href="classSVF_1_1LLVMModuleSet.html#acde6292e719c80f93d3d1c344ab442cd">modules</a>)</div>
279
+ <div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; {</div>
280
+ <div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>&amp; global : mod.globals())</div>
281
+ <div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; {</div>
282
+ <div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <a class="code" href="classSVF_1_1SVFGlobalValue.html">SVFGlobalValue</a>* svfglobal = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFGlobalValue.html">SVFGlobalValue</a>(</div>
283
+ <div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; global.getName().str(), <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(global.getType()));</div>
284
+ <div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a43832e93a42ae43d44b0cc160981678f">svfModule</a>-&gt;<a class="code" href="classSVF_1_1SVFModule.html#a0bc5a63d8c10da51766007cf40b095e5">addGlobalSet</a>(svfglobal);</div>
285
+ <div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a7de84e7817406867b173e1591e0681ac">addGlobalValueMap</a>(&amp;global, svfglobal);</div>
286
+ <div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; }</div>
287
+ <div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; </div>
288
+ <div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a0fd33072b099f61eaa642e94ed0c03fc">GlobalAlias</a>&amp; alias : mod.aliases())</div>
289
+ <div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; {</div>
290
+ <div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <a class="code" href="classSVF_1_1SVFGlobalValue.html">SVFGlobalValue</a>* svfalias = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFGlobalValue.html">SVFGlobalValue</a>(</div>
291
+ <div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; alias.getName().str(), <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(alias.getType()));</div>
292
+ <div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a43832e93a42ae43d44b0cc160981678f">svfModule</a>-&gt;<a class="code" href="classSVF_1_1SVFModule.html#aa6627399cf4d30d576f76f681d83449d">addAliasSet</a>(svfalias);</div>
293
+ <div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a7de84e7817406867b173e1591e0681ac">addGlobalValueMap</a>(&amp;alias, svfalias);</div>
294
+ <div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; }</div>
295
+ <div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; </div>
296
+ <div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aacffd97ab4cb45aeae2e67ec479889aa">GlobalIFunc</a>&amp; ifunc : mod.ifuncs())</div>
297
+ <div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; {</div>
298
+ <div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <a class="code" href="classSVF_1_1SVFGlobalValue.html">SVFGlobalValue</a>* svfifunc = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFGlobalValue.html">SVFGlobalValue</a>(</div>
299
+ <div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; ifunc.getName().str(), <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(ifunc.getType()));</div>
300
+ <div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a43832e93a42ae43d44b0cc160981678f">svfModule</a>-&gt;<a class="code" href="classSVF_1_1SVFModule.html#aa6627399cf4d30d576f76f681d83449d">addAliasSet</a>(svfifunc);</div>
301
+ <div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a7de84e7817406867b173e1591e0681ac">addGlobalValueMap</a>(&amp;ifunc, svfifunc);</div>
302
+ <div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; }</div>
303
+ <div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; }</div>
304
+ <div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160;}</div>
305
+ <div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; </div>
306
+ <div class="line"><a name="l00247"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a024f5de163fde6f63cb2d762b4b28d8a"> 247</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a024f5de163fde6f63cb2d762b4b28d8a">LLVMModuleSet::createSVFFunction</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* func)</div>
307
+ <div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160;{</div>
308
+ <div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svfFunc = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>(</div>
309
+ <div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(func-&gt;getType()),</div>
310
+ <div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; SVFUtil::cast&lt;SVFFunctionType&gt;(</div>
311
+ <div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(func-&gt;getFunctionType())),</div>
312
+ <div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; func-&gt;isDeclaration(), <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a4638a12f5481dff947b59cf8353e619b">LLVMUtil::isIntrinsicFun</a>(func),</div>
313
+ <div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; func-&gt;hasAddressTaken(), func-&gt;isVarArg(), <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFLoopAndDomInfo.html">SVFLoopAndDomInfo</a>);</div>
314
+ <div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; svfFunc-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a8325774df9d65d78ef6a66fef59b9a97">setName</a>(func-&gt;getName().str());</div>
315
+ <div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a43832e93a42ae43d44b0cc160981678f">svfModule</a>-&gt;<a class="code" href="classSVF_1_1SVFModule.html#a8a0fe93cc13b799fc28540fb312573c6">addFunctionSet</a>(svfFunc);</div>
316
+ <div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#ab671d5bb9ca5761e2b438a4d4da229cf">addFunctionMap</a>(func, svfFunc);</div>
317
+ <div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; </div>
318
+ <div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a58cdfbc4160cae08745b67844ac29801">Argument</a>&amp; arg : func-&gt;args())</div>
319
+ <div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; {</div>
320
+ <div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <a class="code" href="classSVF_1_1SVFArgument.html">SVFArgument</a>* svfarg = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFArgument.html">SVFArgument</a>(</div>
321
+ <div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(arg.getType()), svfFunc, arg.getArgNo(),</div>
322
+ <div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a428bd75b33fab60988d8758090712f29">LLVMUtil::isArgOfUncalledFunction</a>(&amp;arg));</div>
323
+ <div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="comment">// Setting up arg name</span></div>
324
+ <div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keywordflow">if</span> (arg.hasName())</div>
325
+ <div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; svfarg-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a8325774df9d65d78ef6a66fef59b9a97">setName</a>(arg.getName().str());</div>
326
+ <div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="keywordflow">else</span></div>
327
+ <div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; svfarg-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a8325774df9d65d78ef6a66fef59b9a97">setName</a>(std::to_string(arg.getArgNo()));</div>
328
+ <div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; </div>
329
+ <div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; svfFunc-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#ad865b8440a6e0d5d212798d2213e1e9c">addArgument</a>(svfarg);</div>
330
+ <div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5595ec3f7582934dc499770825bf5373">addArgumentMap</a>(&amp;arg, svfarg);</div>
331
+ <div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; }</div>
332
+ <div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; </div>
333
+ <div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>&amp; bb : *func)</div>
334
+ <div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; {</div>
335
+ <div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* svfBB =</div>
336
+ <div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(bb.getType()), svfFunc);</div>
337
+ <div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="keywordflow">if</span> (bb.hasName())</div>
338
+ <div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; svfBB-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a8325774df9d65d78ef6a66fef59b9a97">setName</a>(bb.getName().str());</div>
339
+ <div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; svfFunc-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#a0d5031bd11b6372803082111ec2cb4f6">addBasicBlock</a>(svfBB);</div>
340
+ <div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a3eaadb33cd21d0bd868526b5ddb051d9">addBasicBlockMap</a>(&amp;bb, svfBB);</div>
341
+ <div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>&amp; inst : bb)</div>
342
+ <div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; {</div>
343
+ <div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfInst = <span class="keyword">nullptr</span>;</div>
344
+ <div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* call = SVFUtil::dyn_cast&lt;CallBase&gt;(&amp;inst))</div>
345
+ <div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; {</div>
346
+ <div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#ab1b4c565ae6be788b934defc21a5cfaf">LLVMUtil::isVirtualCallSite</a>(call))</div>
347
+ <div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; svfInst = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFVirtualCallInst.html">SVFVirtualCallInst</a>(</div>
348
+ <div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(call-&gt;getType()), svfBB,</div>
349
+ <div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; call-&gt;getFunctionType()-&gt;isVarArg(),</div>
350
+ <div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; inst.isTerminator());</div>
351
+ <div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keywordflow">else</span></div>
352
+ <div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; svfInst = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFCallInst.html">SVFCallInst</a>(</div>
353
+ <div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(call-&gt;getType()), svfBB,</div>
354
+ <div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; call-&gt;getFunctionType()-&gt;isVarArg(),</div>
355
+ <div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; inst.isTerminator());</div>
356
+ <div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; }</div>
357
+ <div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="keywordflow">else</span></div>
358
+ <div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; {</div>
359
+ <div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; svfInst =</div>
360
+ <div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(inst.getType()),</div>
361
+ <div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; svfBB, inst.isTerminator(),</div>
362
+ <div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; SVFUtil::isa&lt;ReturnInst&gt;(inst));</div>
363
+ <div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; }</div>
364
+ <div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; </div>
365
+ <div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="comment">// Set instruction&#39;s string representation</span></div>
366
+ <div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <span class="keywordflow">if</span> (inst.hasName() &amp;&amp; !inst.getName().empty())</div>
367
+ <div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; {</div>
368
+ <div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; svfInst-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a8325774df9d65d78ef6a66fef59b9a97">setName</a>(inst.getName().str());</div>
369
+ <div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; }</div>
370
+ <div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="keywordflow">else</span></div>
371
+ <div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; {</div>
372
+ <div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a7b8b93fec1dc8c63c0a5837a85b99129">LLVMUtil::llvmToString</a>(inst);</div>
373
+ <div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="keyword">auto</span> it = str.begin(), ite = str.end();</div>
374
+ <div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="keywordflow">while</span> (it != ite &amp;&amp; std::isspace(*it))</div>
375
+ <div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; ++it;</div>
376
+ <div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="comment">// 0xf (15) is the max length a local string can hold</span></div>
377
+ <div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; svfInst-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a8325774df9d65d78ef6a66fef59b9a97">setName</a>({it, std::min(it + 0xf, ite)});</div>
378
+ <div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; }</div>
379
+ <div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; svfBB-&gt;<a class="code" href="classSVF_1_1SVFBasicBlock.html#ac1b15d8f9c2499add8dbc889ae5cab65">addInstruction</a>(svfInst);</div>
380
+ <div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a172084437a8450314a17f7085a32b5d2">addInstructionMap</a>(&amp;inst, svfInst);</div>
381
+ <div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; }</div>
382
+ <div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; }</div>
383
+ <div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160;}</div>
384
+ <div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; </div>
385
+ <div class="line"><a name="l00326"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#ac6a5540354696f4c9170e0a5832ba70e"> 326</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#ac6a5540354696f4c9170e0a5832ba70e">LLVMModuleSet::initSVFFunction</a>()</div>
386
+ <div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160;{</div>
387
+ <div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a>&amp; mod : <a class="code" href="classSVF_1_1LLVMModuleSet.html#acde6292e719c80f93d3d1c344ab442cd">modules</a>)</div>
388
+ <div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; {</div>
389
+ <div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>&amp; f : mod.functions())</div>
390
+ <div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; {</div>
391
+ <div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svffun = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a50fc24901350df9db890ba16a9b87e33">getSVFFunction</a>(&amp;f);</div>
392
+ <div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a20162d2894d6a12ba29410311fba4002">initSVFBasicBlock</a>(&amp;f);</div>
393
393
  <div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; </div>
394
- <div class="line"><a name="l00336"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a20162d2894d6a12ba29410311fba4002"> 336</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a20162d2894d6a12ba29410311fba4002">LLVMModuleSet::initSVFBasicBlock</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* func)</div>
395
- <div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160;{</div>
396
- <div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <span class="keywordflow">for</span> (Function::const_iterator bit = func-&gt;begin(), ebit = func-&gt;end(); bit != ebit; ++bit)</div>
397
- <div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; {</div>
398
- <div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* bb = &amp;*bit;</div>
399
- <div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* svfbb = <a class="code" href="classSVF_1_1LLVMModuleSet.html#ab0c0f321b6bfbfab2e4ff06d81920ab9">getSVFBasicBlock</a>(bb);</div>
400
- <div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a3436a988bf80c021cd8022fb445b66d5">succ_const_iterator</a> succ_it = succ_begin(bb); succ_it != succ_end(bb); succ_it++)</div>
401
- <div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; {</div>
402
- <div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* svf_scc_bb = <a class="code" href="classSVF_1_1LLVMModuleSet.html#ab0c0f321b6bfbfab2e4ff06d81920ab9">getSVFBasicBlock</a>(*succ_it);</div>
403
- <div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; svfbb-&gt;<a class="code" href="classSVF_1_1SVFBasicBlock.html#abfe3a1ce5fa364d9db7cd2d0e6a144ff">addSuccBasicBlock</a>(svf_scc_bb);</div>
404
- <div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; }</div>
405
- <div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a5c943191dc4e242704943e5f594ae99e">const_pred_iterator</a> pred_it = pred_begin(bb); pred_it != pred_end(bb); pred_it++)</div>
406
- <div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; {</div>
407
- <div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* svf_pred_bb = <a class="code" href="classSVF_1_1LLVMModuleSet.html#ab0c0f321b6bfbfab2e4ff06d81920ab9">getSVFBasicBlock</a>(*pred_it);</div>
408
- <div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; svfbb-&gt;<a class="code" href="classSVF_1_1SVFBasicBlock.html#a38f8fdd93ef7222f408cbbb2a98a1cd5">addPredBasicBlock</a>(svf_pred_bb);</div>
409
- <div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; }</div>
410
- <div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keywordflow">for</span> (BasicBlock::const_iterator iit = bb-&gt;begin(), eiit = bb-&gt;end(); iit != eiit; ++iit)</div>
411
- <div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; {</div>
412
- <div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst = &amp;*iit;</div>
413
- <div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* call = SVFUtil::dyn_cast&lt;CallBase&gt;(inst))</div>
414
- <div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; {</div>
415
- <div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfinst = <a class="code" href="classSVF_1_1LLVMModuleSet.html#ae74f307b6f96950ceedb2c375ef1c3a3">getSVFInstruction</a>(call);</div>
416
- <div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <a class="code" href="classSVF_1_1SVFCallInst.html">SVFCallInst</a>* svfcall = SVFUtil::cast&lt;SVFCallInst&gt;(svfinst);</div>
417
- <div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keyword">auto</span> called_llvmval = call-&gt;getCalledOperand()-&gt;stripPointerCasts();</div>
418
- <div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* called_llvmfunc = SVFUtil::dyn_cast&lt;Function&gt;(called_llvmval))</div>
419
- <div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; {</div>
420
- <div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* llvmfunc_def = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a3d34fcdfc98add848a34fd5259c11eb2">LLVMUtil::getDefFunForMultipleModule</a>(called_llvmfunc);</div>
421
- <div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* callee = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a50fc24901350df9db890ba16a9b87e33">getSVFFunction</a>(llvmfunc_def);</div>
422
- <div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; svfcall-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#a6dd304f555d2d2388c4430e57b0d2b91">setCalledOperand</a>(callee);</div>
423
- <div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; }</div>
424
- <div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="keywordflow">else</span></div>
425
- <div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; {</div>
426
- <div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; svfcall-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#a6dd304f555d2d2388c4430e57b0d2b91">setCalledOperand</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#afdd77bc1fca91f70b2ec362f1dacd392">getSVFValue</a>(called_llvmval));</div>
427
- <div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; }</div>
428
- <div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1SVFVirtualCallInst.html">SVFVirtualCallInst</a>* virtualCall = SVFUtil::dyn_cast&lt;SVFVirtualCallInst&gt;(svfcall))</div>
429
- <div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; {</div>
430
- <div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; virtualCall-&gt;setVtablePtr(<a class="code" href="classSVF_1_1LLVMModuleSet.html#afdd77bc1fca91f70b2ec362f1dacd392">getSVFValue</a>(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a3a23aa54459a068e16c96e5b5eb72f77">LLVMUtil::getVCallVtblPtr</a>(call)));</div>
431
- <div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; virtualCall-&gt;setFunIdxInVtable(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a718c8ec79f36cef5df2f4530541f2770">LLVMUtil::getVCallIdx</a>(call));</div>
432
- <div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; virtualCall-&gt;setFunNameOfVirtualCall(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a41e64f3318e2bf368eebe9a104ef6ad9">LLVMUtil::getFunNameOfVCallSite</a>(call));</div>
433
- <div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; }</div>
434
- <div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; call-&gt;arg_size(); i++)</div>
435
- <div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; {</div>
436
- <div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* svfval = <a class="code" href="classSVF_1_1LLVMModuleSet.html#afdd77bc1fca91f70b2ec362f1dacd392">getSVFValue</a>(call-&gt;getArgOperand(i));</div>
437
- <div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; svfcall-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#ac979b49b449b97b2a23f195cb107ec77">addArgument</a>(svfval);</div>
438
- <div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; }</div>
439
- <div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; }</div>
440
- <div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#afbd60d5443c7fa1448813d00bb5d0fa7">LLVMUtil::getNextInsts</a>(inst, <a class="code" href="classSVF_1_1LLVMModuleSet.html#ae74f307b6f96950ceedb2c375ef1c3a3">getSVFInstruction</a>(inst)-&gt;getSuccInstructions());</div>
441
- <div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a4c94a6c02fb89c1a1604c87414956acd">LLVMUtil::getPrevInsts</a>(inst, <a class="code" href="classSVF_1_1LLVMModuleSet.html#ae74f307b6f96950ceedb2c375ef1c3a3">getSVFInstruction</a>(inst)-&gt;getPredInstructions());</div>
442
- <div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; }</div>
443
- <div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; }</div>
444
- <div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160;}</div>
445
- <div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; </div>
446
- <div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; </div>
447
- <div class="line"><a name="l00389"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a8ba9092747108e0289014d52465a692d"> 389</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a8ba9092747108e0289014d52465a692d">LLVMModuleSet::initDomTree</a>(<a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svffun, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fun)</div>
448
- <div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160;{</div>
449
- <div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <span class="keywordflow">if</span> (fun-&gt;isDeclaration())</div>
450
- <div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="keywordflow">return</span>;</div>
451
- <div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <span class="comment">//process and stored dt &amp; df</span></div>
452
- <div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <a class="code" href="namespaceSVF.html#aecbb42b8e9d17fa0189c50dda9fd5fdd">DominatorTree</a> dt;</div>
453
- <div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <a class="code" href="namespaceSVF.html#ab44d20f806be99699895260b14a942d7">DominanceFrontier</a> df;</div>
454
- <div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; dt.recalculate(<span class="keyword">const_cast&lt;</span><a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>&amp;<span class="keyword">&gt;</span>(*fun));</div>
455
- <div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; df.analyze(dt);</div>
456
- <div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <a class="code" href="namespaceSVF.html#a77e088bfe47c0b0ddcbbe0693dec6fe5">LoopInfo</a> loopInfo = <a class="code" href="namespaceSVF.html#a77e088bfe47c0b0ddcbbe0693dec6fe5">LoopInfo</a>(dt);</div>
457
- <div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <a class="code" href="namespaceSVF.html#ab34383ee87cd45eb485fa29db482ffef">PostDominatorTree</a> pdt = <a class="code" href="namespaceSVF.html#ab34383ee87cd45eb485fa29db482ffef">PostDominatorTree</a>(<span class="keyword">const_cast&lt;</span><a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>&amp;<span class="keyword">&gt;</span>(*fun));</div>
458
- <div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <a class="code" href="classSVF_1_1SVFLoopAndDomInfo.html">SVFLoopAndDomInfo</a>* ld = svffun-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#a5798ecc742ee74e357d13eea751258c4">getLoopAndDomInfo</a>();</div>
459
- <div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; </div>
460
- <div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const SVFBasicBlock*,Set&lt;const SVFBasicBlock*&gt;</a>&gt; &amp; dfBBsMap = ld-&gt;<a class="code" href="classSVF_1_1SVFLoopAndDomInfo.html#ae37546be7304c66b4eca2654d995eaa7">getDomFrontierMap</a>();</div>
461
- <div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="keywordflow">for</span> (DominanceFrontierBase::const_iterator dfIter = df.begin(), eDfIter = df.end(); dfIter != eDfIter; dfIter++)</div>
462
- <div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; {</div>
463
- <div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* keyBB = dfIter-&gt;first;</div>
464
- <div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <span class="keyword">const</span> std::set&lt;BasicBlock* &gt;&amp; domSet = dfIter-&gt;second;</div>
465
- <div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const SVFBasicBlock*&gt;</a>&amp; valueBasicBlocks = dfBBsMap[<a class="code" href="classSVF_1_1LLVMModuleSet.html#ab0c0f321b6bfbfab2e4ff06d81920ab9">getSVFBasicBlock</a>(keyBB)];</div>
466
- <div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* bbValue:domSet)</div>
467
- <div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; {</div>
468
- <div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; valueBasicBlocks.insert(<a class="code" href="classSVF_1_1LLVMModuleSet.html#ab0c0f321b6bfbfab2e4ff06d81920ab9">getSVFBasicBlock</a>(bbValue));</div>
469
- <div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; }</div>
470
- <div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; }</div>
471
- <div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; std::vector&lt;const SVFBasicBlock*&gt; reachableBBs;</div>
472
- <div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a9bd6f54920929e5ad35102ba2f2223da">LLVMUtil::getFunReachableBBs</a>(fun, reachableBBs);</div>
473
- <div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; ld-&gt;<a class="code" href="classSVF_1_1SVFLoopAndDomInfo.html#acc409e328f641a2c9512beeb727f58c7">setReachableBBs</a>(reachableBBs);</div>
474
- <div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; </div>
475
- <div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <span class="keywordflow">for</span> (Function::const_iterator bit = fun-&gt;begin(), beit = fun-&gt;end(); bit!=beit; ++bit)</div>
476
- <div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; {</div>
477
- <div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> &amp;bb = *bit;</div>
478
- <div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* svfBB = <a class="code" href="classSVF_1_1LLVMModuleSet.html#ab0c0f321b6bfbfab2e4ff06d81920ab9">getSVFBasicBlock</a>(&amp;bb);</div>
479
- <div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF.html#a827d09974dc7bf0849f96823cc2fee89">DomTreeNode</a>* dtNode = dt.getNode(&amp;bb))</div>
480
- <div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; {</div>
481
- <div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <a class="code" href="classSVF_1_1SVFLoopAndDomInfo.html#ad478ac88bc07cf4d6d0ad3517b2c4ab3">SVFLoopAndDomInfo::BBSet</a>&amp; bbSet = ld-&gt;<a class="code" href="classSVF_1_1SVFLoopAndDomInfo.html#a2fc6b806a436d8fa65863f6cef99e716">getDomTreeMap</a>()[svfBB];</div>
482
- <div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> domBB : *dtNode)</div>
483
- <div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; {</div>
484
- <div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span>* domSVFBB = <a class="code" href="classSVF_1_1LLVMModuleSet.html#ab0c0f321b6bfbfab2e4ff06d81920ab9">getSVFBasicBlock</a>(domBB-&gt;getBlock());</div>
485
- <div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; bbSet.insert(domSVFBB);</div>
486
- <div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; }</div>
487
- <div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; }</div>
488
- <div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; </div>
489
- <div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF.html#a827d09974dc7bf0849f96823cc2fee89">DomTreeNode</a>* pdtNode = pdt.getNode(&amp;bb))</div>
490
- <div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; {</div>
491
- <div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <a class="code" href="classSVF_1_1SVFLoopAndDomInfo.html#ad478ac88bc07cf4d6d0ad3517b2c4ab3">SVFLoopAndDomInfo::BBSet</a>&amp; bbSet = ld-&gt;<a class="code" href="classSVF_1_1SVFLoopAndDomInfo.html#ad07f95e790b5c3a50c864155aa20a083">getPostDomTreeMap</a>()[svfBB];</div>
492
- <div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> domBB : *pdtNode)</div>
493
- <div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; {</div>
494
- <div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span>* domSVFBB = <a class="code" href="classSVF_1_1LLVMModuleSet.html#ab0c0f321b6bfbfab2e4ff06d81920ab9">getSVFBasicBlock</a>(domBB-&gt;getBlock());</div>
495
- <div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; bbSet.insert(domSVFBB);</div>
496
- <div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; }</div>
497
- <div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; }</div>
498
- <div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; </div>
499
- <div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#abf85e29310b2e4df8925d00a5c081314">Loop</a>* loop = loopInfo.getLoopFor(&amp;bb))</div>
500
- <div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; {</div>
501
- <div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* loopBlock : loop-&gt;getBlocks())</div>
502
- <div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; {</div>
503
- <div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* loopbb = <a class="code" href="classSVF_1_1LLVMModuleSet.html#ab0c0f321b6bfbfab2e4ff06d81920ab9">getSVFBasicBlock</a>(loopBlock);</div>
504
- <div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; ld-&gt;<a class="code" href="classSVF_1_1SVFLoopAndDomInfo.html#aed2f125f7b8c21092b23d9727568ba50">addToBB2LoopMap</a>(svfBB, loopbb);</div>
505
- <div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; }</div>
506
- <div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; }</div>
507
- <div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; }</div>
508
- <div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160;}</div>
509
- <div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; </div>
510
- <div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; </div>
511
- <div class="line"><a name="l00456"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a8b5f24c873db1f6a0614d1dac48bb4bb"> 456</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a8b5f24c873db1f6a0614d1dac48bb4bb">LLVMModuleSet::prePassSchedule</a>()</div>
512
- <div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160;{</div>
513
- <div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; std::unique_ptr&lt;BreakConstantGEPs&gt; p1 = std::make_unique&lt;BreakConstantGEPs&gt;();</div>
514
- <div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> &amp;M : <a class="code" href="classSVF_1_1LLVMModuleSet.html#a4091b12bdfe4423d8114612a199bc480">getLLVMModules</a>())</div>
515
- <div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; {</div>
516
- <div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; p1-&gt;runOnModule(M);</div>
517
- <div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; }</div>
518
- <div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; </div>
519
- <div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; std::unique_ptr&lt;UnifyFunctionExitNodes&gt; p2 =</div>
520
- <div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; std::make_unique&lt;UnifyFunctionExitNodes&gt;();</div>
394
+ <div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">SVFUtil::isExtCall</a>(svffun))</div>
395
+ <div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; {</div>
396
+ <div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a8ba9092747108e0289014d52465a692d">initDomTree</a>(svffun, &amp;f);</div>
397
+ <div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; }</div>
398
+ <div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; }</div>
399
+ <div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; }</div>
400
+ <div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160;}</div>
401
+ <div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; </div>
402
+ <div class="line"><a name="l00344"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a20162d2894d6a12ba29410311fba4002"> 344</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a20162d2894d6a12ba29410311fba4002">LLVMModuleSet::initSVFBasicBlock</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* func)</div>
403
+ <div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160;{</div>
404
+ <div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="keywordflow">for</span> (Function::const_iterator bit = func-&gt;begin(), ebit = func-&gt;end(); bit != ebit; ++bit)</div>
405
+ <div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; {</div>
406
+ <div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* bb = &amp;*bit;</div>
407
+ <div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* svfbb = <a class="code" href="classSVF_1_1LLVMModuleSet.html#ab0c0f321b6bfbfab2e4ff06d81920ab9">getSVFBasicBlock</a>(bb);</div>
408
+ <div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a3436a988bf80c021cd8022fb445b66d5">succ_const_iterator</a> succ_it = succ_begin(bb); succ_it != succ_end(bb); succ_it++)</div>
409
+ <div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; {</div>
410
+ <div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* svf_scc_bb = <a class="code" href="classSVF_1_1LLVMModuleSet.html#ab0c0f321b6bfbfab2e4ff06d81920ab9">getSVFBasicBlock</a>(*succ_it);</div>
411
+ <div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; svfbb-&gt;<a class="code" href="classSVF_1_1SVFBasicBlock.html#abfe3a1ce5fa364d9db7cd2d0e6a144ff">addSuccBasicBlock</a>(svf_scc_bb);</div>
412
+ <div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; }</div>
413
+ <div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a5c943191dc4e242704943e5f594ae99e">const_pred_iterator</a> pred_it = pred_begin(bb); pred_it != pred_end(bb); pred_it++)</div>
414
+ <div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; {</div>
415
+ <div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* svf_pred_bb = <a class="code" href="classSVF_1_1LLVMModuleSet.html#ab0c0f321b6bfbfab2e4ff06d81920ab9">getSVFBasicBlock</a>(*pred_it);</div>
416
+ <div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; svfbb-&gt;<a class="code" href="classSVF_1_1SVFBasicBlock.html#a38f8fdd93ef7222f408cbbb2a98a1cd5">addPredBasicBlock</a>(svf_pred_bb);</div>
417
+ <div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; }</div>
418
+ <div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="keywordflow">for</span> (BasicBlock::const_iterator iit = bb-&gt;begin(), eiit = bb-&gt;end(); iit != eiit; ++iit)</div>
419
+ <div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; {</div>
420
+ <div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst = &amp;*iit;</div>
421
+ <div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* call = SVFUtil::dyn_cast&lt;CallBase&gt;(inst))</div>
422
+ <div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; {</div>
423
+ <div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfinst = <a class="code" href="classSVF_1_1LLVMModuleSet.html#ae74f307b6f96950ceedb2c375ef1c3a3">getSVFInstruction</a>(call);</div>
424
+ <div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <a class="code" href="classSVF_1_1SVFCallInst.html">SVFCallInst</a>* svfcall = SVFUtil::cast&lt;SVFCallInst&gt;(svfinst);</div>
425
+ <div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="keyword">auto</span> called_llvmval = call-&gt;getCalledOperand()-&gt;stripPointerCasts();</div>
426
+ <div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* called_llvmfunc = SVFUtil::dyn_cast&lt;Function&gt;(called_llvmval))</div>
427
+ <div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; {</div>
428
+ <div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* llvmfunc_def = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a3d34fcdfc98add848a34fd5259c11eb2">LLVMUtil::getDefFunForMultipleModule</a>(called_llvmfunc);</div>
429
+ <div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* callee = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a50fc24901350df9db890ba16a9b87e33">getSVFFunction</a>(llvmfunc_def);</div>
430
+ <div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; svfcall-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#a6dd304f555d2d2388c4430e57b0d2b91">setCalledOperand</a>(callee);</div>
431
+ <div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; }</div>
432
+ <div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="keywordflow">else</span></div>
433
+ <div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; {</div>
434
+ <div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; svfcall-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#a6dd304f555d2d2388c4430e57b0d2b91">setCalledOperand</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#afdd77bc1fca91f70b2ec362f1dacd392">getSVFValue</a>(called_llvmval));</div>
435
+ <div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; }</div>
436
+ <div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1SVFVirtualCallInst.html">SVFVirtualCallInst</a>* virtualCall = SVFUtil::dyn_cast&lt;SVFVirtualCallInst&gt;(svfcall))</div>
437
+ <div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; {</div>
438
+ <div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; virtualCall-&gt;setVtablePtr(<a class="code" href="classSVF_1_1LLVMModuleSet.html#afdd77bc1fca91f70b2ec362f1dacd392">getSVFValue</a>(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a3a23aa54459a068e16c96e5b5eb72f77">LLVMUtil::getVCallVtblPtr</a>(call)));</div>
439
+ <div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; virtualCall-&gt;setFunIdxInVtable(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a718c8ec79f36cef5df2f4530541f2770">LLVMUtil::getVCallIdx</a>(call));</div>
440
+ <div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; virtualCall-&gt;setFunNameOfVirtualCall(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a41e64f3318e2bf368eebe9a104ef6ad9">LLVMUtil::getFunNameOfVCallSite</a>(call));</div>
441
+ <div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; }</div>
442
+ <div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; call-&gt;arg_size(); i++)</div>
443
+ <div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; {</div>
444
+ <div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* svfval = <a class="code" href="classSVF_1_1LLVMModuleSet.html#afdd77bc1fca91f70b2ec362f1dacd392">getSVFValue</a>(call-&gt;getArgOperand(i));</div>
445
+ <div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; svfcall-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#ac979b49b449b97b2a23f195cb107ec77">addArgument</a>(svfval);</div>
446
+ <div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; }</div>
447
+ <div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; }</div>
448
+ <div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#afbd60d5443c7fa1448813d00bb5d0fa7">LLVMUtil::getNextInsts</a>(inst, <a class="code" href="classSVF_1_1LLVMModuleSet.html#ae74f307b6f96950ceedb2c375ef1c3a3">getSVFInstruction</a>(inst)-&gt;getSuccInstructions());</div>
449
+ <div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a4c94a6c02fb89c1a1604c87414956acd">LLVMUtil::getPrevInsts</a>(inst, <a class="code" href="classSVF_1_1LLVMModuleSet.html#ae74f307b6f96950ceedb2c375ef1c3a3">getSVFInstruction</a>(inst)-&gt;getPredInstructions());</div>
450
+ <div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; }</div>
451
+ <div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; }</div>
452
+ <div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160;}</div>
453
+ <div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; </div>
454
+ <div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; </div>
455
+ <div class="line"><a name="l00397"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a8ba9092747108e0289014d52465a692d"> 397</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a8ba9092747108e0289014d52465a692d">LLVMModuleSet::initDomTree</a>(<a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svffun, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fun)</div>
456
+ <div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160;{</div>
457
+ <div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="keywordflow">if</span> (fun-&gt;isDeclaration())</div>
458
+ <div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="keywordflow">return</span>;</div>
459
+ <div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="comment">//process and stored dt &amp; df</span></div>
460
+ <div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <a class="code" href="namespaceSVF.html#aecbb42b8e9d17fa0189c50dda9fd5fdd">DominatorTree</a> dt;</div>
461
+ <div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <a class="code" href="namespaceSVF.html#ab44d20f806be99699895260b14a942d7">DominanceFrontier</a> df;</div>
462
+ <div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; dt.recalculate(<span class="keyword">const_cast&lt;</span><a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>&amp;<span class="keyword">&gt;</span>(*fun));</div>
463
+ <div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; df.analyze(dt);</div>
464
+ <div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <a class="code" href="namespaceSVF.html#a77e088bfe47c0b0ddcbbe0693dec6fe5">LoopInfo</a> loopInfo = <a class="code" href="namespaceSVF.html#a77e088bfe47c0b0ddcbbe0693dec6fe5">LoopInfo</a>(dt);</div>
465
+ <div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <a class="code" href="namespaceSVF.html#ab34383ee87cd45eb485fa29db482ffef">PostDominatorTree</a> pdt = <a class="code" href="namespaceSVF.html#ab34383ee87cd45eb485fa29db482ffef">PostDominatorTree</a>(<span class="keyword">const_cast&lt;</span><a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>&amp;<span class="keyword">&gt;</span>(*fun));</div>
466
+ <div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <a class="code" href="classSVF_1_1SVFLoopAndDomInfo.html">SVFLoopAndDomInfo</a>* ld = svffun-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#a5798ecc742ee74e357d13eea751258c4">getLoopAndDomInfo</a>();</div>
467
+ <div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; </div>
468
+ <div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const SVFBasicBlock*,Set&lt;const SVFBasicBlock*&gt;</a>&gt; &amp; dfBBsMap = ld-&gt;<a class="code" href="classSVF_1_1SVFLoopAndDomInfo.html#ae37546be7304c66b4eca2654d995eaa7">getDomFrontierMap</a>();</div>
469
+ <div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <span class="keywordflow">for</span> (DominanceFrontierBase::const_iterator dfIter = df.begin(), eDfIter = df.end(); dfIter != eDfIter; dfIter++)</div>
470
+ <div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; {</div>
471
+ <div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* keyBB = dfIter-&gt;first;</div>
472
+ <div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <span class="keyword">const</span> std::set&lt;BasicBlock* &gt;&amp; domSet = dfIter-&gt;second;</div>
473
+ <div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const SVFBasicBlock*&gt;</a>&amp; valueBasicBlocks = dfBBsMap[<a class="code" href="classSVF_1_1LLVMModuleSet.html#ab0c0f321b6bfbfab2e4ff06d81920ab9">getSVFBasicBlock</a>(keyBB)];</div>
474
+ <div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* bbValue:domSet)</div>
475
+ <div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; {</div>
476
+ <div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; valueBasicBlocks.insert(<a class="code" href="classSVF_1_1LLVMModuleSet.html#ab0c0f321b6bfbfab2e4ff06d81920ab9">getSVFBasicBlock</a>(bbValue));</div>
477
+ <div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; }</div>
478
+ <div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; }</div>
479
+ <div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; std::vector&lt;const SVFBasicBlock*&gt; reachableBBs;</div>
480
+ <div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a9bd6f54920929e5ad35102ba2f2223da">LLVMUtil::getFunReachableBBs</a>(fun, reachableBBs);</div>
481
+ <div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; ld-&gt;<a class="code" href="classSVF_1_1SVFLoopAndDomInfo.html#acc409e328f641a2c9512beeb727f58c7">setReachableBBs</a>(reachableBBs);</div>
482
+ <div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; </div>
483
+ <div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; <span class="keywordflow">for</span> (Function::const_iterator bit = fun-&gt;begin(), beit = fun-&gt;end(); bit!=beit; ++bit)</div>
484
+ <div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; {</div>
485
+ <div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> &amp;bb = *bit;</div>
486
+ <div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* svfBB = <a class="code" href="classSVF_1_1LLVMModuleSet.html#ab0c0f321b6bfbfab2e4ff06d81920ab9">getSVFBasicBlock</a>(&amp;bb);</div>
487
+ <div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF.html#a827d09974dc7bf0849f96823cc2fee89">DomTreeNode</a>* dtNode = dt.getNode(&amp;bb))</div>
488
+ <div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; {</div>
489
+ <div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <a class="code" href="classSVF_1_1SVFLoopAndDomInfo.html#ad478ac88bc07cf4d6d0ad3517b2c4ab3">SVFLoopAndDomInfo::BBSet</a>&amp; bbSet = ld-&gt;<a class="code" href="classSVF_1_1SVFLoopAndDomInfo.html#a2fc6b806a436d8fa65863f6cef99e716">getDomTreeMap</a>()[svfBB];</div>
490
+ <div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> domBB : *dtNode)</div>
491
+ <div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; {</div>
492
+ <div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span>* domSVFBB = <a class="code" href="classSVF_1_1LLVMModuleSet.html#ab0c0f321b6bfbfab2e4ff06d81920ab9">getSVFBasicBlock</a>(domBB-&gt;getBlock());</div>
493
+ <div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; bbSet.insert(domSVFBB);</div>
494
+ <div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; }</div>
495
+ <div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; }</div>
496
+ <div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; </div>
497
+ <div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF.html#a827d09974dc7bf0849f96823cc2fee89">DomTreeNode</a>* pdtNode = pdt.getNode(&amp;bb))</div>
498
+ <div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; {</div>
499
+ <div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <a class="code" href="classSVF_1_1SVFLoopAndDomInfo.html#ad478ac88bc07cf4d6d0ad3517b2c4ab3">SVFLoopAndDomInfo::BBSet</a>&amp; bbSet = ld-&gt;<a class="code" href="classSVF_1_1SVFLoopAndDomInfo.html#ad07f95e790b5c3a50c864155aa20a083">getPostDomTreeMap</a>()[svfBB];</div>
500
+ <div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> domBB : *pdtNode)</div>
501
+ <div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; {</div>
502
+ <div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span>* domSVFBB = <a class="code" href="classSVF_1_1LLVMModuleSet.html#ab0c0f321b6bfbfab2e4ff06d81920ab9">getSVFBasicBlock</a>(domBB-&gt;getBlock());</div>
503
+ <div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; bbSet.insert(domSVFBB);</div>
504
+ <div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; }</div>
505
+ <div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; }</div>
506
+ <div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; </div>
507
+ <div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#abf85e29310b2e4df8925d00a5c081314">Loop</a>* loop = loopInfo.getLoopFor(&amp;bb))</div>
508
+ <div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; {</div>
509
+ <div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* loopBlock : loop-&gt;getBlocks())</div>
510
+ <div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; {</div>
511
+ <div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* loopbb = <a class="code" href="classSVF_1_1LLVMModuleSet.html#ab0c0f321b6bfbfab2e4ff06d81920ab9">getSVFBasicBlock</a>(loopBlock);</div>
512
+ <div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; ld-&gt;<a class="code" href="classSVF_1_1SVFLoopAndDomInfo.html#aed2f125f7b8c21092b23d9727568ba50">addToBB2LoopMap</a>(svfBB, loopbb);</div>
513
+ <div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; }</div>
514
+ <div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; }</div>
515
+ <div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; }</div>
516
+ <div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160;}</div>
517
+ <div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; </div>
518
+ <div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; </div>
519
+ <div class="line"><a name="l00464"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a8b5f24c873db1f6a0614d1dac48bb4bb"> 464</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a8b5f24c873db1f6a0614d1dac48bb4bb">LLVMModuleSet::prePassSchedule</a>()</div>
520
+ <div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160;{</div>
521
+ <div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; std::unique_ptr&lt;BreakConstantGEPs&gt; p1 = std::make_unique&lt;BreakConstantGEPs&gt;();</div>
521
522
  <div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> &amp;M : <a class="code" href="classSVF_1_1LLVMModuleSet.html#a4091b12bdfe4423d8114612a199bc480">getLLVMModules</a>())</div>
522
523
  <div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; {</div>
523
- <div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a> = M.begin(), E = M.end(); <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a> != E; ++<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>)</div>
524
- <div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; {</div>
525
- <div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> &amp;fun = *<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>;</div>
526
- <div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <span class="keywordflow">if</span> (fun.isDeclaration())</div>
527
- <div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; <span class="keywordflow">continue</span>;</div>
528
- <div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; p2-&gt;runOnFunction(fun);</div>
529
- <div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; }</div>
530
- <div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; }</div>
531
- <div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160;}</div>
532
- <div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; </div>
533
- <div class="line"><a name="l00480"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a2fdc1bd61b8f6cdf6c07a5059b641b04"> 480</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a2fdc1bd61b8f6cdf6c07a5059b641b04">LLVMModuleSet::preProcessBCs</a>(std::vector&lt;std::string&gt; &amp;moduleNameVec)</div>
534
- <div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160;{</div>
535
- <div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html">LLVMModuleSet</a>* mset = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">getLLVMModuleSet</a>();</div>
536
- <div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; mset-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a298966366b02d0a34f409c2c77da3789">loadModules</a>(moduleNameVec);</div>
537
- <div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; mset-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a8b5f24c873db1f6a0614d1dac48bb4bb">prePassSchedule</a>();</div>
538
- <div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; </div>
539
- <div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> preProcessSuffix = <span class="stringliteral">&quot;.pre.bc&quot;</span>;</div>
540
- <div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <span class="comment">// Get the existing module names, remove old extention, add preProcessSuffix</span></div>
541
- <div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; moduleNameVec.size(); i++)</div>
542
- <div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; {</div>
543
- <div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> lastIndex = moduleNameVec[i].find_last_of(<span class="stringliteral">&quot;.&quot;</span>);</div>
544
- <div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> rawName = moduleNameVec[i].substr(0, lastIndex);</div>
545
- <div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; moduleNameVec[i] = (rawName + preProcessSuffix);</div>
546
- <div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; }</div>
524
+ <div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; p1-&gt;runOnModule(M);</div>
525
+ <div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; }</div>
526
+ <div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; </div>
527
+ <div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; std::unique_ptr&lt;UnifyFunctionExitNodes&gt; p2 =</div>
528
+ <div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; std::make_unique&lt;UnifyFunctionExitNodes&gt;();</div>
529
+ <div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> &amp;M : <a class="code" href="classSVF_1_1LLVMModuleSet.html#a4091b12bdfe4423d8114612a199bc480">getLLVMModules</a>())</div>
530
+ <div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; {</div>
531
+ <div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a> = M.begin(), E = M.end(); <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a> != E; ++<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>)</div>
532
+ <div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; {</div>
533
+ <div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> &amp;fun = *<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>;</div>
534
+ <div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <span class="keywordflow">if</span> (fun.isDeclaration())</div>
535
+ <div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <span class="keywordflow">continue</span>;</div>
536
+ <div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; p2-&gt;runOnFunction(fun);</div>
537
+ <div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; }</div>
538
+ <div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; }</div>
539
+ <div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160;}</div>
540
+ <div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; </div>
541
+ <div class="line"><a name="l00488"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a2fdc1bd61b8f6cdf6c07a5059b641b04"> 488</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a2fdc1bd61b8f6cdf6c07a5059b641b04">LLVMModuleSet::preProcessBCs</a>(std::vector&lt;std::string&gt; &amp;moduleNameVec)</div>
542
+ <div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160;{</div>
543
+ <div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html">LLVMModuleSet</a>* mset = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">getLLVMModuleSet</a>();</div>
544
+ <div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; mset-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a298966366b02d0a34f409c2c77da3789">loadModules</a>(moduleNameVec);</div>
545
+ <div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; mset-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a8820d1df9098db6eadf3a9c67e380e55">loadExtAPIModules</a>();</div>
546
+ <div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; mset-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a8b5f24c873db1f6a0614d1dac48bb4bb">prePassSchedule</a>();</div>
547
547
  <div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; </div>
548
- <div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; mset-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#af37b9976b282c875cac7bb1777da635c">dumpModulesToFile</a>(preProcessSuffix);</div>
549
- <div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a3204400c52ec55da70418471d5c9bad5">preProcessed</a> = <span class="keyword">true</span>;</div>
550
- <div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a2f8e91c075d90be66412a079fe73e936">releaseLLVMModuleSet</a>();</div>
551
- <div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160;}</div>
552
- <div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; </div>
553
- <div class="line"><a name="l00500"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a298966366b02d0a34f409c2c77da3789"> 500</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a298966366b02d0a34f409c2c77da3789">LLVMModuleSet::loadModules</a>(<span class="keyword">const</span> std::vector&lt;std::string&gt; &amp;moduleNameVec)</div>
554
- <div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160;{</div>
555
- <div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; </div>
556
- <div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="comment">// We read SVFIR from LLVM IR</span></div>
557
- <div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Options.html#a53f783c80f368bcdca6c7620229d6f8e">Options::Graphtxt</a>().<a class="code" href="classSVF_1_1LLVMModuleSet.html#ae19e38054c55d5822dfc83a12f12aa60">empty</a>())</div>
558
- <div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; {</div>
559
- <div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <span class="keywordflow">if</span>(moduleNameVec.empty())</div>
560
- <div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; {</div>
561
- <div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;no LLVM bc file is found!\n&quot;</span>;</div>
562
- <div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; exit(0);</div>
563
- <div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; }</div>
564
- <div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <span class="comment">//assert(!moduleNameVec.empty() &amp;&amp; &quot;no LLVM bc file is found!&quot;);</span></div>
565
- <div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; }</div>
566
- <div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <span class="comment">// We read SVFIR from a user-defined txt instead of parsing SVFIR from LLVM IR</span></div>
567
- <div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <span class="keywordflow">else</span></div>
568
- <div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <a class="code" href="classSVF_1_1SVFModule.html#a7af3076a26060090377d1f74293560fe">SVFModule::setPagFromTXT</a>(<a class="code" href="classSVF_1_1Options.html#a53f783c80f368bcdca6c7620229d6f8e">Options::Graphtxt</a>());</div>
569
- <div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; </div>
570
- <div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; <span class="comment">//</span></div>
571
- <div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; <span class="comment">// To avoid the following type bugs (t1 != t3) when parsing multiple modules,</span></div>
572
- <div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; <span class="comment">// We should use only one LLVMContext object for multiple modules in the same thread.</span></div>
573
- <div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; <span class="comment">// No such problem if only one module is processed by SVF.</span></div>
574
- <div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <span class="comment">// ------------------------------------------------------------------</span></div>
575
- <div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; <span class="comment">// LLVMContext ctxa,ctxb;</span></div>
576
- <div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="comment">// IntegerType * t1 = IntegerType::get(ctxa,32);</span></div>
577
- <div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <span class="comment">// IntegerType * t2 = IntegerType::get(ctxa,32);</span></div>
578
- <div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <span class="comment">// assert(t1 == t2);</span></div>
579
- <div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="comment">// IntegerType * t3 = IntegerType::get(ctxb,32);</span></div>
580
- <div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <span class="comment">// IntegerType * t4 = IntegerType::get(ctxb,32);</span></div>
581
- <div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <span class="comment">// assert(t3 == t4);</span></div>
582
- <div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; <span class="comment">// assert(t1 != t3);</span></div>
548
+ <div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> preProcessSuffix = <span class="stringliteral">&quot;.pre.bc&quot;</span>;</div>
549
+ <div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; <span class="comment">// Get the existing module names, remove old extention, add preProcessSuffix</span></div>
550
+ <div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; moduleNameVec.size(); i++)</div>
551
+ <div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; {</div>
552
+ <div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> lastIndex = moduleNameVec[i].find_last_of(<span class="stringliteral">&quot;.&quot;</span>);</div>
553
+ <div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> rawName = moduleNameVec[i].substr(0, lastIndex);</div>
554
+ <div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; moduleNameVec[i] = (rawName + preProcessSuffix);</div>
555
+ <div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; }</div>
556
+ <div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; </div>
557
+ <div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; mset-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#af37b9976b282c875cac7bb1777da635c">dumpModulesToFile</a>(preProcessSuffix);</div>
558
+ <div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a3204400c52ec55da70418471d5c9bad5">preProcessed</a> = <span class="keyword">true</span>;</div>
559
+ <div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a2f8e91c075d90be66412a079fe73e936">releaseLLVMModuleSet</a>();</div>
560
+ <div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160;}</div>
561
+ <div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; </div>
562
+ <div class="line"><a name="l00509"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a298966366b02d0a34f409c2c77da3789"> 509</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a298966366b02d0a34f409c2c77da3789">LLVMModuleSet::loadModules</a>(<span class="keyword">const</span> std::vector&lt;std::string&gt; &amp;moduleNameVec)</div>
563
+ <div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160;{</div>
564
+ <div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; </div>
565
+ <div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <span class="comment">// We read SVFIR from LLVM IR</span></div>
566
+ <div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Options.html#a53f783c80f368bcdca6c7620229d6f8e">Options::Graphtxt</a>().<a class="code" href="classSVF_1_1LLVMModuleSet.html#ae19e38054c55d5822dfc83a12f12aa60">empty</a>())</div>
567
+ <div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; {</div>
568
+ <div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <span class="keywordflow">if</span>(moduleNameVec.empty())</div>
569
+ <div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; {</div>
570
+ <div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;no LLVM bc file is found!\n&quot;</span>;</div>
571
+ <div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; exit(0);</div>
572
+ <div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; }</div>
573
+ <div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; <span class="comment">//assert(!moduleNameVec.empty() &amp;&amp; &quot;no LLVM bc file is found!&quot;);</span></div>
574
+ <div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; }</div>
575
+ <div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; <span class="comment">// We read SVFIR from a user-defined txt instead of parsing SVFIR from LLVM IR</span></div>
576
+ <div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="keywordflow">else</span></div>
577
+ <div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <a class="code" href="classSVF_1_1SVFModule.html#a7af3076a26060090377d1f74293560fe">SVFModule::setPagFromTXT</a>(<a class="code" href="classSVF_1_1Options.html#a53f783c80f368bcdca6c7620229d6f8e">Options::Graphtxt</a>());</div>
578
+ <div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; </div>
579
+ <div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="comment">//</span></div>
580
+ <div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <span class="comment">// To avoid the following type bugs (t1 != t3) when parsing multiple modules,</span></div>
581
+ <div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <span class="comment">// We should use only one LLVMContext object for multiple modules in the same thread.</span></div>
582
+ <div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; <span class="comment">// No such problem if only one module is processed by SVF.</span></div>
583
583
  <div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; <span class="comment">// ------------------------------------------------------------------</span></div>
584
- <div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <span class="comment">//</span></div>
585
- <div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#ad06a92bf8bc556de742e0ffdf79ffafe">cxts</a> = std::make_unique&lt;LLVMContext&gt;();</div>
586
- <div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; </div>
587
- <div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a>&amp; moduleName : moduleNameVec)</div>
588
- <div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; {</div>
589
- <div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="namespaceSVF_1_1LLVMUtil.html#ad8a8c32a09340f491fffffcb07dd7a41">LLVMUtil::isIRFile</a>(moduleName))</div>
590
- <div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; {</div>
591
- <div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">SVFUtil::errs</a>() &lt;&lt; <span class="stringliteral">&quot;not an IR file: &quot;</span> &lt;&lt; moduleName &lt;&lt; std::endl;</div>
592
- <div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; abort();</div>
593
- <div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; }</div>
594
- <div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; </div>
595
- <div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <a class="code" href="namespaceSVF.html#a86863d104a3930b3a806935d92ddbf30">SMDiagnostic</a> Err;</div>
596
- <div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; std::unique_ptr&lt;Module&gt; mod = parseIRFile(moduleName, Err, *<a class="code" href="classSVF_1_1LLVMModuleSet.html#ad06a92bf8bc556de742e0ffdf79ffafe">cxts</a>);</div>
597
- <div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <span class="keywordflow">if</span> (mod == <span class="keyword">nullptr</span>)</div>
598
- <div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; {</div>
599
- <div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">SVFUtil::errs</a>() &lt;&lt; <span class="stringliteral">&quot;load module: &quot;</span> &lt;&lt; moduleName &lt;&lt; <span class="stringliteral">&quot;failed!!\n\n&quot;</span>;</div>
600
- <div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; Err.print(<span class="stringliteral">&quot;SVFModuleLoader&quot;</span>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">llvm::errs</a>());</div>
584
+ <div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <span class="comment">// LLVMContext ctxa,ctxb;</span></div>
585
+ <div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <span class="comment">// IntegerType * t1 = IntegerType::get(ctxa,32);</span></div>
586
+ <div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="comment">// IntegerType * t2 = IntegerType::get(ctxa,32);</span></div>
587
+ <div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <span class="comment">// assert(t1 == t2);</span></div>
588
+ <div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <span class="comment">// IntegerType * t3 = IntegerType::get(ctxb,32);</span></div>
589
+ <div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <span class="comment">// IntegerType * t4 = IntegerType::get(ctxb,32);</span></div>
590
+ <div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; <span class="comment">// assert(t3 == t4);</span></div>
591
+ <div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <span class="comment">// assert(t1 != t3);</span></div>
592
+ <div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="comment">// ------------------------------------------------------------------</span></div>
593
+ <div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <span class="comment">//</span></div>
594
+ <div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#ad06a92bf8bc556de742e0ffdf79ffafe">cxts</a> = std::make_unique&lt;LLVMContext&gt;();</div>
595
+ <div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; </div>
596
+ <div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a>&amp; moduleName : moduleNameVec)</div>
597
+ <div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; {</div>
598
+ <div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="namespaceSVF_1_1LLVMUtil.html#ad8a8c32a09340f491fffffcb07dd7a41">LLVMUtil::isIRFile</a>(moduleName))</div>
599
+ <div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; {</div>
600
+ <div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">SVFUtil::errs</a>() &lt;&lt; <span class="stringliteral">&quot;not an IR file: &quot;</span> &lt;&lt; moduleName &lt;&lt; std::endl;</div>
601
601
  <div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; abort();</div>
602
602
  <div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; }</div>
603
- <div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#acde6292e719c80f93d3d1c344ab442cd">modules</a>.emplace_back(*mod);</div>
604
- <div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#ae365189769640adb919a23c36978e5e2">owned_modules</a>.emplace_back(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(mod));</div>
605
- <div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; }</div>
606
- <div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160;}</div>
607
- <div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; </div>
608
- <div class="line"><a name="l00555"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a9247b3240ea36913baf7e7aa6d4a37e8"> 555</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a9247b3240ea36913baf7e7aa6d4a37e8">LLVMModuleSet::loadExtModules</a>()</div>
609
- <div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160;{</div>
610
- <div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <span class="comment">// has external bc</span></div>
611
- <div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#ad06a92bf8bc556de742e0ffdf79ffafe">cxts</a> = std::make_unique&lt;LLVMContext&gt;();</div>
612
- <div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a2ed1e6f7911ae5cfbf79213e4d07531e">Options::ExtAPIInput</a>().size() &gt; 0)</div>
613
- <div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; {</div>
614
- <div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> extModuleName = <a class="code" href="classSVF_1_1Options.html#a2ed1e6f7911ae5cfbf79213e4d07531e">Options::ExtAPIInput</a>();</div>
615
- <div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="namespaceSVF_1_1LLVMUtil.html#ad8a8c32a09340f491fffffcb07dd7a41">LLVMUtil::isIRFile</a>(extModuleName))</div>
616
- <div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; {</div>
617
- <div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">SVFUtil::errs</a>() &lt;&lt; <span class="stringliteral">&quot;not an external IR file: &quot;</span> &lt;&lt; extModuleName &lt;&lt; std::endl;</div>
618
- <div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; abort();</div>
619
- <div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; }</div>
620
- <div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <a class="code" href="namespaceSVF.html#a86863d104a3930b3a806935d92ddbf30">SMDiagnostic</a> Err;</div>
621
- <div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; std::unique_ptr&lt;Module&gt; mod = parseIRFile(extModuleName, Err, *<a class="code" href="classSVF_1_1LLVMModuleSet.html#ad06a92bf8bc556de742e0ffdf79ffafe">cxts</a>);</div>
622
- <div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; <span class="keywordflow">if</span> (mod == <span class="keyword">nullptr</span>)</div>
623
- <div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; {</div>
624
- <div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">SVFUtil::errs</a>() &lt;&lt; <span class="stringliteral">&quot;load external module: &quot;</span> &lt;&lt; extModuleName &lt;&lt; <span class="stringliteral">&quot;failed!!\n\n&quot;</span>;</div>
625
- <div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; Err.print(<span class="stringliteral">&quot;SVFModuleLoader&quot;</span>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">llvm::errs</a>());</div>
603
+ <div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; </div>
604
+ <div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <a class="code" href="namespaceSVF.html#a86863d104a3930b3a806935d92ddbf30">SMDiagnostic</a> Err;</div>
605
+ <div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; std::unique_ptr&lt;Module&gt; mod = parseIRFile(moduleName, Err, *<a class="code" href="classSVF_1_1LLVMModuleSet.html#ad06a92bf8bc556de742e0ffdf79ffafe">cxts</a>);</div>
606
+ <div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; <span class="keywordflow">if</span> (mod == <span class="keyword">nullptr</span>)</div>
607
+ <div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; {</div>
608
+ <div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">SVFUtil::errs</a>() &lt;&lt; <span class="stringliteral">&quot;load module: &quot;</span> &lt;&lt; moduleName &lt;&lt; <span class="stringliteral">&quot;failed!!\n\n&quot;</span>;</div>
609
+ <div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; Err.print(<span class="stringliteral">&quot;SVFModuleLoader&quot;</span>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">llvm::errs</a>());</div>
610
+ <div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; abort();</div>
611
+ <div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; }</div>
612
+ <div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#acde6292e719c80f93d3d1c344ab442cd">modules</a>.emplace_back(*mod);</div>
613
+ <div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#ae365189769640adb919a23c36978e5e2">owned_modules</a>.emplace_back(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(mod));</div>
614
+ <div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; }</div>
615
+ <div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160;}</div>
616
+ <div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; </div>
617
+ <div class="line"><a name="l00564"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a8820d1df9098db6eadf3a9c67e380e55"> 564</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a8820d1df9098db6eadf3a9c67e380e55">LLVMModuleSet::loadExtAPIModules</a>()</div>
618
+ <div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160;{</div>
619
+ <div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; <span class="comment">// has external bc</span></div>
620
+ <div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a2ed1e6f7911ae5cfbf79213e4d07531e">Options::ExtAPIInput</a>().size() &gt; 0)</div>
621
+ <div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; {</div>
622
+ <div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> extModuleName = <a class="code" href="classSVF_1_1Options.html#a2ed1e6f7911ae5cfbf79213e4d07531e">Options::ExtAPIInput</a>();</div>
623
+ <div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="namespaceSVF_1_1LLVMUtil.html#ad8a8c32a09340f491fffffcb07dd7a41">LLVMUtil::isIRFile</a>(extModuleName))</div>
624
+ <div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; {</div>
625
+ <div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">SVFUtil::errs</a>() &lt;&lt; <span class="stringliteral">&quot;not an external IR file: &quot;</span> &lt;&lt; extModuleName &lt;&lt; std::endl;</div>
626
626
  <div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; abort();</div>
627
627
  <div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; }</div>
628
- <div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#acde6292e719c80f93d3d1c344ab442cd">modules</a>.emplace_back(*mod);</div>
629
- <div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#ae365189769640adb919a23c36978e5e2">owned_modules</a>.emplace_back(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(mod));</div>
630
- <div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; }</div>
631
- <div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160;}</div>
632
- <div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; </div>
633
- <div class="line"><a name="l00580"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a0b46a2a5ff2165d17993a071d9cc82c1"> 580</a></span>&#160;std::vector&lt;const Function* &gt; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a0b46a2a5ff2165d17993a071d9cc82c1">LLVMModuleSet::getLLVMGlobalFunctions</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a> *global)</div>
634
- <div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160;{</div>
635
- <div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; <span class="comment">// This function is used to extract constructor and destructor functions</span></div>
636
- <div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; <span class="comment">// sorted by their priority from @llvm.global_ctors or @llvm.global_dtors.</span></div>
637
- <div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; <span class="comment">// For example, given following @llvm.global_ctors, the returning sorted</span></div>
638
- <div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; <span class="comment">// function list should be [ctor3, ctor1, ctor2].</span></div>
639
- <div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <span class="comment">// ------------------------------------------------------------------</span></div>
640
- <div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <span class="comment">// ; Each struct in the array is {priority, function, associated data}</span></div>
641
- <div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; <span class="comment">//</span></div>
642
- <div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <span class="comment">// @llvm.global_ctors = appending global [2 x { i32, void ()*, i8* }]</span></div>
643
- <div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <span class="comment">// [{ i32, void ()*, i8* } { i32 1234, void ()* @ctor1.cpp, i8* null },</span></div>
644
- <div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <span class="comment">// { i32, void ()*, i8* } { i32 2345, void ()* @ctor2.cpp, i8* null },</span></div>
645
- <div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; <span class="comment">// { i32, void ()*, i8* } { i32 345, void ()* @ctor3.cpp, i8* null }]</span></div>
646
- <div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="comment">// ------------------------------------------------------------------</span></div>
647
- <div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; <span class="comment">// TODO: According to LLVM language reference, if the third field is</span></div>
648
- <div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; <span class="comment">// non-null, and points to a global variable or function, the initializer</span></div>
649
- <div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; <span class="comment">// function will only run if the associated data from the current module is</span></div>
650
- <div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <span class="comment">// not discarded. However the associated data is currently ignored.</span></div>
651
- <div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; </div>
652
- <div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; </div>
653
- <div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; <span class="comment">// This class is used for the priority queue that sorts the functions by</span></div>
654
- <div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; <span class="comment">// their priority. Each object of this class stands for an item in the</span></div>
655
- <div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; <span class="comment">// function array.</span></div>
656
- <div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; <span class="keyword">class </span>LLVMGlobalFunction</div>
657
- <div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; {</div>
658
- <div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <span class="keyword">public</span>:</div>
659
- <div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> priority;</div>
660
- <div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* func;</div>
661
- <div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; LLVMGlobalFunction() {};</div>
662
- <div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; LLVMGlobalFunction(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> _priority, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* _func)</div>
663
- <div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; : priority(_priority), func(_func) {};</div>
664
- <div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="namespaceSVF.html#aedd9d023a68dddd66314be63bb8e48d2">operator&gt;</a>(<span class="keyword">const</span> LLVMGlobalFunction &amp;other)<span class="keyword"> const</span></div>
665
- <div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160;<span class="keyword"> </span>{</div>
666
- <div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; <span class="keywordflow">if</span> (priority != other.priority)</div>
667
- <div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; {</div>
668
- <div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; <span class="keywordflow">return</span> priority &gt; other.priority;</div>
669
- <div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; }</div>
670
- <div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; <span class="keywordflow">else</span></div>
671
- <div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; {</div>
672
- <div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; <span class="keywordflow">return</span> func &gt; other.func;</div>
673
- <div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; }</div>
674
- <div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; }</div>
675
- <div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; };</div>
676
- <div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; </div>
677
- <div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; std::priority_queue&lt;LLVMGlobalFunction, std::vector&lt;LLVMGlobalFunction&gt;,</div>
678
- <div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; greater&lt;LLVMGlobalFunction&gt;&gt;</div>
679
- <div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; queue;</div>
680
- <div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; std::vector&lt;const Function* &gt; result;</div>
681
- <div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; </div>
682
- <div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; <span class="comment">// The @llvm.global_ctors/dtors global variable is an array of struct. Each</span></div>
683
- <div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; <span class="comment">// struct has three fields: {i32 priority, void ()* @ctor/dtor, i8* @data}.</span></div>
684
- <div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; <span class="comment">// First get the array here.</span></div>
685
- <div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5ae718cba37d8e34d2946530dc098c8e">ConstantArray</a> *globalFuncArray =</div>
686
- <div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; SVFUtil::dyn_cast&lt;ConstantArray&gt;(global-&gt;getInitializer()))</div>
687
- <div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; {</div>
688
- <div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; <span class="comment">// Get each struct in the array.</span></div>
689
- <div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; globalFuncArray-&gt;getNumOperands(); ++i)</div>
690
- <div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; {</div>
691
- <div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; <span class="keywordflow">if</span> (</div>
692
- <div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2b28f48dde0a9a91d251e654ce1f9477">ConstantStruct</a> *globalFuncItem =</div>
693
- <div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; SVFUtil::dyn_cast&lt;ConstantStruct&gt;(</div>
694
- <div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; globalFuncArray-&gt;getOperand(i)))</div>
695
- <div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; {</div>
696
- <div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; </div>
697
- <div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; <span class="comment">// Extract priority and function from the struct</span></div>
698
- <div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a>* priority = SVFUtil::dyn_cast&lt;ConstantInt&gt;(</div>
699
- <div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; globalFuncItem-&gt;getOperand(0));</div>
700
- <div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* func = SVFUtil::dyn_cast&lt;Function&gt;(</div>
701
- <div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; globalFuncItem-&gt;getOperand(1));</div>
702
- <div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; </div>
703
- <div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <span class="keywordflow">if</span> (priority &amp;&amp; func)</div>
704
- <div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; {</div>
705
- <div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; queue.push(LLVMGlobalFunction(priority</div>
706
- <div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; -&gt;getZExtValue(),</div>
707
- <div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; func));</div>
708
- <div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; }</div>
709
- <div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; }</div>
710
- <div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; }</div>
711
- <div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; }</div>
712
- <div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; </div>
713
- <div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; <span class="comment">// Generate a sorted vector of functions from the priority queue.</span></div>
714
- <div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; <span class="keywordflow">while</span> (!queue.empty())</div>
715
- <div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; {</div>
716
- <div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; result.push_back(queue.top().func);</div>
717
- <div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; queue.pop();</div>
718
- <div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; }</div>
719
- <div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; <span class="keywordflow">return</span> result;</div>
720
- <div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160;}</div>
721
- <div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; </div>
722
- <div class="line"><a name="l00669"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a8af6b911b728713f66f7c809d5c0fbf1"> 669</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a8af6b911b728713f66f7c809d5c0fbf1">LLVMModuleSet::addSVFMain</a>()</div>
723
- <div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160;{</div>
724
- <div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; std::vector&lt;const Function*&gt; ctor_funcs;</div>
725
- <div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; std::vector&lt;const Function*&gt; dtor_funcs;</div>
726
- <div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* orgMain = 0;</div>
727
- <div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; <a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a>* mainMod = <span class="keyword">nullptr</span>;</div>
728
- <div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; </div>
729
- <div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> &amp;mod : <a class="code" href="classSVF_1_1LLVMModuleSet.html#acde6292e719c80f93d3d1c344ab442cd">modules</a>)</div>
730
- <div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; {</div>
731
- <div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; <span class="comment">// Collect ctor and dtor functions</span></div>
732
- <div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>&amp; global : mod.globals())</div>
733
- <div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; {</div>
734
- <div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; <span class="keywordflow">if</span> (global.getName().equals(<a class="code" href="LLVMModule_8cpp.html#aa18802f2f60ef8030c66a42f20f285af">SVF_GLOBAL_CTORS</a>) &amp;&amp; global.hasInitializer())</div>
735
- <div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; {</div>
736
- <div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; ctor_funcs = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a0b46a2a5ff2165d17993a071d9cc82c1">getLLVMGlobalFunctions</a>(&amp;global);</div>
737
- <div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; }</div>
738
- <div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (global.getName().equals(<a class="code" href="LLVMModule_8cpp.html#a9fd6e28e6ed93f65a20a348ab0646320">SVF_GLOBAL_DTORS</a>) &amp;&amp; global.hasInitializer())</div>
739
- <div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; {</div>
740
- <div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; dtor_funcs = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a0b46a2a5ff2165d17993a071d9cc82c1">getLLVMGlobalFunctions</a>(&amp;global);</div>
741
- <div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; }</div>
742
- <div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; }</div>
743
- <div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; </div>
744
- <div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; <span class="comment">// Find main function</span></div>
745
- <div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> &amp;func : mod)</div>
746
- <div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; {</div>
747
- <div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; <span class="keyword">auto</span> funName = func.getName();</div>
748
- <div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; </div>
749
- <div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; assert(!funName.equals(<a class="code" href="LLVMModule_8cpp.html#a10ab7c7da3a458495d8528b9e90d714b">SVF_MAIN_FUNC_NAME</a>) &amp;&amp; <a class="code" href="LLVMModule_8cpp.html#a10ab7c7da3a458495d8528b9e90d714b">SVF_MAIN_FUNC_NAME</a> <span class="stringliteral">&quot; already defined&quot;</span>);</div>
750
- <div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; </div>
751
- <div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; <span class="keywordflow">if</span> (funName.equals(<span class="stringliteral">&quot;main&quot;</span>))</div>
752
- <div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; {</div>
753
- <div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; orgMain = &amp;func;</div>
754
- <div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; mainMod = &amp;mod;</div>
755
- <div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; }</div>
756
- <div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; }</div>
757
- <div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; }</div>
628
+ <div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; <a class="code" href="namespaceSVF.html#a86863d104a3930b3a806935d92ddbf30">SMDiagnostic</a> Err;</div>
629
+ <div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; std::unique_ptr&lt;Module&gt; mod = parseIRFile(extModuleName, Err, *<a class="code" href="classSVF_1_1LLVMModuleSet.html#ad06a92bf8bc556de742e0ffdf79ffafe">cxts</a>);</div>
630
+ <div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <span class="keywordflow">if</span> (mod == <span class="keyword">nullptr</span>)</div>
631
+ <div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; {</div>
632
+ <div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">SVFUtil::errs</a>() &lt;&lt; <span class="stringliteral">&quot;load external module: &quot;</span> &lt;&lt; extModuleName &lt;&lt; <span class="stringliteral">&quot;failed!!\n\n&quot;</span>;</div>
633
+ <div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; Err.print(<span class="stringliteral">&quot;SVFModuleLoader&quot;</span>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">llvm::errs</a>());</div>
634
+ <div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; abort();</div>
635
+ <div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; }</div>
636
+ <div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#acde6292e719c80f93d3d1c344ab442cd">modules</a>.emplace_back(*mod);</div>
637
+ <div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#ae365189769640adb919a23c36978e5e2">owned_modules</a>.emplace_back(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(mod));</div>
638
+ <div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; }</div>
639
+ <div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160;}</div>
640
+ <div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; </div>
641
+ <div class="line"><a name="l00588"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a0b46a2a5ff2165d17993a071d9cc82c1"> 588</a></span>&#160;std::vector&lt;const Function* &gt; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a0b46a2a5ff2165d17993a071d9cc82c1">LLVMModuleSet::getLLVMGlobalFunctions</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a> *global)</div>
642
+ <div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160;{</div>
643
+ <div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <span class="comment">// This function is used to extract constructor and destructor functions</span></div>
644
+ <div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <span class="comment">// sorted by their priority from @llvm.global_ctors or @llvm.global_dtors.</span></div>
645
+ <div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; <span class="comment">// For example, given following @llvm.global_ctors, the returning sorted</span></div>
646
+ <div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="comment">// function list should be [ctor3, ctor1, ctor2].</span></div>
647
+ <div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; <span class="comment">// ------------------------------------------------------------------</span></div>
648
+ <div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; <span class="comment">// ; Each struct in the array is {priority, function, associated data}</span></div>
649
+ <div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; <span class="comment">//</span></div>
650
+ <div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <span class="comment">// @llvm.global_ctors = appending global [2 x { i32, void ()*, i8* }]</span></div>
651
+ <div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; <span class="comment">// [{ i32, void ()*, i8* } { i32 1234, void ()* @ctor1.cpp, i8* null },</span></div>
652
+ <div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <span class="comment">// { i32, void ()*, i8* } { i32 2345, void ()* @ctor2.cpp, i8* null },</span></div>
653
+ <div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; <span class="comment">// { i32, void ()*, i8* } { i32 345, void ()* @ctor3.cpp, i8* null }]</span></div>
654
+ <div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; <span class="comment">// ------------------------------------------------------------------</span></div>
655
+ <div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; <span class="comment">// TODO: According to LLVM language reference, if the third field is</span></div>
656
+ <div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; <span class="comment">// non-null, and points to a global variable or function, the initializer</span></div>
657
+ <div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; <span class="comment">// function will only run if the associated data from the current module is</span></div>
658
+ <div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <span class="comment">// not discarded. However the associated data is currently ignored.</span></div>
659
+ <div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; </div>
660
+ <div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; </div>
661
+ <div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; <span class="comment">// This class is used for the priority queue that sorts the functions by</span></div>
662
+ <div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <span class="comment">// their priority. Each object of this class stands for an item in the</span></div>
663
+ <div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; <span class="comment">// function array.</span></div>
664
+ <div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; <span class="keyword">class </span>LLVMGlobalFunction</div>
665
+ <div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; {</div>
666
+ <div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; <span class="keyword">public</span>:</div>
667
+ <div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> priority;</div>
668
+ <div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* func;</div>
669
+ <div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; LLVMGlobalFunction() {};</div>
670
+ <div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; LLVMGlobalFunction(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> _priority, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* _func)</div>
671
+ <div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; : priority(_priority), func(_func) {};</div>
672
+ <div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="namespaceSVF.html#aedd9d023a68dddd66314be63bb8e48d2">operator&gt;</a>(<span class="keyword">const</span> LLVMGlobalFunction &amp;other)<span class="keyword"> const</span></div>
673
+ <div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160;<span class="keyword"> </span>{</div>
674
+ <div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; <span class="keywordflow">if</span> (priority != other.priority)</div>
675
+ <div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; {</div>
676
+ <div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; <span class="keywordflow">return</span> priority &gt; other.priority;</div>
677
+ <div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; }</div>
678
+ <div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; <span class="keywordflow">else</span></div>
679
+ <div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; {</div>
680
+ <div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; <span class="keywordflow">return</span> func &gt; other.func;</div>
681
+ <div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; }</div>
682
+ <div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; }</div>
683
+ <div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; };</div>
684
+ <div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; </div>
685
+ <div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; std::priority_queue&lt;LLVMGlobalFunction, std::vector&lt;LLVMGlobalFunction&gt;,</div>
686
+ <div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; greater&lt;LLVMGlobalFunction&gt;&gt;</div>
687
+ <div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; queue;</div>
688
+ <div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; std::vector&lt;const Function* &gt; result;</div>
689
+ <div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; </div>
690
+ <div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; <span class="comment">// The @llvm.global_ctors/dtors global variable is an array of struct. Each</span></div>
691
+ <div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; <span class="comment">// struct has three fields: {i32 priority, void ()* @ctor/dtor, i8* @data}.</span></div>
692
+ <div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; <span class="comment">// First get the array here.</span></div>
693
+ <div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5ae718cba37d8e34d2946530dc098c8e">ConstantArray</a> *globalFuncArray =</div>
694
+ <div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; SVFUtil::dyn_cast&lt;ConstantArray&gt;(global-&gt;getInitializer()))</div>
695
+ <div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; {</div>
696
+ <div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; <span class="comment">// Get each struct in the array.</span></div>
697
+ <div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; globalFuncArray-&gt;getNumOperands(); ++i)</div>
698
+ <div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; {</div>
699
+ <div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; <span class="keywordflow">if</span> (</div>
700
+ <div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2b28f48dde0a9a91d251e654ce1f9477">ConstantStruct</a> *globalFuncItem =</div>
701
+ <div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; SVFUtil::dyn_cast&lt;ConstantStruct&gt;(</div>
702
+ <div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; globalFuncArray-&gt;getOperand(i)))</div>
703
+ <div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; {</div>
704
+ <div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; </div>
705
+ <div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <span class="comment">// Extract priority and function from the struct</span></div>
706
+ <div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a>* priority = SVFUtil::dyn_cast&lt;ConstantInt&gt;(</div>
707
+ <div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; globalFuncItem-&gt;getOperand(0));</div>
708
+ <div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* func = SVFUtil::dyn_cast&lt;Function&gt;(</div>
709
+ <div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; globalFuncItem-&gt;getOperand(1));</div>
710
+ <div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; </div>
711
+ <div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; <span class="keywordflow">if</span> (priority &amp;&amp; func)</div>
712
+ <div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; {</div>
713
+ <div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; queue.push(LLVMGlobalFunction(priority</div>
714
+ <div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; -&gt;getZExtValue(),</div>
715
+ <div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; func));</div>
716
+ <div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; }</div>
717
+ <div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; }</div>
718
+ <div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; }</div>
719
+ <div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; }</div>
720
+ <div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; </div>
721
+ <div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; <span class="comment">// Generate a sorted vector of functions from the priority queue.</span></div>
722
+ <div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; <span class="keywordflow">while</span> (!queue.empty())</div>
723
+ <div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; {</div>
724
+ <div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; result.push_back(queue.top().func);</div>
725
+ <div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; queue.pop();</div>
726
+ <div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; }</div>
727
+ <div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; <span class="keywordflow">return</span> result;</div>
728
+ <div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160;}</div>
729
+ <div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; </div>
730
+ <div class="line"><a name="l00677"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a8af6b911b728713f66f7c809d5c0fbf1"> 677</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a8af6b911b728713f66f7c809d5c0fbf1">LLVMModuleSet::addSVFMain</a>()</div>
731
+ <div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160;{</div>
732
+ <div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; std::vector&lt;const Function*&gt; ctor_funcs;</div>
733
+ <div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; std::vector&lt;const Function*&gt; dtor_funcs;</div>
734
+ <div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* orgMain = 0;</div>
735
+ <div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; <a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a>* mainMod = <span class="keyword">nullptr</span>;</div>
736
+ <div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; </div>
737
+ <div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> &amp;mod : <a class="code" href="classSVF_1_1LLVMModuleSet.html#acde6292e719c80f93d3d1c344ab442cd">modules</a>)</div>
738
+ <div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; {</div>
739
+ <div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; <span class="comment">// Collect ctor and dtor functions</span></div>
740
+ <div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>&amp; global : mod.globals())</div>
741
+ <div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; {</div>
742
+ <div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; <span class="keywordflow">if</span> (global.getName().equals(<a class="code" href="LLVMModule_8cpp.html#aa18802f2f60ef8030c66a42f20f285af">SVF_GLOBAL_CTORS</a>) &amp;&amp; global.hasInitializer())</div>
743
+ <div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; {</div>
744
+ <div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; ctor_funcs = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a0b46a2a5ff2165d17993a071d9cc82c1">getLLVMGlobalFunctions</a>(&amp;global);</div>
745
+ <div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; }</div>
746
+ <div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (global.getName().equals(<a class="code" href="LLVMModule_8cpp.html#a9fd6e28e6ed93f65a20a348ab0646320">SVF_GLOBAL_DTORS</a>) &amp;&amp; global.hasInitializer())</div>
747
+ <div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; {</div>
748
+ <div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; dtor_funcs = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a0b46a2a5ff2165d17993a071d9cc82c1">getLLVMGlobalFunctions</a>(&amp;global);</div>
749
+ <div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; }</div>
750
+ <div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; }</div>
751
+ <div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; </div>
752
+ <div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; <span class="comment">// Find main function</span></div>
753
+ <div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> &amp;func : mod)</div>
754
+ <div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; {</div>
755
+ <div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; <span class="keyword">auto</span> funName = func.getName();</div>
756
+ <div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; </div>
757
+ <div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; assert(!funName.equals(<a class="code" href="LLVMModule_8cpp.html#a10ab7c7da3a458495d8528b9e90d714b">SVF_MAIN_FUNC_NAME</a>) &amp;&amp; <a class="code" href="LLVMModule_8cpp.html#a10ab7c7da3a458495d8528b9e90d714b">SVF_MAIN_FUNC_NAME</a> <span class="stringliteral">&quot; already defined&quot;</span>);</div>
758
758
  <div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; </div>
759
- <div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; <span class="comment">// Only create svf.main when the original main function is found, and also</span></div>
760
- <div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; <span class="comment">// there are global contructor or destructor functions.</span></div>
761
- <div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; <span class="keywordflow">if</span> (orgMain &amp;&amp; <a class="code" href="classSVF_1_1LLVMModuleSet.html#ae265a7f3cc7367d62013e0f15cf3d233">getModuleNum</a>() &gt; 0 &amp;&amp;</div>
762
- <div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; (ctor_funcs.size() &gt; 0 || dtor_funcs.size() &gt; 0))</div>
763
- <div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; {</div>
764
- <div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; assert(mainMod &amp;&amp; <span class="stringliteral">&quot;Module with main function not found.&quot;</span>);</div>
765
- <div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; <a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a>&amp; M = *mainMod;</div>
766
- <div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; <span class="comment">// char **</span></div>
767
- <div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* i8ptr2 = PointerType::getInt8PtrTy(M.getContext())-&gt;getPointerTo();</div>
768
- <div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* i32 = IntegerType::getInt32Ty(M.getContext());</div>
769
- <div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; <span class="comment">// define void @svf.main(i32, i8**, i8**)</span></div>
770
- <div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160;<span class="preprocessor">#if (LLVM_VERSION_MAJOR &gt;= 9)</span></div>
771
- <div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; FunctionCallee svfmainFn = M.getOrInsertFunction(</div>
772
- <div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; <a class="code" href="LLVMModule_8cpp.html#a10ab7c7da3a458495d8528b9e90d714b">SVF_MAIN_FUNC_NAME</a>,</div>
773
- <div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; Type::getVoidTy(M.getContext()),</div>
774
- <div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; i32,i8ptr2,i8ptr2</div>
775
- <div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; );</div>
776
- <div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* svfmain = SVFUtil::dyn_cast&lt;Function&gt;(svfmainFn.getCallee());</div>
777
- <div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160;<span class="preprocessor">#else</span></div>
778
- <div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* svfmain = SVFUtil::dyn_cast&lt;Function&gt;(M.getOrInsertFunction(</div>
779
- <div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; <a class="code" href="LLVMModule_8cpp.html#a10ab7c7da3a458495d8528b9e90d714b">SVF_MAIN_FUNC_NAME</a>,</div>
780
- <div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; Type::getVoidTy(M.getContext()),</div>
781
- <div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; i32,i8ptr2,i8ptr2</div>
782
- <div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; ));</div>
783
- <div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160;<span class="preprocessor">#endif</span></div>
784
- <div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; svfmain-&gt;setCallingConv(llvm::CallingConv::C);</div>
785
- <div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* block = BasicBlock::Create(M.getContext(), <span class="stringliteral">&quot;entry&quot;</span>, svfmain);</div>
786
- <div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; <a class="code" href="namespaceSVF.html#a94824519e439aeef1568d415b6f7331c">IRBuilder</a> Builder(block);</div>
787
- <div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; <span class="comment">// emit &quot;call void @ctor()&quot;. ctor_funcs is sorted so the functions are</span></div>
788
- <div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; <span class="comment">// emitted in the order of priority</span></div>
789
- <div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; ctor : ctor_funcs)</div>
790
- <div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; {</div>
791
- <div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; <span class="keyword">auto</span> target = M.getOrInsertFunction(</div>
792
- <div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; ctor-&gt;getName(),</div>
793
- <div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; Type::getVoidTy(M.getContext())</div>
794
- <div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; );</div>
795
- <div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; Builder.CreateCall(target);</div>
796
- <div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; }</div>
797
- <div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; <span class="comment">// main() should be called after all ctor functions and before dtor</span></div>
798
- <div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; <span class="comment">// functions.</span></div>
799
- <div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; Function::arg_iterator arg_it = svfmain-&gt;arg_begin();</div>
800
- <div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* args[] = {arg_it, arg_it + 1, arg_it + 2};</div>
801
- <div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; <span class="keywordtype">size_t</span> cnt = orgMain-&gt;arg_size();</div>
802
- <div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; assert(cnt &lt;= 3 &amp;&amp; <span class="stringliteral">&quot;Too many arguments for main()&quot;</span>);</div>
803
- <div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; Builder.CreateCall(orgMain, llvm::ArrayRef&lt;Value*&gt;(args, args + cnt));</div>
804
- <div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; <span class="comment">// emit &quot;call void @dtor()&quot;. dtor_funcs is sorted so the functions are</span></div>
805
- <div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; <span class="comment">// emitted in the order of priority</span></div>
806
- <div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; dtor : dtor_funcs)</div>
807
- <div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; {</div>
808
- <div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; <span class="keyword">auto</span> target = M.getOrInsertFunction(dtor-&gt;getName(), Type::getVoidTy(M.getContext()));</div>
809
- <div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; Builder.CreateCall(target);</div>
810
- <div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; }</div>
811
- <div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; <span class="comment">// return;</span></div>
812
- <div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; Builder.CreateRetVoid();</div>
813
- <div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; }</div>
814
- <div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160;}</div>
815
- <div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; </div>
816
- <div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; </div>
817
- <div class="line"><a name="l00764"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#ac7c646a78c989807c52263fc35fb3628"> 764</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#ac7c646a78c989807c52263fc35fb3628">LLVMModuleSet::buildFunToFunMap</a>()</div>
818
- <div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160;{</div>
819
- <div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const Function*&gt;</a> funDecls, funDefs;</div>
820
- <div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; <a class="code" href="namespaceSVF.html#a4f21e91ff8eaea5207afe5c60dbd78d7">OrderedSet&lt;string&gt;</a> declNames, defNames, intersectNames;</div>
821
- <div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;string, const Function*&gt;</a> NameToFunDefMapTy;</div>
822
- <div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;string, Set&lt;const Function*&gt;</a>&gt; NameToFunDeclsMapTy;</div>
759
+ <div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; <span class="keywordflow">if</span> (funName.equals(<span class="stringliteral">&quot;main&quot;</span>))</div>
760
+ <div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; {</div>
761
+ <div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; orgMain = &amp;func;</div>
762
+ <div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; mainMod = &amp;mod;</div>
763
+ <div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; }</div>
764
+ <div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; }</div>
765
+ <div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; }</div>
766
+ <div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; </div>
767
+ <div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; <span class="comment">// Only create svf.main when the original main function is found, and also</span></div>
768
+ <div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; <span class="comment">// there are global contructor or destructor functions.</span></div>
769
+ <div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; <span class="keywordflow">if</span> (orgMain &amp;&amp; <a class="code" href="classSVF_1_1LLVMModuleSet.html#ae265a7f3cc7367d62013e0f15cf3d233">getModuleNum</a>() &gt; 0 &amp;&amp;</div>
770
+ <div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; (ctor_funcs.size() &gt; 0 || dtor_funcs.size() &gt; 0))</div>
771
+ <div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; {</div>
772
+ <div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; assert(mainMod &amp;&amp; <span class="stringliteral">&quot;Module with main function not found.&quot;</span>);</div>
773
+ <div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; <a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a>&amp; M = *mainMod;</div>
774
+ <div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; <span class="comment">// char **</span></div>
775
+ <div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* i8ptr2 = PointerType::getInt8PtrTy(M.getContext())-&gt;getPointerTo();</div>
776
+ <div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* i32 = IntegerType::getInt32Ty(M.getContext());</div>
777
+ <div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; <span class="comment">// define void @svf.main(i32, i8**, i8**)</span></div>
778
+ <div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160;<span class="preprocessor">#if (LLVM_VERSION_MAJOR &gt;= 9)</span></div>
779
+ <div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; FunctionCallee svfmainFn = M.getOrInsertFunction(</div>
780
+ <div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; <a class="code" href="LLVMModule_8cpp.html#a10ab7c7da3a458495d8528b9e90d714b">SVF_MAIN_FUNC_NAME</a>,</div>
781
+ <div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; Type::getVoidTy(M.getContext()),</div>
782
+ <div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; i32,i8ptr2,i8ptr2</div>
783
+ <div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; );</div>
784
+ <div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* svfmain = SVFUtil::dyn_cast&lt;Function&gt;(svfmainFn.getCallee());</div>
785
+ <div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160;<span class="preprocessor">#else</span></div>
786
+ <div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* svfmain = SVFUtil::dyn_cast&lt;Function&gt;(M.getOrInsertFunction(</div>
787
+ <div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; <a class="code" href="LLVMModule_8cpp.html#a10ab7c7da3a458495d8528b9e90d714b">SVF_MAIN_FUNC_NAME</a>,</div>
788
+ <div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; Type::getVoidTy(M.getContext()),</div>
789
+ <div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; i32,i8ptr2,i8ptr2</div>
790
+ <div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; ));</div>
791
+ <div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160;<span class="preprocessor">#endif</span></div>
792
+ <div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; svfmain-&gt;setCallingConv(llvm::CallingConv::C);</div>
793
+ <div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* block = BasicBlock::Create(M.getContext(), <span class="stringliteral">&quot;entry&quot;</span>, svfmain);</div>
794
+ <div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; <a class="code" href="namespaceSVF.html#a94824519e439aeef1568d415b6f7331c">IRBuilder</a> Builder(block);</div>
795
+ <div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; <span class="comment">// emit &quot;call void @ctor()&quot;. ctor_funcs is sorted so the functions are</span></div>
796
+ <div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; <span class="comment">// emitted in the order of priority</span></div>
797
+ <div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; ctor : ctor_funcs)</div>
798
+ <div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; {</div>
799
+ <div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; <span class="keyword">auto</span> target = M.getOrInsertFunction(</div>
800
+ <div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; ctor-&gt;getName(),</div>
801
+ <div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; Type::getVoidTy(M.getContext())</div>
802
+ <div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; );</div>
803
+ <div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; Builder.CreateCall(target);</div>
804
+ <div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; }</div>
805
+ <div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; <span class="comment">// main() should be called after all ctor functions and before dtor</span></div>
806
+ <div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; <span class="comment">// functions.</span></div>
807
+ <div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; Function::arg_iterator arg_it = svfmain-&gt;arg_begin();</div>
808
+ <div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* args[] = {arg_it, arg_it + 1, arg_it + 2};</div>
809
+ <div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; <span class="keywordtype">size_t</span> cnt = orgMain-&gt;arg_size();</div>
810
+ <div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; assert(cnt &lt;= 3 &amp;&amp; <span class="stringliteral">&quot;Too many arguments for main()&quot;</span>);</div>
811
+ <div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; Builder.CreateCall(orgMain, llvm::ArrayRef&lt;Value*&gt;(args, args + cnt));</div>
812
+ <div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; <span class="comment">// emit &quot;call void @dtor()&quot;. dtor_funcs is sorted so the functions are</span></div>
813
+ <div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; <span class="comment">// emitted in the order of priority</span></div>
814
+ <div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; dtor : dtor_funcs)</div>
815
+ <div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; {</div>
816
+ <div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; <span class="keyword">auto</span> target = M.getOrInsertFunction(dtor-&gt;getName(), Type::getVoidTy(M.getContext()));</div>
817
+ <div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; Builder.CreateCall(target);</div>
818
+ <div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; }</div>
819
+ <div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; <span class="comment">// return;</span></div>
820
+ <div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; Builder.CreateRetVoid();</div>
821
+ <div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; }</div>
822
+ <div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160;}</div>
823
823
  <div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; </div>
824
- <div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a>&amp; mod : <a class="code" href="classSVF_1_1LLVMModuleSet.html#acde6292e719c80f93d3d1c344ab442cd">modules</a>)</div>
825
- <div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; {</div>
826
- <div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>&amp; fun : mod.functions())</div>
827
- <div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; {</div>
828
- <div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; <span class="keywordflow">if</span> (fun.isDeclaration())</div>
829
- <div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; {</div>
830
- <div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; funDecls.insert(&amp;fun);</div>
831
- <div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; declNames.insert(fun.getName().str());</div>
832
- <div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; }</div>
833
- <div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; <span class="keywordflow">else</span></div>
834
- <div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; {</div>
835
- <div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; funDefs.insert(&amp;fun);</div>
836
- <div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; defNames.insert(fun.getName().str());</div>
837
- <div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; }</div>
838
- <div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; }</div>
839
- <div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; }</div>
840
- <div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; <span class="comment">// Find the intersectNames</span></div>
841
- <div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; std::set_intersection(</div>
842
- <div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; declNames.begin(), declNames.end(), defNames.begin(), defNames.end(),</div>
843
- <div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; std::inserter(intersectNames, intersectNames.end()));</div>
844
- <div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; </div>
845
- <div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; NameToFunDefMapTy nameToFunDefMap;</div>
846
- <div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fdef : funDefs)</div>
847
- <div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; {</div>
848
- <div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; <span class="keywordtype">string</span> funName = fdef-&gt;getName().str();</div>
849
- <div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; <span class="keywordflow">if</span> (intersectNames.find(funName) != intersectNames.end())</div>
850
- <div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; {</div>
851
- <div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; nameToFunDefMap.emplace(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(funName), fdef);</div>
852
- <div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; }</div>
853
- <div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; }</div>
854
- <div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; </div>
855
- <div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; NameToFunDeclsMapTy nameToFunDeclsMap;</div>
856
- <div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fdecl : funDecls)</div>
857
- <div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; {</div>
858
- <div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; <span class="keywordtype">string</span> funName = fdecl-&gt;getName().str();</div>
859
- <div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; <span class="keywordflow">if</span> (intersectNames.find(funName) != intersectNames.end())</div>
860
- <div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; {</div>
861
- <div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; <span class="comment">// pair with key funName will be created automatically if it does</span></div>
862
- <div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; <span class="comment">// not exist</span></div>
863
- <div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; nameToFunDeclsMap[<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(funName)].insert(fdecl);</div>
864
- <div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; }</div>
865
- <div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; }</div>
866
- <div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; </div>
867
- <div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fdecl : funDecls)</div>
868
- <div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; {</div>
869
- <div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; <span class="keywordtype">string</span> funName = fdecl-&gt;getName().str();</div>
870
- <div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; NameToFunDefMapTy::iterator mit;</div>
871
- <div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; <span class="keywordflow">if</span> (intersectNames.find(funName) != intersectNames.end() &amp;&amp;</div>
872
- <div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; (mit = nameToFunDefMap.find(funName)) != nameToFunDefMap.end())</div>
873
- <div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; {</div>
874
- <div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#aee80b29e5246e3eaa0e30e165346101f">FunDeclToDefMap</a>[fdecl] = mit-&gt;second;</div>
875
- <div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; }</div>
876
- <div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; }</div>
877
- <div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; </div>
878
- <div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fdef : funDefs)</div>
879
- <div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; {</div>
880
- <div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; <span class="keywordtype">string</span> funName = fdef-&gt;getName().str();</div>
881
- <div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; <span class="keywordflow">if</span> (intersectNames.find(funName) == intersectNames.end())</div>
882
- <div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; <span class="keywordflow">continue</span>;</div>
883
- <div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; NameToFunDeclsMapTy::iterator mit = nameToFunDeclsMap.find(funName);</div>
884
- <div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; <span class="keywordflow">if</span> (mit == nameToFunDeclsMap.end())</div>
885
- <div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; <span class="keywordflow">continue</span>;</div>
886
- <div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; </div>
887
- <div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; std::vector&lt;const Function*&gt;&amp; decls = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a377cefaad4b688ab6edf94ba4abe00ee">FunDefToDeclsMap</a>[fdef];</div>
888
- <div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span>&amp; declsSet = mit-&gt;second;</div>
889
- <div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; <span class="comment">// Reserve space for decls to avoid more than 1 reallocation</span></div>
890
- <div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; decls.reserve(decls.size() + declsSet.size());</div>
891
- <div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; </div>
892
- <div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* decl : declsSet)</div>
893
- <div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; {</div>
894
- <div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; decls.push_back(decl);</div>
895
- <div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; }</div>
896
- <div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; }</div>
897
- <div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160;}</div>
898
- <div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; </div>
899
- <div class="line"><a name="l00851"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#aaab03cb6ff665bc008c67b866ba81e47"> 851</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#aaab03cb6ff665bc008c67b866ba81e47">LLVMModuleSet::buildGlobalDefToRepMap</a>()</div>
900
- <div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160;{</div>
901
- <div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;string, Set&lt;GlobalVariable*&gt;</a>&gt; NameToGlobalsMapTy;</div>
902
- <div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; NameToGlobalsMapTy nameToGlobalsMap;</div>
903
- <div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> &amp;mod : <a class="code" href="classSVF_1_1LLVMModuleSet.html#acde6292e719c80f93d3d1c344ab442cd">modules</a>)</div>
904
- <div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160; {</div>
905
- <div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160; <span class="comment">// Collect ctor and dtor functions</span></div>
906
- <div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>&amp; global : mod.globals())</div>
907
- <div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; {</div>
908
- <div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160; <span class="keywordflow">if</span> (global.hasPrivateLinkage())</div>
909
- <div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; <span class="keywordflow">continue</span>;</div>
910
- <div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160; <span class="keywordtype">string</span> <a class="code" href="cJSON_8h.html#a25d22ecc7e656d2c59332072684e8766">name</a> = global.getName().str();</div>
911
- <div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8h.html#a25d22ecc7e656d2c59332072684e8766">name</a>.empty())</div>
912
- <div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160; <span class="keywordflow">continue</span>;</div>
913
- <div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160; nameToGlobalsMap[<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(<a class="code" href="cJSON_8h.html#a25d22ecc7e656d2c59332072684e8766">name</a>)].insert(&amp;global);</div>
914
- <div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160; }</div>
915
- <div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160; }</div>
916
- <div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160; </div>
917
- <div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; pair : nameToGlobalsMap)</div>
918
- <div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; {</div>
919
- <div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;GlobalVariable*&gt;</a> &amp;globals = pair.second;</div>
920
- <div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; </div>
921
- <div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> repIt =</div>
922
- <div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; std::find_if(globals.begin(), globals.end(),</div>
923
- <div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160; [](<a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>* g)</div>
924
- <div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160; {</div>
925
- <div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; return g-&gt;hasInitializer();</div>
926
- <div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; });</div>
927
- <div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>* rep =</div>
928
- <div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; repIt != globals.end()</div>
929
- <div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160; ? *repIt</div>
930
- <div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160; <span class="comment">// When there is no initializer, just pick the first one.</span></div>
931
- <div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; : (assert(!globals.empty() &amp;&amp; <span class="stringliteral">&quot;Empty global set&quot;</span>),</div>
932
- <div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; *globals.begin());</div>
933
- <div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; </div>
934
- <div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>* cur : globals)</div>
935
- <div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; {</div>
936
- <div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#ae2a1fa0b908cf372c50af90e62c4bf2b">GlobalDefToRepMap</a>[cur] = rep;</div>
937
- <div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160; }</div>
938
- <div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160; }</div>
939
- <div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160;}</div>
940
- <div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160; </div>
941
- <div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160;<span class="comment">// Dump modules to files</span></div>
942
- <div class="line"><a name="l00894"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#af37b9976b282c875cac7bb1777da635c"> 894</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#af37b9976b282c875cac7bb1777da635c">LLVMModuleSet::dumpModulesToFile</a>(<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a>&amp; suffix)</div>
943
- <div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160;{</div>
944
- <div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a>&amp; mod : <a class="code" href="classSVF_1_1LLVMModuleSet.html#acde6292e719c80f93d3d1c344ab442cd">modules</a>)</div>
945
- <div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160; {</div>
946
- <div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> moduleName = mod.getName().str();</div>
947
- <div class="line"><a name="l00899"></a><span class="lineno"> 899</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> OutputFilename;</div>
948
- <div class="line"><a name="l00900"></a><span class="lineno"> 900</span>&#160; std::size_t pos = moduleName.rfind(<span class="charliteral">&#39;.&#39;</span>);</div>
949
- <div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160; <span class="keywordflow">if</span> (pos != std::string::npos)</div>
950
- <div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160; OutputFilename = moduleName.substr(0, pos) + suffix;</div>
951
- <div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160; <span class="keywordflow">else</span></div>
952
- <div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160; OutputFilename = moduleName + suffix;</div>
953
- <div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160; </div>
954
- <div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160; std::error_code EC;</div>
955
- <div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160; <a class="code" href="namespaceSVF.html#a1c7c7ac12791c0ae386283c0a4f127ba">raw_fd_ostream</a> OS(OutputFilename.c_str(), EC, llvm::sys::fs::OF_None);</div>
956
- <div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160; </div>
957
- <div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160;<span class="preprocessor">#if (LLVM_VERSION_MAJOR &gt;= 7)</span></div>
958
- <div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160; WriteBitcodeToFile(mod, OS);</div>
959
- <div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160;<span class="preprocessor">#else</span></div>
960
- <div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; WriteBitcodeToFile(&amp;mod, OS);</div>
961
- <div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160;<span class="preprocessor">#endif</span></div>
962
- <div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160; </div>
963
- <div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160; OS.flush();</div>
964
- <div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160; }</div>
965
- <div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160;}</div>
966
- <div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160; </div>
967
- <div class="line"><a name="l00919"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a7d61f479f52e1dc71a4ae7a4d62f3b6a"> 919</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a7d61f479f52e1dc71a4ae7a4d62f3b6a">LLVMModuleSet::setValueAttr</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val, <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* svfvalue)</div>
968
- <div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160;{</div>
969
- <div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a7f8e61cf5d838d7a2e862bc6955f16be">SVFValue2LLVMValue</a>[svfvalue] = val;</div>
824
+ <div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; </div>
825
+ <div class="line"><a name="l00772"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#ac7c646a78c989807c52263fc35fb3628"> 772</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#ac7c646a78c989807c52263fc35fb3628">LLVMModuleSet::buildFunToFunMap</a>()</div>
826
+ <div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160;{</div>
827
+ <div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const Function*&gt;</a> funDecls, funDefs;</div>
828
+ <div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; <a class="code" href="namespaceSVF.html#a4f21e91ff8eaea5207afe5c60dbd78d7">OrderedSet&lt;string&gt;</a> declNames, defNames, intersectNames;</div>
829
+ <div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;string, const Function*&gt;</a> NameToFunDefMapTy;</div>
830
+ <div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;string, Set&lt;const Function*&gt;</a>&gt; NameToFunDeclsMapTy;</div>
831
+ <div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; </div>
832
+ <div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a>&amp; mod : <a class="code" href="classSVF_1_1LLVMModuleSet.html#acde6292e719c80f93d3d1c344ab442cd">modules</a>)</div>
833
+ <div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; {</div>
834
+ <div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>&amp; fun : mod.functions())</div>
835
+ <div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; {</div>
836
+ <div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; <span class="keywordflow">if</span> (fun.isDeclaration())</div>
837
+ <div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; {</div>
838
+ <div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; funDecls.insert(&amp;fun);</div>
839
+ <div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; declNames.insert(fun.getName().str());</div>
840
+ <div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; }</div>
841
+ <div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; <span class="keywordflow">else</span></div>
842
+ <div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; {</div>
843
+ <div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; funDefs.insert(&amp;fun);</div>
844
+ <div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; defNames.insert(fun.getName().str());</div>
845
+ <div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; }</div>
846
+ <div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; }</div>
847
+ <div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; }</div>
848
+ <div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; <span class="comment">// Find the intersectNames</span></div>
849
+ <div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; std::set_intersection(</div>
850
+ <div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; declNames.begin(), declNames.end(), defNames.begin(), defNames.end(),</div>
851
+ <div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; std::inserter(intersectNames, intersectNames.end()));</div>
852
+ <div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; </div>
853
+ <div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; NameToFunDefMapTy nameToFunDefMap;</div>
854
+ <div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fdef : funDefs)</div>
855
+ <div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; {</div>
856
+ <div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; <span class="keywordtype">string</span> funName = fdef-&gt;getName().str();</div>
857
+ <div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; <span class="keywordflow">if</span> (intersectNames.find(funName) != intersectNames.end())</div>
858
+ <div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; {</div>
859
+ <div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; nameToFunDefMap.emplace(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(funName), fdef);</div>
860
+ <div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; }</div>
861
+ <div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; }</div>
862
+ <div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; </div>
863
+ <div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; NameToFunDeclsMapTy nameToFunDeclsMap;</div>
864
+ <div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fdecl : funDecls)</div>
865
+ <div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; {</div>
866
+ <div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; <span class="keywordtype">string</span> funName = fdecl-&gt;getName().str();</div>
867
+ <div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; <span class="keywordflow">if</span> (intersectNames.find(funName) != intersectNames.end())</div>
868
+ <div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; {</div>
869
+ <div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; <span class="comment">// pair with key funName will be created automatically if it does</span></div>
870
+ <div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; <span class="comment">// not exist</span></div>
871
+ <div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; nameToFunDeclsMap[<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(funName)].insert(fdecl);</div>
872
+ <div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; }</div>
873
+ <div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; }</div>
874
+ <div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; </div>
875
+ <div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fdecl : funDecls)</div>
876
+ <div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; {</div>
877
+ <div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; <span class="keywordtype">string</span> funName = fdecl-&gt;getName().str();</div>
878
+ <div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; NameToFunDefMapTy::iterator mit;</div>
879
+ <div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; <span class="keywordflow">if</span> (intersectNames.find(funName) != intersectNames.end() &amp;&amp;</div>
880
+ <div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; (mit = nameToFunDefMap.find(funName)) != nameToFunDefMap.end())</div>
881
+ <div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; {</div>
882
+ <div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#aee80b29e5246e3eaa0e30e165346101f">FunDeclToDefMap</a>[fdecl] = mit-&gt;second;</div>
883
+ <div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; }</div>
884
+ <div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; }</div>
885
+ <div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; </div>
886
+ <div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fdef : funDefs)</div>
887
+ <div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; {</div>
888
+ <div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; <span class="keywordtype">string</span> funName = fdef-&gt;getName().str();</div>
889
+ <div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; <span class="keywordflow">if</span> (intersectNames.find(funName) == intersectNames.end())</div>
890
+ <div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; <span class="keywordflow">continue</span>;</div>
891
+ <div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; NameToFunDeclsMapTy::iterator mit = nameToFunDeclsMap.find(funName);</div>
892
+ <div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; <span class="keywordflow">if</span> (mit == nameToFunDeclsMap.end())</div>
893
+ <div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; <span class="keywordflow">continue</span>;</div>
894
+ <div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; </div>
895
+ <div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; std::vector&lt;const Function*&gt;&amp; decls = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a377cefaad4b688ab6edf94ba4abe00ee">FunDefToDeclsMap</a>[fdef];</div>
896
+ <div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span>&amp; declsSet = mit-&gt;second;</div>
897
+ <div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; <span class="comment">// Reserve space for decls to avoid more than 1 reallocation</span></div>
898
+ <div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; decls.reserve(decls.size() + declsSet.size());</div>
899
+ <div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; </div>
900
+ <div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* decl : declsSet)</div>
901
+ <div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; {</div>
902
+ <div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; decls.push_back(decl);</div>
903
+ <div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; }</div>
904
+ <div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160; }</div>
905
+ <div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160;}</div>
906
+ <div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160; </div>
907
+ <div class="line"><a name="l00859"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#aaab03cb6ff665bc008c67b866ba81e47"> 859</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#aaab03cb6ff665bc008c67b866ba81e47">LLVMModuleSet::buildGlobalDefToRepMap</a>()</div>
908
+ <div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160;{</div>
909
+ <div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;string, Set&lt;GlobalVariable*&gt;</a>&gt; NameToGlobalsMapTy;</div>
910
+ <div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160; NameToGlobalsMapTy nameToGlobalsMap;</div>
911
+ <div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> &amp;mod : <a class="code" href="classSVF_1_1LLVMModuleSet.html#acde6292e719c80f93d3d1c344ab442cd">modules</a>)</div>
912
+ <div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160; {</div>
913
+ <div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160; <span class="comment">// Collect ctor and dtor functions</span></div>
914
+ <div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>&amp; global : mod.globals())</div>
915
+ <div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160; {</div>
916
+ <div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160; <span class="keywordflow">if</span> (global.hasPrivateLinkage())</div>
917
+ <div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; <span class="keywordflow">continue</span>;</div>
918
+ <div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; <span class="keywordtype">string</span> <a class="code" href="cJSON_8h.html#a25d22ecc7e656d2c59332072684e8766">name</a> = global.getName().str();</div>
919
+ <div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8h.html#a25d22ecc7e656d2c59332072684e8766">name</a>.empty())</div>
920
+ <div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; <span class="keywordflow">continue</span>;</div>
921
+ <div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; nameToGlobalsMap[<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(<a class="code" href="cJSON_8h.html#a25d22ecc7e656d2c59332072684e8766">name</a>)].insert(&amp;global);</div>
922
+ <div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; }</div>
923
+ <div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160; }</div>
924
+ <div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160; </div>
925
+ <div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; pair : nameToGlobalsMap)</div>
926
+ <div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; {</div>
927
+ <div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;GlobalVariable*&gt;</a> &amp;globals = pair.second;</div>
928
+ <div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; </div>
929
+ <div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> repIt =</div>
930
+ <div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160; std::find_if(globals.begin(), globals.end(),</div>
931
+ <div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; [](<a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>* g)</div>
932
+ <div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; {</div>
933
+ <div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; return g-&gt;hasInitializer();</div>
934
+ <div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; });</div>
935
+ <div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>* rep =</div>
936
+ <div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160; repIt != globals.end()</div>
937
+ <div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160; ? *repIt</div>
938
+ <div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160; <span class="comment">// When there is no initializer, just pick the first one.</span></div>
939
+ <div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160; : (assert(!globals.empty() &amp;&amp; <span class="stringliteral">&quot;Empty global set&quot;</span>),</div>
940
+ <div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160; *globals.begin());</div>
941
+ <div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160; </div>
942
+ <div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>* cur : globals)</div>
943
+ <div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160; {</div>
944
+ <div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#ae2a1fa0b908cf372c50af90e62c4bf2b">GlobalDefToRepMap</a>[cur] = rep;</div>
945
+ <div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160; }</div>
946
+ <div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160; }</div>
947
+ <div class="line"><a name="l00899"></a><span class="lineno"> 899</span>&#160;}</div>
948
+ <div class="line"><a name="l00900"></a><span class="lineno"> 900</span>&#160; </div>
949
+ <div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160;<span class="comment">// Dump modules to files</span></div>
950
+ <div class="line"><a name="l00902"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#af37b9976b282c875cac7bb1777da635c"> 902</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#af37b9976b282c875cac7bb1777da635c">LLVMModuleSet::dumpModulesToFile</a>(<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a>&amp; suffix)</div>
951
+ <div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160;{</div>
952
+ <div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a>&amp; mod : <a class="code" href="classSVF_1_1LLVMModuleSet.html#acde6292e719c80f93d3d1c344ab442cd">modules</a>)</div>
953
+ <div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160; {</div>
954
+ <div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> moduleName = mod.getName().str();</div>
955
+ <div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> OutputFilename;</div>
956
+ <div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160; std::size_t pos = moduleName.rfind(<span class="charliteral">&#39;.&#39;</span>);</div>
957
+ <div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160; <span class="keywordflow">if</span> (pos != std::string::npos)</div>
958
+ <div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160; OutputFilename = moduleName.substr(0, pos) + suffix;</div>
959
+ <div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160; <span class="keywordflow">else</span></div>
960
+ <div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; OutputFilename = moduleName + suffix;</div>
961
+ <div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160; </div>
962
+ <div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160; std::error_code EC;</div>
963
+ <div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160; <a class="code" href="namespaceSVF.html#a1c7c7ac12791c0ae386283c0a4f127ba">raw_fd_ostream</a> OS(OutputFilename.c_str(), EC, llvm::sys::fs::OF_None);</div>
964
+ <div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160; </div>
965
+ <div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160;<span class="preprocessor">#if (LLVM_VERSION_MAJOR &gt;= 7)</span></div>
966
+ <div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160; WriteBitcodeToFile(mod, OS);</div>
967
+ <div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160;<span class="preprocessor">#else</span></div>
968
+ <div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160; WriteBitcodeToFile(&amp;mod, OS);</div>
969
+ <div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160;<span class="preprocessor">#endif</span></div>
970
970
  <div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160; </div>
971
- <div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a07c785d931cef3c61e3dab4c615770be">LLVMUtil::isPtrInUncalledFunction</a>(val))</div>
972
- <div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160; svfvalue-&gt;<a class="code" href="classSVF_1_1SVFValue.html#ac2e5c42d0ac92375c88ef5b3f1b65dc4">setPtrInUncalledFunction</a>();</div>
973
- <div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a8a77403306e97ab4cb31a56d38bba5be">LLVMUtil::isConstDataOrAggData</a>(val))</div>
974
- <div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; svfvalue-&gt;<a class="code" href="classSVF_1_1SVFValue.html#afe1de41ca3215b325d0ca61814c6bd6b">setConstDataOrAggData</a>();</div>
975
- <div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; </div>
976
- <div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1SVFGlobalValue.html">SVFGlobalValue</a>* glob = SVFUtil::dyn_cast&lt;SVFGlobalValue&gt;(svfvalue))</div>
977
- <div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160; {</div>
978
- <div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* llvmVal = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a9e0c786488dfdc4605d4cbcf9943c85a">LLVMUtil::getGlobalRep</a>(val);</div>
979
- <div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; assert(SVFUtil::isa&lt;GlobalValue&gt;(llvmVal) &amp;&amp; <span class="stringliteral">&quot;not a GlobalValue?&quot;</span>);</div>
980
- <div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160; glob-&gt;setDefGlobalForMultipleModule(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a3cbba2eb702a3481478b2590dfffa352">getSVFGlobalValue</a>(SVFUtil::cast&lt;GlobalValue&gt;(llvmVal)));</div>
981
- <div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160; }</div>
982
- <div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svffun = SVFUtil::dyn_cast&lt;SVFFunction&gt;(svfvalue))</div>
983
- <div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160; {</div>
984
- <div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* func = SVFUtil::cast&lt;Function&gt;(val);</div>
985
- <div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160; svffun-&gt;setIsNotRet(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a651b6a1cf3665277d2241220bb145aed">LLVMUtil::functionDoesNotRet</a>(func));</div>
986
- <div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160; svffun-&gt;setIsUncalledFunction(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a2c61d741afbcfa853b505cd391f29f9b">LLVMUtil::isUncalledFunction</a>(func));</div>
987
- <div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160; svffun-&gt;setDefFunForMultipleModule(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a50fc24901350df9db890ba16a9b87e33">getSVFFunction</a>(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a3d34fcdfc98add848a34fd5259c11eb2">LLVMUtil::getDefFunForMultipleModule</a>(func)));</div>
988
- <div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160; }</div>
989
- <div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; </div>
990
- <div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; svfvalue-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a588acec1904d440797ca4500f63f7d28">setSourceLoc</a>(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a8e4add30bd0ce00d3f2aa2e31c64fef8">LLVMUtil::getSourceLoc</a>(val));</div>
991
- <div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160;}</div>
992
- <div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; </div>
993
- <div class="line"><a name="l00945"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a25821b0feeb3b08e00ec9d444520b727"> 945</a></span>&#160;<a class="code" href="classSVF_1_1SVFConstantData.html">SVFConstantData</a>* <a class="code" href="classSVF_1_1LLVMModuleSet.html#a25821b0feeb3b08e00ec9d444520b727">LLVMModuleSet::getSVFConstantData</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7332f8059ea95472dcc231de884a5768">ConstantData</a>* cd)</div>
994
- <div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160;{</div>
995
- <div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160; LLVMConst2SVFConstMap::const_iterator it = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a4b94c96898dbbc71bc1cee04786cf3dc">LLVMConst2SVFConst</a>.find(cd);</div>
996
- <div class="line"><a name="l00948"></a><span class="lineno"> 948</span>&#160; <span class="keywordflow">if</span>(it!=<a class="code" href="classSVF_1_1LLVMModuleSet.html#a4b94c96898dbbc71bc1cee04786cf3dc">LLVMConst2SVFConst</a>.end())</div>
997
- <div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160; {</div>
998
- <div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160; assert(SVFUtil::isa&lt;SVFConstantData&gt;(it-&gt;second) &amp;&amp; <span class="stringliteral">&quot;not a SVFConstantData type!&quot;</span>);</div>
999
- <div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160; <span class="keywordflow">return</span> SVFUtil::cast&lt;SVFConstantData&gt;(it-&gt;second);</div>
1000
- <div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160; }</div>
1001
- <div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160; <span class="keywordflow">else</span></div>
1002
- <div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160; {</div>
1003
- <div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160; <a class="code" href="classSVF_1_1SVFConstantData.html">SVFConstantData</a>* svfcd = <span class="keyword">nullptr</span>;</div>
1004
- <div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a>* cint = SVFUtil::dyn_cast&lt;ConstantInt&gt;(cd))</div>
1005
- <div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; {</div>
1006
- <div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160; <span class="keywordflow">if</span>(cint-&gt;getBitWidth() == 1)</div>
1007
- <div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160; svfcd = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFConstantInt.html">SVFConstantInt</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(cint-&gt;getType()), cint-&gt;getZExtValue(), cint-&gt;getZExtValue());</div>
1008
- <div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(cint-&gt;getBitWidth() &lt;= 64 &amp;&amp; cint-&gt;getBitWidth() &gt; 1)</div>
1009
- <div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160; svfcd = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFConstantInt.html">SVFConstantInt</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(cint-&gt;getType()), cint-&gt;getZExtValue(), cint-&gt;getSExtValue());</div>
1010
- <div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160; <span class="keywordflow">else</span></div>
1011
- <div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160; svfcd = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFConstantInt.html">SVFConstantInt</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(cint-&gt;getType()), 0, 0);</div>
1012
- <div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160; }</div>
1013
- <div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad49e4222ba46d9490b87a80df8b46800">ConstantFP</a>* cfp = SVFUtil::dyn_cast&lt;ConstantFP&gt;(cd))</div>
1014
- <div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160; {</div>
1015
- <div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160; <span class="keywordtype">double</span> dval = 0;</div>
1016
- <div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160; <span class="comment">// TODO: Why only double is considered? What about float?</span></div>
1017
- <div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; <span class="keywordflow">if</span>(cfp-&gt;isNormalFP() &amp;&amp; (&amp;cfp-&gt;getValueAPF().getSemantics()== &amp;llvm::APFloatBase::IEEEdouble()))</div>
1018
- <div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160; dval = cfp-&gt;getValueAPF().convertToDouble();</div>
1019
- <div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160; svfcd = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFConstantFP.html">SVFConstantFP</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(cd-&gt;getType()), dval);</div>
971
+ <div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160; OS.flush();</div>
972
+ <div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160; }</div>
973
+ <div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160;}</div>
974
+ <div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; </div>
975
+ <div class="line"><a name="l00927"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a7d61f479f52e1dc71a4ae7a4d62f3b6a"> 927</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a7d61f479f52e1dc71a4ae7a4d62f3b6a">LLVMModuleSet::setValueAttr</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val, <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* svfvalue)</div>
976
+ <div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160;{</div>
977
+ <div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a7f8e61cf5d838d7a2e862bc6955f16be">SVFValue2LLVMValue</a>[svfvalue] = val;</div>
978
+ <div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160; </div>
979
+ <div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a07c785d931cef3c61e3dab4c615770be">LLVMUtil::isPtrInUncalledFunction</a>(val))</div>
980
+ <div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160; svfvalue-&gt;<a class="code" href="classSVF_1_1SVFValue.html#ac2e5c42d0ac92375c88ef5b3f1b65dc4">setPtrInUncalledFunction</a>();</div>
981
+ <div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a8a77403306e97ab4cb31a56d38bba5be">LLVMUtil::isConstDataOrAggData</a>(val))</div>
982
+ <div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160; svfvalue-&gt;<a class="code" href="classSVF_1_1SVFValue.html#afe1de41ca3215b325d0ca61814c6bd6b">setConstDataOrAggData</a>();</div>
983
+ <div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160; </div>
984
+ <div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1SVFGlobalValue.html">SVFGlobalValue</a>* glob = SVFUtil::dyn_cast&lt;SVFGlobalValue&gt;(svfvalue))</div>
985
+ <div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160; {</div>
986
+ <div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* llvmVal = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a9e0c786488dfdc4605d4cbcf9943c85a">LLVMUtil::getGlobalRep</a>(val);</div>
987
+ <div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160; assert(SVFUtil::isa&lt;GlobalValue&gt;(llvmVal) &amp;&amp; <span class="stringliteral">&quot;not a GlobalValue?&quot;</span>);</div>
988
+ <div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160; glob-&gt;setDefGlobalForMultipleModule(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a3cbba2eb702a3481478b2590dfffa352">getSVFGlobalValue</a>(SVFUtil::cast&lt;GlobalValue&gt;(llvmVal)));</div>
989
+ <div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; }</div>
990
+ <div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svffun = SVFUtil::dyn_cast&lt;SVFFunction&gt;(svfvalue))</div>
991
+ <div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160; {</div>
992
+ <div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* func = SVFUtil::cast&lt;Function&gt;(val);</div>
993
+ <div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160; svffun-&gt;setIsNotRet(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a651b6a1cf3665277d2241220bb145aed">LLVMUtil::functionDoesNotRet</a>(func));</div>
994
+ <div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160; svffun-&gt;setIsUncalledFunction(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a2c61d741afbcfa853b505cd391f29f9b">LLVMUtil::isUncalledFunction</a>(func));</div>
995
+ <div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160; svffun-&gt;setDefFunForMultipleModule(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a50fc24901350df9db890ba16a9b87e33">getSVFFunction</a>(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a3d34fcdfc98add848a34fd5259c11eb2">LLVMUtil::getDefFunForMultipleModule</a>(func)));</div>
996
+ <div class="line"><a name="l00948"></a><span class="lineno"> 948</span>&#160; }</div>
997
+ <div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160; </div>
998
+ <div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160; svfvalue-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a588acec1904d440797ca4500f63f7d28">setSourceLoc</a>(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a8e4add30bd0ce00d3f2aa2e31c64fef8">LLVMUtil::getSourceLoc</a>(val));</div>
999
+ <div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160;}</div>
1000
+ <div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160; </div>
1001
+ <div class="line"><a name="l00953"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a25821b0feeb3b08e00ec9d444520b727"> 953</a></span>&#160;<a class="code" href="classSVF_1_1SVFConstantData.html">SVFConstantData</a>* <a class="code" href="classSVF_1_1LLVMModuleSet.html#a25821b0feeb3b08e00ec9d444520b727">LLVMModuleSet::getSVFConstantData</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7332f8059ea95472dcc231de884a5768">ConstantData</a>* cd)</div>
1002
+ <div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160;{</div>
1003
+ <div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160; LLVMConst2SVFConstMap::const_iterator it = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a4b94c96898dbbc71bc1cee04786cf3dc">LLVMConst2SVFConst</a>.find(cd);</div>
1004
+ <div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; <span class="keywordflow">if</span>(it!=<a class="code" href="classSVF_1_1LLVMModuleSet.html#a4b94c96898dbbc71bc1cee04786cf3dc">LLVMConst2SVFConst</a>.end())</div>
1005
+ <div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; {</div>
1006
+ <div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; assert(SVFUtil::isa&lt;SVFConstantData&gt;(it-&gt;second) &amp;&amp; <span class="stringliteral">&quot;not a SVFConstantData type!&quot;</span>);</div>
1007
+ <div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160; <span class="keywordflow">return</span> SVFUtil::cast&lt;SVFConstantData&gt;(it-&gt;second);</div>
1008
+ <div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; }</div>
1009
+ <div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160; <span class="keywordflow">else</span></div>
1010
+ <div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160; {</div>
1011
+ <div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160; <a class="code" href="classSVF_1_1SVFConstantData.html">SVFConstantData</a>* svfcd = <span class="keyword">nullptr</span>;</div>
1012
+ <div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a>* cint = SVFUtil::dyn_cast&lt;ConstantInt&gt;(cd))</div>
1013
+ <div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160; {</div>
1014
+ <div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160; <span class="keywordflow">if</span>(cint-&gt;getBitWidth() == 1)</div>
1015
+ <div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160; svfcd = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFConstantInt.html">SVFConstantInt</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(cint-&gt;getType()), cint-&gt;getZExtValue(), cint-&gt;getZExtValue());</div>
1016
+ <div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(cint-&gt;getBitWidth() &lt;= 64 &amp;&amp; cint-&gt;getBitWidth() &gt; 1)</div>
1017
+ <div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; svfcd = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFConstantInt.html">SVFConstantInt</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(cint-&gt;getType()), cint-&gt;getZExtValue(), cint-&gt;getSExtValue());</div>
1018
+ <div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160; <span class="keywordflow">else</span></div>
1019
+ <div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160; svfcd = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFConstantInt.html">SVFConstantInt</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(cint-&gt;getType()), 0, 0);</div>
1020
1020
  <div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160; }</div>
1021
- <div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa&lt;ConstantPointerNull&gt;(cd))</div>
1022
- <div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; svfcd = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFConstantNullPtr.html">SVFConstantNullPtr</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(cd-&gt;getType()));</div>
1023
- <div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;UndefValue&gt;(cd))</div>
1024
- <div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; svfcd = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFBlackHoleValue.html">SVFBlackHoleValue</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(cd-&gt;getType()));</div>
1025
- <div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160; <span class="keywordflow">else</span></div>
1026
- <div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160; svfcd = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFConstantData.html">SVFConstantData</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(cd-&gt;getType()));</div>
1027
- <div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160; </div>
1028
- <div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160; <span class="keywordflow">if</span> (cd-&gt;hasName())</div>
1029
- <div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160; svfcd-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a8325774df9d65d78ef6a66fef59b9a97">setName</a>(cd-&gt;getName().str());</div>
1030
- <div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160; </div>
1031
- <div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a43832e93a42ae43d44b0cc160981678f">svfModule</a>-&gt;<a class="code" href="classSVF_1_1SVFModule.html#ae64d24569942d7c4b18d2198be4839f3">addConstant</a>(svfcd);</div>
1032
- <div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#af4bd487b3b6efe55bf869b869f5e8a80">addConstantDataMap</a>(cd,svfcd);</div>
1033
- <div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; <span class="keywordflow">return</span> svfcd;</div>
1034
- <div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160; }</div>
1035
- <div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160;}</div>
1036
- <div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160; </div>
1037
- <div class="line"><a name="l00992"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a74256f36f0fdc242df9729906c34efbc"> 992</a></span>&#160;<a class="code" href="classSVF_1_1SVFConstant.html">SVFConstant</a>* <a class="code" href="classSVF_1_1LLVMModuleSet.html#a74256f36f0fdc242df9729906c34efbc">LLVMModuleSet::getOtherSVFConstant</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* oc)</div>
1038
- <div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160;{</div>
1039
- <div class="line"><a name="l00994"></a><span class="lineno"> 994</span>&#160; LLVMConst2SVFConstMap::const_iterator it = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a4b94c96898dbbc71bc1cee04786cf3dc">LLVMConst2SVFConst</a>.find(oc);</div>
1040
- <div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160; <span class="keywordflow">if</span>(it!=<a class="code" href="classSVF_1_1LLVMModuleSet.html#a4b94c96898dbbc71bc1cee04786cf3dc">LLVMConst2SVFConst</a>.end())</div>
1041
- <div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160; {</div>
1042
- <div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div>
1043
- <div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160; }</div>
1044
- <div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160; <span class="keywordflow">else</span></div>
1045
- <div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160; {</div>
1046
- <div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160; <a class="code" href="classSVF_1_1SVFConstant.html">SVFConstant</a>* svfoc = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFConstant.html">SVFConstant</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(oc-&gt;getType()));</div>
1047
- <div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a43832e93a42ae43d44b0cc160981678f">svfModule</a>-&gt;<a class="code" href="classSVF_1_1SVFModule.html#ae64d24569942d7c4b18d2198be4839f3">addConstant</a>(svfoc);</div>
1048
- <div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5badf03aeb1ebda02bc186bbb58a892a">addOtherConstantMap</a>(oc,svfoc);</div>
1049
- <div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160; </div>
1050
- <div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; <span class="comment">// Setting up string representation.</span></div>
1051
- <div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160; <span class="comment">// Usually is a bitcast from a global variable&#39;s address</span></div>
1052
- <div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a7b8b93fec1dc8c63c0a5837a85b99129">LLVMUtil::llvmToString</a>(*oc);</div>
1053
- <div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* spaceChars = <span class="stringliteral">&quot; \t\n\v\f\r&quot;</span>;</div>
1054
- <div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160; <span class="keywordtype">size_t</span> space = str.find_first_of(spaceChars);</div>
1055
- <div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> maxLen = 62; <span class="comment">// Arbitrary chosen small number that fits string</span></div>
1056
- <div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160; <span class="comment">// within one line</span></div>
1057
- <div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160; <span class="keywordflow">if</span> (space != str.npos &amp;&amp;</div>
1058
- <div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; (space = str.find_first_of(spaceChars, space + 1)) != str.npos)</div>
1059
- <div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160; {</div>
1060
- <div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="cJSON_8h.html#a25d22ecc7e656d2c59332072684e8766">name</a> = str.find(<span class="charliteral">&#39;@&#39;</span>, space);</div>
1061
- <div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; str.erase(space, <a class="code" href="cJSON_8h.html#a25d22ecc7e656d2c59332072684e8766">name</a> - space);</div>
1062
- <div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160; }</div>
1063
- <div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (str.size() &gt; maxLen)</div>
1064
- <div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; {</div>
1065
- <div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; <span class="keywordtype">int</span> extra = str.size() - maxLen;</div>
1066
- <div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160; <span class="keywordtype">int</span> half = maxLen / 2;</div>
1067
- <div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160; str[half++] = <span class="charliteral">&#39;~&#39;</span>;</div>
1068
- <div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160; str.erase(half, half + extra);</div>
1069
- <div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160; }</div>
1070
- <div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; svfoc-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a8325774df9d65d78ef6a66fef59b9a97">setName</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(str));</div>
1071
- <div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160; </div>
1072
- <div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160; <span class="keywordflow">return</span> svfoc;</div>
1073
- <div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160; }</div>
1074
- <div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160;}</div>
1075
- <div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160; </div>
1076
- <div class="line"><a name="l01031"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a0ef17c1d5e6a95c597d2334ea577a965"> 1031</a></span>&#160;<a class="code" href="classSVF_1_1SVFOtherValue.html">SVFOtherValue</a>* <a class="code" href="classSVF_1_1LLVMModuleSet.html#a0ef17c1d5e6a95c597d2334ea577a965">LLVMModuleSet::getSVFOtherValue</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* ov)</div>
1077
- <div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160;{</div>
1078
- <div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160; LLVMValue2SVFOtherValueMap::const_iterator it = <a class="code" href="classSVF_1_1LLVMModuleSet.html#ac3e70bd338be3a54330be5dc10321eb3">LLVMValue2SVFOtherValue</a>.find(ov);</div>
1079
- <div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160; <span class="keywordflow">if</span>(it!=<a class="code" href="classSVF_1_1LLVMModuleSet.html#ac3e70bd338be3a54330be5dc10321eb3">LLVMValue2SVFOtherValue</a>.end())</div>
1080
- <div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; {</div>
1081
- <div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div>
1082
- <div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; }</div>
1083
- <div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; <span class="keywordflow">else</span></div>
1084
- <div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; {</div>
1085
- <div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; <a class="code" href="classSVF_1_1SVFOtherValue.html">SVFOtherValue</a>* svfov =</div>
1086
- <div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160; SVFUtil::isa&lt;MetadataAsValue&gt;(ov)</div>
1087
- <div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; ? <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFMetadataAsValue.html">SVFMetadataAsValue</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(ov-&gt;getType()))</div>
1088
- <div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; : <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFOtherValue.html">SVFOtherValue</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(ov-&gt;getType()));</div>
1089
- <div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160; <span class="keywordflow">if</span> (ov-&gt;hasName())</div>
1090
- <div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160; svfov-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a8325774df9d65d78ef6a66fef59b9a97">setName</a>(ov-&gt;getName().str());</div>
1091
- <div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160; <span class="keywordflow">else</span></div>
1092
- <div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160; {</div>
1093
- <div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; <span class="keyword">auto</span> str = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a7b8b93fec1dc8c63c0a5837a85b99129">LLVMUtil::llvmToString</a>(*ov);</div>
1094
- <div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160; <a class="code" href="LLVMModule_8cpp.html#a02ccaa6664b87aaa9ee148d352344352">shortenLongInfo</a>(str, 30);</div>
1095
- <div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; svfov-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a8325774df9d65d78ef6a66fef59b9a97">setName</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(str));</div>
1096
- <div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160; }</div>
1097
- <div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a43832e93a42ae43d44b0cc160981678f">svfModule</a>-&gt;<a class="code" href="classSVF_1_1SVFModule.html#a48d7f0643bb228701dcabb88ef541fca">addOtherValue</a>(svfov);</div>
1098
- <div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a023ea6f179433fa4d007c98ddc38e3c5">addOtherValueMap</a>(ov,svfov);</div>
1099
- <div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160; <span class="keywordflow">return</span> svfov;</div>
1100
- <div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160; }</div>
1101
- <div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160;}</div>
1102
- <div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; </div>
1103
- <div class="line"><a name="l01058"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#afdd77bc1fca91f70b2ec362f1dacd392"> 1058</a></span>&#160;<a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* <a class="code" href="classSVF_1_1LLVMModuleSet.html#afdd77bc1fca91f70b2ec362f1dacd392">LLVMModuleSet::getSVFValue</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* value)</div>
1104
- <div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160;{</div>
1105
- <div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fun = SVFUtil::dyn_cast&lt;Function&gt;(value))</div>
1106
- <div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a50fc24901350df9db890ba16a9b87e33">getSVFFunction</a>(fun);</div>
1107
- <div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* bb = SVFUtil::dyn_cast&lt;BasicBlock&gt;(value))</div>
1108
- <div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#ab0c0f321b6bfbfab2e4ff06d81920ab9">getSVFBasicBlock</a>(bb);</div>
1109
- <div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst = SVFUtil::dyn_cast&lt;Instruction&gt;(value))</div>
1110
- <div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#ae74f307b6f96950ceedb2c375ef1c3a3">getSVFInstruction</a>(inst);</div>
1111
- <div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a58cdfbc4160cae08745b67844ac29801">Argument</a>* arg = SVFUtil::dyn_cast&lt;Argument&gt;(value))</div>
1112
- <div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#ad3f66b40ad360003845253f452d6a711">getSVFArgument</a>(arg);</div>
1113
- <div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* cons = SVFUtil::dyn_cast&lt;Constant&gt;(value))</div>
1114
- <div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160; {</div>
1115
- <div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7332f8059ea95472dcc231de884a5768">ConstantData</a>* cd = SVFUtil::dyn_cast&lt;ConstantData&gt;(cons))</div>
1116
- <div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a25821b0feeb3b08e00ec9d444520b727">getSVFConstantData</a>(cd);</div>
1117
- <div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a>* glob = SVFUtil::dyn_cast&lt;GlobalValue&gt;(cons))</div>
1118
- <div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a3cbba2eb702a3481478b2590dfffa352">getSVFGlobalValue</a>(glob);</div>
1119
- <div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160; <span class="keywordflow">else</span></div>
1120
- <div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a74256f36f0fdc242df9729906c34efbc">getOtherSVFConstant</a>(cons);</div>
1121
- <div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160; }</div>
1122
- <div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160; <span class="keywordflow">else</span></div>
1123
- <div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a0ef17c1d5e6a95c597d2334ea577a965">getSVFOtherValue</a>(value);</div>
1124
- <div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160;}</div>
1125
- <div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160; </div>
1126
- <div class="line"><a name="l01081"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a610a7777a48132caadec167c8109f044"> 1081</a></span>&#160;<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* <a class="code" href="classSVF_1_1LLVMModuleSet.html#a610a7777a48132caadec167c8109f044">LLVMModuleSet::getLLVMType</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* T)<span class="keyword"> const</span></div>
1127
- <div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160;<span class="keyword"></span>{</div>
1128
- <div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160; <span class="keywordflow">for</span>(LLVMType2SVFTypeMap::const_iterator it = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a067661e0049314779a44c9600420820f">LLVMType2SVFType</a>.begin(), eit = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a067661e0049314779a44c9600420820f">LLVMType2SVFType</a>.end(); it!=eit; ++it)</div>
1129
- <div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160; {</div>
1130
- <div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160; <span class="keywordflow">if</span> (it-&gt;second == T)</div>
1131
- <div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160; <span class="keywordflow">return</span> it-&gt;first;</div>
1132
- <div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160; }</div>
1133
- <div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;can&#39;t find the corresponding LLVM Type&quot;</span>);</div>
1134
- <div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160; abort();</div>
1135
- <div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160;}</div>
1136
- <div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160; </div>
1137
- <div class="line"><a name="l01095"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99"> 1095</a></span>&#160;<a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">LLVMModuleSet::getSVFType</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* T)</div>
1138
- <div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160;{</div>
1139
- <div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160; assert(T &amp;&amp; <span class="stringliteral">&quot;SVFType should not be null&quot;</span>);</div>
1140
- <div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160; LLVMType2SVFTypeMap::const_iterator it = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a067661e0049314779a44c9600420820f">LLVMType2SVFType</a>.find(T);</div>
1141
- <div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160; <span class="keywordflow">if</span> (it != <a class="code" href="classSVF_1_1LLVMModuleSet.html#a067661e0049314779a44c9600420820f">LLVMType2SVFType</a>.end())</div>
1142
- <div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div>
1143
- <div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160; </div>
1144
- <div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160; <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* svfType = <a class="code" href="classSVF_1_1LLVMModuleSet.html#aab7b08db9252ef7e21e54d019f44b073">addSVFTypeInfo</a>(T);</div>
1145
- <div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160; <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* stinfo = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a1f6cc76c996a0577b20b8cedd83fff92">collectTypeInfo</a>(T);</div>
1146
- <div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160; svfType-&gt;<a class="code" href="classSVF_1_1SVFType.html#aef5999ada62dac3cc946d832ac66948c">setTypeInfo</a>(stinfo);</div>
1147
- <div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160; <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a>* ptrTy = PointerType::getInt8PtrTy(<a class="code" href="classSVF_1_1LLVMModuleSet.html#ac1a9d20d62066ec4e181fad223669e32">getContext</a>());</div>
1148
- <div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160; svfType-&gt;<a class="code" href="classSVF_1_1SVFType.html#a3ddabbd763acaaca28cacbabe5bc7f3b">setPointerTo</a>(SVFUtil::cast&lt;SVFPointerType&gt;(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(ptrTy)));</div>
1149
- <div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; <span class="keywordflow">return</span> svfType;</div>
1150
- <div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160;}</div>
1151
- <div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160; </div>
1152
- <div class="line"><a name="l01115"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a1f6cc76c996a0577b20b8cedd83fff92"> 1115</a></span>&#160;<a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* <a class="code" href="classSVF_1_1LLVMModuleSet.html#a1f6cc76c996a0577b20b8cedd83fff92">LLVMModuleSet::collectTypeInfo</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* T)</div>
1153
- <div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160;{</div>
1154
- <div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160; Type2TypeInfoMap::iterator tit = <a class="code" href="classSVF_1_1LLVMModuleSet.html#af2c555af91679d9e6d3009547ee11486">Type2TypeInfo</a>.find(T);</div>
1155
- <div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160; <span class="keywordflow">if</span> (tit != <a class="code" href="classSVF_1_1LLVMModuleSet.html#af2c555af91679d9e6d3009547ee11486">Type2TypeInfo</a>.end())</div>
1156
- <div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160; {</div>
1157
- <div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160; <span class="keywordflow">return</span> tit-&gt;second;</div>
1158
- <div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160; }</div>
1159
- <div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160; <span class="comment">// No such StInfo for T, create it now.</span></div>
1160
- <div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160; <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* stInfo;</div>
1161
- <div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a146d286041987860388da3d8bc85cee3">ArrayType</a>* aty = SVFUtil::dyn_cast&lt;ArrayType&gt;(T))</div>
1162
- <div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160; {</div>
1163
- <div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160; stInfo = <a class="code" href="classSVF_1_1LLVMModuleSet.html#aa8de934358332505d4805db137d8ec29">collectArrayInfo</a>(aty);</div>
1164
- <div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160; }</div>
1165
- <div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a>* sty = SVFUtil::dyn_cast&lt;StructType&gt;(T))</div>
1166
- <div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160; {</div>
1167
- <div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> nf;</div>
1168
- <div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160; stInfo = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a946d1251501c7e0e33a9210838951258">collectStructInfo</a>(sty, nf);</div>
1169
- <div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160; <span class="keywordflow">if</span> (nf &gt; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5552135a27684cbe4d2a5ed346f64644">symInfo</a>-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#abb8550c9ef856e45cb7675c3796f9a35">maxStSize</a>)</div>
1170
- <div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160; {</div>
1171
- <div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5552135a27684cbe4d2a5ed346f64644">symInfo</a>-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a0c1143eff451edf8ea47d4487a8d3a55">maxStruct</a> = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(sty);</div>
1172
- <div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5552135a27684cbe4d2a5ed346f64644">symInfo</a>-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#abb8550c9ef856e45cb7675c3796f9a35">maxStSize</a> = nf;</div>
1173
- <div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160; }</div>
1174
- <div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160; }</div>
1175
- <div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160; <span class="keywordflow">else</span></div>
1176
- <div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; {</div>
1177
- <div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160; stInfo = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a52853bd34a394882c6fd0fc73739c9f2">collectSimpleTypeInfo</a>(T);</div>
1178
- <div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160; }</div>
1179
- <div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#af2c555af91679d9e6d3009547ee11486">Type2TypeInfo</a>.emplace(T, stInfo);</div>
1180
- <div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5552135a27684cbe4d2a5ed346f64644">symInfo</a>-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a72be32d606db86090067159de44e01ec">addStInfo</a>(stInfo);</div>
1181
- <div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160; <span class="keywordflow">return</span> stInfo;</div>
1182
- <div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160;}</div>
1183
- <div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160; </div>
1184
- <div class="line"><a name="l01147"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#aab7b08db9252ef7e21e54d019f44b073"> 1147</a></span>&#160;<a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* <a class="code" href="classSVF_1_1LLVMModuleSet.html#aab7b08db9252ef7e21e54d019f44b073">LLVMModuleSet::addSVFTypeInfo</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* T)</div>
1185
- <div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160;{</div>
1186
- <div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160; assert(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a067661e0049314779a44c9600420820f">LLVMType2SVFType</a>.find(T) == <a class="code" href="classSVF_1_1LLVMModuleSet.html#a067661e0049314779a44c9600420820f">LLVMType2SVFType</a>.end() &amp;&amp;</div>
1187
- <div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160; <span class="stringliteral">&quot;SVFType has been added before&quot;</span>);</div>
1188
- <div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160; </div>
1189
- <div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160; <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* svftype;</div>
1190
- <div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a>* pt = SVFUtil::dyn_cast&lt;PointerType&gt;(T))</div>
1191
- <div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160; svftype = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFPointerType.html">SVFPointerType</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#abba4111230f6009bbf50518ee36a9870">LLVMUtil::getPtrElementType</a>(pt)));</div>
1192
- <div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a3d9e7f32dc17fe8d40f8d6a011403b91">IntegerType</a>* intT = SVFUtil::dyn_cast&lt;IntegerType&gt;(T))</div>
1193
- <div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160; {</div>
1194
- <div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160; <span class="keyword">auto</span> svfIntT = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFIntegerType.html">SVFIntegerType</a>();</div>
1195
- <div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160; <span class="keywordtype">unsigned</span> signWidth = intT-&gt;getBitWidth();</div>
1196
- <div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160; assert(signWidth &lt; INT16_MAX &amp;&amp; <span class="stringliteral">&quot;Integer width too big&quot;</span>);</div>
1197
- <div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160; svfIntT-&gt;setSignAndWidth(intT-&gt;getSignBit() ? -signWidth : signWidth);</div>
1198
- <div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160; svftype = svfIntT;</div>
1199
- <div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160; }</div>
1200
- <div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a6ec0236303089a01fd9da36a8bb84e0a">FunctionType</a>* ft = SVFUtil::dyn_cast&lt;FunctionType&gt;(T))</div>
1201
- <div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160; svftype = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFFunctionType.html">SVFFunctionType</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(ft-&gt;getReturnType()));</div>
1202
- <div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160; <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&lt;StructType&gt;(T))</div>
1203
- <div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160; {</div>
1204
- <div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160; <span class="keyword">auto</span> svfst = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFStructType.html">SVFStructType</a>();</div>
1205
- <div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160; <span class="keywordflow">if</span> (st-&gt;hasName())</div>
1206
- <div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160; svfst-&gt;setName(st-&gt;getName().str());</div>
1207
- <div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160; svftype = svfst;</div>
1208
- <div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160; }</div>
1209
- <div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> at = SVFUtil::dyn_cast&lt;ArrayType&gt;(T))</div>
1210
- <div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160; {</div>
1211
- <div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160; <span class="keyword">auto</span> svfat = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFArrayType.html">SVFArrayType</a>();</div>
1212
- <div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160; svfat-&gt;setNumOfElement(at-&gt;getNumElements());</div>
1213
- <div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160; svfat-&gt;setTypeOfElement(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(at-&gt;getElementType()));</div>
1214
- <div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160; svftype = svfat;</div>
1215
- <div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160; }</div>
1216
- <div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160; <span class="keywordflow">else</span></div>
1217
- <div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160; {</div>
1218
- <div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="cJSON_8h.html#a503753140aa27b00f99a3501280b2746">buffer</a>;</div>
1219
- <div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160; <span class="keyword">auto</span> ot = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFOtherType.html">SVFOtherType</a>(T-&gt;isSingleValueType());</div>
1220
- <div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160; llvm::raw_string_ostream(<a class="code" href="cJSON_8h.html#a503753140aa27b00f99a3501280b2746">buffer</a>) &lt;&lt; *T;</div>
1221
- <div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160; ot-&gt;setRepr(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(<a class="code" href="cJSON_8h.html#a503753140aa27b00f99a3501280b2746">buffer</a>));</div>
1222
- <div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160; svftype = ot;</div>
1021
+ <div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad49e4222ba46d9490b87a80df8b46800">ConstantFP</a>* cfp = SVFUtil::dyn_cast&lt;ConstantFP&gt;(cd))</div>
1022
+ <div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; {</div>
1023
+ <div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160; <span class="keywordtype">double</span> dval = 0;</div>
1024
+ <div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; <span class="comment">// TODO: Why only double is considered? What about float?</span></div>
1025
+ <div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160; <span class="keywordflow">if</span>(cfp-&gt;isNormalFP() &amp;&amp; (&amp;cfp-&gt;getValueAPF().getSemantics()== &amp;llvm::APFloatBase::IEEEdouble()))</div>
1026
+ <div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160; dval = cfp-&gt;getValueAPF().convertToDouble();</div>
1027
+ <div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160; svfcd = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFConstantFP.html">SVFConstantFP</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(cd-&gt;getType()), dval);</div>
1028
+ <div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160; }</div>
1029
+ <div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa&lt;ConstantPointerNull&gt;(cd))</div>
1030
+ <div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160; svfcd = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFConstantNullPtr.html">SVFConstantNullPtr</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(cd-&gt;getType()));</div>
1031
+ <div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;UndefValue&gt;(cd))</div>
1032
+ <div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; svfcd = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFBlackHoleValue.html">SVFBlackHoleValue</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(cd-&gt;getType()));</div>
1033
+ <div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; <span class="keywordflow">else</span></div>
1034
+ <div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160; svfcd = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFConstantData.html">SVFConstantData</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(cd-&gt;getType()));</div>
1035
+ <div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160; </div>
1036
+ <div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160; <span class="keywordflow">if</span> (cd-&gt;hasName())</div>
1037
+ <div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160; svfcd-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a8325774df9d65d78ef6a66fef59b9a97">setName</a>(cd-&gt;getName().str());</div>
1038
+ <div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160; </div>
1039
+ <div class="line"><a name="l00994"></a><span class="lineno"> 994</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a43832e93a42ae43d44b0cc160981678f">svfModule</a>-&gt;<a class="code" href="classSVF_1_1SVFModule.html#ae64d24569942d7c4b18d2198be4839f3">addConstant</a>(svfcd);</div>
1040
+ <div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#af4bd487b3b6efe55bf869b869f5e8a80">addConstantDataMap</a>(cd,svfcd);</div>
1041
+ <div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160; <span class="keywordflow">return</span> svfcd;</div>
1042
+ <div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160; }</div>
1043
+ <div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160;}</div>
1044
+ <div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160; </div>
1045
+ <div class="line"><a name="l01000"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a74256f36f0fdc242df9729906c34efbc"> 1000</a></span>&#160;<a class="code" href="classSVF_1_1SVFConstant.html">SVFConstant</a>* <a class="code" href="classSVF_1_1LLVMModuleSet.html#a74256f36f0fdc242df9729906c34efbc">LLVMModuleSet::getOtherSVFConstant</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* oc)</div>
1046
+ <div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160;{</div>
1047
+ <div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160; LLVMConst2SVFConstMap::const_iterator it = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a4b94c96898dbbc71bc1cee04786cf3dc">LLVMConst2SVFConst</a>.find(oc);</div>
1048
+ <div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160; <span class="keywordflow">if</span>(it!=<a class="code" href="classSVF_1_1LLVMModuleSet.html#a4b94c96898dbbc71bc1cee04786cf3dc">LLVMConst2SVFConst</a>.end())</div>
1049
+ <div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160; {</div>
1050
+ <div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div>
1051
+ <div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160; }</div>
1052
+ <div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160; <span class="keywordflow">else</span></div>
1053
+ <div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160; {</div>
1054
+ <div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160; <a class="code" href="classSVF_1_1SVFConstant.html">SVFConstant</a>* svfoc = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFConstant.html">SVFConstant</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(oc-&gt;getType()));</div>
1055
+ <div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a43832e93a42ae43d44b0cc160981678f">svfModule</a>-&gt;<a class="code" href="classSVF_1_1SVFModule.html#ae64d24569942d7c4b18d2198be4839f3">addConstant</a>(svfoc);</div>
1056
+ <div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5badf03aeb1ebda02bc186bbb58a892a">addOtherConstantMap</a>(oc,svfoc);</div>
1057
+ <div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160; </div>
1058
+ <div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; <span class="comment">// Setting up string representation.</span></div>
1059
+ <div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160; <span class="comment">// Usually is a bitcast from a global variable&#39;s address</span></div>
1060
+ <div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a7b8b93fec1dc8c63c0a5837a85b99129">LLVMUtil::llvmToString</a>(*oc);</div>
1061
+ <div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* spaceChars = <span class="stringliteral">&quot; \t\n\v\f\r&quot;</span>;</div>
1062
+ <div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160; <span class="keywordtype">size_t</span> space = str.find_first_of(spaceChars);</div>
1063
+ <div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> maxLen = 62; <span class="comment">// Arbitrary chosen small number that fits string</span></div>
1064
+ <div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; <span class="comment">// within one line</span></div>
1065
+ <div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; <span class="keywordflow">if</span> (space != str.npos &amp;&amp;</div>
1066
+ <div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160; (space = str.find_first_of(spaceChars, space + 1)) != str.npos)</div>
1067
+ <div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160; {</div>
1068
+ <div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="cJSON_8h.html#a25d22ecc7e656d2c59332072684e8766">name</a> = str.find(<span class="charliteral">&#39;@&#39;</span>, space);</div>
1069
+ <div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160; str.erase(space, <a class="code" href="cJSON_8h.html#a25d22ecc7e656d2c59332072684e8766">name</a> - space);</div>
1070
+ <div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; }</div>
1071
+ <div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (str.size() &gt; maxLen)</div>
1072
+ <div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160; {</div>
1073
+ <div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160; <span class="keywordtype">int</span> extra = str.size() - maxLen;</div>
1074
+ <div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160; <span class="keywordtype">int</span> half = maxLen / 2;</div>
1075
+ <div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160; str[half++] = <span class="charliteral">&#39;~&#39;</span>;</div>
1076
+ <div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160; str.erase(half, half + extra);</div>
1077
+ <div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160; }</div>
1078
+ <div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160; svfoc-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a8325774df9d65d78ef6a66fef59b9a97">setName</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(str));</div>
1079
+ <div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160; </div>
1080
+ <div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; <span class="keywordflow">return</span> svfoc;</div>
1081
+ <div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160; }</div>
1082
+ <div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160;}</div>
1083
+ <div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; </div>
1084
+ <div class="line"><a name="l01039"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a0ef17c1d5e6a95c597d2334ea577a965"> 1039</a></span>&#160;<a class="code" href="classSVF_1_1SVFOtherValue.html">SVFOtherValue</a>* <a class="code" href="classSVF_1_1LLVMModuleSet.html#a0ef17c1d5e6a95c597d2334ea577a965">LLVMModuleSet::getSVFOtherValue</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* ov)</div>
1085
+ <div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160;{</div>
1086
+ <div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160; LLVMValue2SVFOtherValueMap::const_iterator it = <a class="code" href="classSVF_1_1LLVMModuleSet.html#ac3e70bd338be3a54330be5dc10321eb3">LLVMValue2SVFOtherValue</a>.find(ov);</div>
1087
+ <div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; <span class="keywordflow">if</span>(it!=<a class="code" href="classSVF_1_1LLVMModuleSet.html#ac3e70bd338be3a54330be5dc10321eb3">LLVMValue2SVFOtherValue</a>.end())</div>
1088
+ <div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; {</div>
1089
+ <div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div>
1090
+ <div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160; }</div>
1091
+ <div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160; <span class="keywordflow">else</span></div>
1092
+ <div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160; {</div>
1093
+ <div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; <a class="code" href="classSVF_1_1SVFOtherValue.html">SVFOtherValue</a>* svfov =</div>
1094
+ <div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160; SVFUtil::isa&lt;MetadataAsValue&gt;(ov)</div>
1095
+ <div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; ? <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFMetadataAsValue.html">SVFMetadataAsValue</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(ov-&gt;getType()))</div>
1096
+ <div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160; : <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFOtherValue.html">SVFOtherValue</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(ov-&gt;getType()));</div>
1097
+ <div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160; <span class="keywordflow">if</span> (ov-&gt;hasName())</div>
1098
+ <div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160; svfov-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a8325774df9d65d78ef6a66fef59b9a97">setName</a>(ov-&gt;getName().str());</div>
1099
+ <div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160; <span class="keywordflow">else</span></div>
1100
+ <div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160; {</div>
1101
+ <div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160; <span class="keyword">auto</span> str = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a7b8b93fec1dc8c63c0a5837a85b99129">LLVMUtil::llvmToString</a>(*ov);</div>
1102
+ <div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; <a class="code" href="LLVMModule_8cpp.html#a02ccaa6664b87aaa9ee148d352344352">shortenLongInfo</a>(str, 30);</div>
1103
+ <div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160; svfov-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a8325774df9d65d78ef6a66fef59b9a97">setName</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(str));</div>
1104
+ <div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; }</div>
1105
+ <div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a43832e93a42ae43d44b0cc160981678f">svfModule</a>-&gt;<a class="code" href="classSVF_1_1SVFModule.html#a48d7f0643bb228701dcabb88ef541fca">addOtherValue</a>(svfov);</div>
1106
+ <div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a023ea6f179433fa4d007c98ddc38e3c5">addOtherValueMap</a>(ov,svfov);</div>
1107
+ <div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160; <span class="keywordflow">return</span> svfov;</div>
1108
+ <div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160; }</div>
1109
+ <div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160;}</div>
1110
+ <div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160; </div>
1111
+ <div class="line"><a name="l01066"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#afdd77bc1fca91f70b2ec362f1dacd392"> 1066</a></span>&#160;<a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* <a class="code" href="classSVF_1_1LLVMModuleSet.html#afdd77bc1fca91f70b2ec362f1dacd392">LLVMModuleSet::getSVFValue</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* value)</div>
1112
+ <div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160;{</div>
1113
+ <div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fun = SVFUtil::dyn_cast&lt;Function&gt;(value))</div>
1114
+ <div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a50fc24901350df9db890ba16a9b87e33">getSVFFunction</a>(fun);</div>
1115
+ <div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* bb = SVFUtil::dyn_cast&lt;BasicBlock&gt;(value))</div>
1116
+ <div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#ab0c0f321b6bfbfab2e4ff06d81920ab9">getSVFBasicBlock</a>(bb);</div>
1117
+ <div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst = SVFUtil::dyn_cast&lt;Instruction&gt;(value))</div>
1118
+ <div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#ae74f307b6f96950ceedb2c375ef1c3a3">getSVFInstruction</a>(inst);</div>
1119
+ <div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a58cdfbc4160cae08745b67844ac29801">Argument</a>* arg = SVFUtil::dyn_cast&lt;Argument&gt;(value))</div>
1120
+ <div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#ad3f66b40ad360003845253f452d6a711">getSVFArgument</a>(arg);</div>
1121
+ <div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* cons = SVFUtil::dyn_cast&lt;Constant&gt;(value))</div>
1122
+ <div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160; {</div>
1123
+ <div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7332f8059ea95472dcc231de884a5768">ConstantData</a>* cd = SVFUtil::dyn_cast&lt;ConstantData&gt;(cons))</div>
1124
+ <div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a25821b0feeb3b08e00ec9d444520b727">getSVFConstantData</a>(cd);</div>
1125
+ <div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a67f3f86344f028cacfbeb08caaf7bb0f">GlobalValue</a>* glob = SVFUtil::dyn_cast&lt;GlobalValue&gt;(cons))</div>
1126
+ <div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a3cbba2eb702a3481478b2590dfffa352">getSVFGlobalValue</a>(glob);</div>
1127
+ <div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160; <span class="keywordflow">else</span></div>
1128
+ <div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a74256f36f0fdc242df9729906c34efbc">getOtherSVFConstant</a>(cons);</div>
1129
+ <div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160; }</div>
1130
+ <div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160; <span class="keywordflow">else</span></div>
1131
+ <div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a0ef17c1d5e6a95c597d2334ea577a965">getSVFOtherValue</a>(value);</div>
1132
+ <div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160;}</div>
1133
+ <div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160; </div>
1134
+ <div class="line"><a name="l01089"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a610a7777a48132caadec167c8109f044"> 1089</a></span>&#160;<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* <a class="code" href="classSVF_1_1LLVMModuleSet.html#a610a7777a48132caadec167c8109f044">LLVMModuleSet::getLLVMType</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* T)<span class="keyword"> const</span></div>
1135
+ <div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160;<span class="keyword"></span>{</div>
1136
+ <div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160; <span class="keywordflow">for</span>(LLVMType2SVFTypeMap::const_iterator it = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a067661e0049314779a44c9600420820f">LLVMType2SVFType</a>.begin(), eit = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a067661e0049314779a44c9600420820f">LLVMType2SVFType</a>.end(); it!=eit; ++it)</div>
1137
+ <div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160; {</div>
1138
+ <div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160; <span class="keywordflow">if</span> (it-&gt;second == T)</div>
1139
+ <div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160; <span class="keywordflow">return</span> it-&gt;first;</div>
1140
+ <div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160; }</div>
1141
+ <div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;can&#39;t find the corresponding LLVM Type&quot;</span>);</div>
1142
+ <div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160; abort();</div>
1143
+ <div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160;}</div>
1144
+ <div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160; </div>
1145
+ <div class="line"><a name="l01103"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99"> 1103</a></span>&#160;<a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">LLVMModuleSet::getSVFType</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* T)</div>
1146
+ <div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160;{</div>
1147
+ <div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160; assert(T &amp;&amp; <span class="stringliteral">&quot;SVFType should not be null&quot;</span>);</div>
1148
+ <div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160; LLVMType2SVFTypeMap::const_iterator it = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a067661e0049314779a44c9600420820f">LLVMType2SVFType</a>.find(T);</div>
1149
+ <div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160; <span class="keywordflow">if</span> (it != <a class="code" href="classSVF_1_1LLVMModuleSet.html#a067661e0049314779a44c9600420820f">LLVMType2SVFType</a>.end())</div>
1150
+ <div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div>
1151
+ <div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160; </div>
1152
+ <div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160; <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* svfType = <a class="code" href="classSVF_1_1LLVMModuleSet.html#aab7b08db9252ef7e21e54d019f44b073">addSVFTypeInfo</a>(T);</div>
1153
+ <div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160; <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* stinfo = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a1f6cc76c996a0577b20b8cedd83fff92">collectTypeInfo</a>(T);</div>
1154
+ <div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; svfType-&gt;<a class="code" href="classSVF_1_1SVFType.html#aef5999ada62dac3cc946d832ac66948c">setTypeInfo</a>(stinfo);</div>
1155
+ <div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160; <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a>* ptrTy = PointerType::getInt8PtrTy(<a class="code" href="classSVF_1_1LLVMModuleSet.html#ac1a9d20d62066ec4e181fad223669e32">getContext</a>());</div>
1156
+ <div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160; svfType-&gt;<a class="code" href="classSVF_1_1SVFType.html#a3ddabbd763acaaca28cacbabe5bc7f3b">setPointerTo</a>(SVFUtil::cast&lt;SVFPointerType&gt;(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(ptrTy)));</div>
1157
+ <div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160; <span class="keywordflow">return</span> svfType;</div>
1158
+ <div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160;}</div>
1159
+ <div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160; </div>
1160
+ <div class="line"><a name="l01123"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a1f6cc76c996a0577b20b8cedd83fff92"> 1123</a></span>&#160;<a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* <a class="code" href="classSVF_1_1LLVMModuleSet.html#a1f6cc76c996a0577b20b8cedd83fff92">LLVMModuleSet::collectTypeInfo</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* T)</div>
1161
+ <div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160;{</div>
1162
+ <div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160; Type2TypeInfoMap::iterator tit = <a class="code" href="classSVF_1_1LLVMModuleSet.html#af2c555af91679d9e6d3009547ee11486">Type2TypeInfo</a>.find(T);</div>
1163
+ <div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160; <span class="keywordflow">if</span> (tit != <a class="code" href="classSVF_1_1LLVMModuleSet.html#af2c555af91679d9e6d3009547ee11486">Type2TypeInfo</a>.end())</div>
1164
+ <div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160; {</div>
1165
+ <div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160; <span class="keywordflow">return</span> tit-&gt;second;</div>
1166
+ <div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160; }</div>
1167
+ <div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160; <span class="comment">// No such StInfo for T, create it now.</span></div>
1168
+ <div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160; <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* stInfo;</div>
1169
+ <div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a146d286041987860388da3d8bc85cee3">ArrayType</a>* aty = SVFUtil::dyn_cast&lt;ArrayType&gt;(T))</div>
1170
+ <div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160; {</div>
1171
+ <div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160; stInfo = <a class="code" href="classSVF_1_1LLVMModuleSet.html#aa8de934358332505d4805db137d8ec29">collectArrayInfo</a>(aty);</div>
1172
+ <div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160; }</div>
1173
+ <div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a>* sty = SVFUtil::dyn_cast&lt;StructType&gt;(T))</div>
1174
+ <div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160; {</div>
1175
+ <div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> nf;</div>
1176
+ <div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; stInfo = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a946d1251501c7e0e33a9210838951258">collectStructInfo</a>(sty, nf);</div>
1177
+ <div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160; <span class="keywordflow">if</span> (nf &gt; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5552135a27684cbe4d2a5ed346f64644">symInfo</a>-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#abb8550c9ef856e45cb7675c3796f9a35">maxStSize</a>)</div>
1178
+ <div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160; {</div>
1179
+ <div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5552135a27684cbe4d2a5ed346f64644">symInfo</a>-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a0c1143eff451edf8ea47d4487a8d3a55">maxStruct</a> = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(sty);</div>
1180
+ <div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5552135a27684cbe4d2a5ed346f64644">symInfo</a>-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#abb8550c9ef856e45cb7675c3796f9a35">maxStSize</a> = nf;</div>
1181
+ <div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160; }</div>
1182
+ <div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160; }</div>
1183
+ <div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160; <span class="keywordflow">else</span></div>
1184
+ <div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160; {</div>
1185
+ <div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160; stInfo = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a52853bd34a394882c6fd0fc73739c9f2">collectSimpleTypeInfo</a>(T);</div>
1186
+ <div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160; }</div>
1187
+ <div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#af2c555af91679d9e6d3009547ee11486">Type2TypeInfo</a>.emplace(T, stInfo);</div>
1188
+ <div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5552135a27684cbe4d2a5ed346f64644">symInfo</a>-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a72be32d606db86090067159de44e01ec">addStInfo</a>(stInfo);</div>
1189
+ <div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160; <span class="keywordflow">return</span> stInfo;</div>
1190
+ <div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160;}</div>
1191
+ <div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160; </div>
1192
+ <div class="line"><a name="l01155"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#aab7b08db9252ef7e21e54d019f44b073"> 1155</a></span>&#160;<a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* <a class="code" href="classSVF_1_1LLVMModuleSet.html#aab7b08db9252ef7e21e54d019f44b073">LLVMModuleSet::addSVFTypeInfo</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* T)</div>
1193
+ <div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160;{</div>
1194
+ <div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160; assert(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a067661e0049314779a44c9600420820f">LLVMType2SVFType</a>.find(T) == <a class="code" href="classSVF_1_1LLVMModuleSet.html#a067661e0049314779a44c9600420820f">LLVMType2SVFType</a>.end() &amp;&amp;</div>
1195
+ <div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160; <span class="stringliteral">&quot;SVFType has been added before&quot;</span>);</div>
1196
+ <div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160; </div>
1197
+ <div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160; <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* svftype;</div>
1198
+ <div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a>* pt = SVFUtil::dyn_cast&lt;PointerType&gt;(T))</div>
1199
+ <div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160; svftype = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFPointerType.html">SVFPointerType</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#abba4111230f6009bbf50518ee36a9870">LLVMUtil::getPtrElementType</a>(pt)));</div>
1200
+ <div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a3d9e7f32dc17fe8d40f8d6a011403b91">IntegerType</a>* intT = SVFUtil::dyn_cast&lt;IntegerType&gt;(T))</div>
1201
+ <div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160; {</div>
1202
+ <div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160; <span class="keyword">auto</span> svfIntT = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFIntegerType.html">SVFIntegerType</a>();</div>
1203
+ <div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160; <span class="keywordtype">unsigned</span> signWidth = intT-&gt;getBitWidth();</div>
1204
+ <div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160; assert(signWidth &lt; INT16_MAX &amp;&amp; <span class="stringliteral">&quot;Integer width too big&quot;</span>);</div>
1205
+ <div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160; svfIntT-&gt;setSignAndWidth(intT-&gt;getSignBit() ? -signWidth : signWidth);</div>
1206
+ <div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160; svftype = svfIntT;</div>
1207
+ <div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160; }</div>
1208
+ <div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a6ec0236303089a01fd9da36a8bb84e0a">FunctionType</a>* ft = SVFUtil::dyn_cast&lt;FunctionType&gt;(T))</div>
1209
+ <div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160; svftype = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFFunctionType.html">SVFFunctionType</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(ft-&gt;getReturnType()));</div>
1210
+ <div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160; <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&lt;StructType&gt;(T))</div>
1211
+ <div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160; {</div>
1212
+ <div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160; <span class="keyword">auto</span> svfst = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFStructType.html">SVFStructType</a>();</div>
1213
+ <div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160; <span class="keywordflow">if</span> (st-&gt;hasName())</div>
1214
+ <div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160; svfst-&gt;setName(st-&gt;getName().str());</div>
1215
+ <div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160; svftype = svfst;</div>
1216
+ <div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160; }</div>
1217
+ <div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> at = SVFUtil::dyn_cast&lt;ArrayType&gt;(T))</div>
1218
+ <div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160; {</div>
1219
+ <div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160; <span class="keyword">auto</span> svfat = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFArrayType.html">SVFArrayType</a>();</div>
1220
+ <div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160; svfat-&gt;setNumOfElement(at-&gt;getNumElements());</div>
1221
+ <div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160; svfat-&gt;setTypeOfElement(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(at-&gt;getElementType()));</div>
1222
+ <div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160; svftype = svfat;</div>
1223
1223
  <div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160; }</div>
1224
- <div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160; </div>
1225
- <div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5552135a27684cbe4d2a5ed346f64644">symInfo</a>-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a91083d9504ae5d220b28e0b3e461d4aa">addTypeInfo</a>(svftype);</div>
1226
- <div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a067661e0049314779a44c9600420820f">LLVMType2SVFType</a>[T] = svftype;</div>
1227
- <div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160; <span class="keywordflow">return</span> svftype;</div>
1228
- <div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160;}</div>
1229
- <div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160; </div>
1230
- <div class="line"><a name="l01196"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#aa8de934358332505d4805db137d8ec29"> 1196</a></span>&#160;<a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* <a class="code" href="classSVF_1_1LLVMModuleSet.html#aa8de934358332505d4805db137d8ec29">LLVMModuleSet::collectArrayInfo</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a146d286041987860388da3d8bc85cee3">ArrayType</a>* ty)</div>
1231
- <div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160;{</div>
1232
- <div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160; <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> totalElemNum = ty-&gt;getNumElements();</div>
1233
- <div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* elemTy = ty-&gt;getElementType();</div>
1234
- <div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160; <span class="keywordflow">while</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a146d286041987860388da3d8bc85cee3">ArrayType</a>* aty = SVFUtil::dyn_cast&lt;ArrayType&gt;(elemTy))</div>
1235
- <div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160; {</div>
1236
- <div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160; totalElemNum *= aty-&gt;getNumElements();</div>
1237
- <div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160; elemTy = aty-&gt;getElementType();</div>
1238
- <div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160; }</div>
1239
- <div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160; </div>
1240
- <div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160; <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* stInfo = <span class="keyword">new</span> <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>(totalElemNum);</div>
1241
- <div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* elemSvfType = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(elemTy);</div>
1242
- <div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160; </div>
1243
- <div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160; <span class="keywordflow">if</span> (totalElemNum == 0)</div>
1244
- <div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160; {</div>
1245
- <div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#aae0736a5e99b11571af52e28500a6f9c">addFldWithType</a>(0, elemSvfType, 0);</div>
1246
- <div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a1a07c2b1415c29d7d70791c6dfe602a3">setNumOfFieldsAndElems</a>(1, 1);</div>
1247
- <div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ac0a9f85f90524abfd519d3cd2ac95a56">getFlattenFieldTypes</a>().push_back(elemSvfType);</div>
1248
- <div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a03bfeee0406c7e54557e74f3a8e848b7">getFlattenElementTypes</a>().push_back(elemSvfType);</div>
1249
- <div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160; <span class="keywordflow">return</span> stInfo;</div>
1250
- <div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160; }</div>
1251
- <div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160; </div>
1252
- <div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160; <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* elemStInfo = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a1f6cc76c996a0577b20b8cedd83fff92">collectTypeInfo</a>(elemTy);</div>
1253
- <div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> nfF = elemStInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ae5fad367673315da57a604e64b5889f0">getNumOfFlattenFields</a>();</div>
1254
- <div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> nfE = elemStInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a518c82138fcadc6634980566c1c0f762">getNumOfFlattenElements</a>();</div>
1255
- <div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> j = 0; j &lt; nfF; j++)</div>
1256
- <div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160; {</div>
1257
- <div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* fieldTy = elemStInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ac0a9f85f90524abfd519d3cd2ac95a56">getFlattenFieldTypes</a>()[j];</div>
1258
- <div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ac0a9f85f90524abfd519d3cd2ac95a56">getFlattenFieldTypes</a>().push_back(fieldTy);</div>
1259
- <div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160; }</div>
1260
- <div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160; </div>
1261
- <div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> outArrayElemNum = ty-&gt;getNumElements();</div>
1262
- <div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; outArrayElemNum; ++i)</div>
1263
- <div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160; {</div>
1264
- <div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160; <span class="keyword">auto</span> idx = (i * nfE * totalElemNum) / outArrayElemNum;</div>
1265
- <div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#aae0736a5e99b11571af52e28500a6f9c">addFldWithType</a>(0, elemSvfType, idx);</div>
1266
- <div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160; }</div>
1267
- <div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160; </div>
1268
- <div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; totalElemNum; ++i)</div>
1269
- <div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160; {</div>
1270
- <div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> j = 0; j &lt; nfE; ++j)</div>
1271
- <div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160; {</div>
1272
- <div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* et = elemStInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a03bfeee0406c7e54557e74f3a8e848b7">getFlattenElementTypes</a>()[j];</div>
1273
- <div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a03bfeee0406c7e54557e74f3a8e848b7">getFlattenElementTypes</a>().push_back(et);</div>
1274
- <div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160; }</div>
1275
- <div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160; }</div>
1276
- <div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160; </div>
1277
- <div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160; assert(stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a03bfeee0406c7e54557e74f3a8e848b7">getFlattenElementTypes</a>().size() == nfE * totalElemNum &amp;&amp;</div>
1278
- <div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160; <span class="stringliteral">&quot;typeForArray size incorrect!!!&quot;</span>);</div>
1279
- <div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a1a07c2b1415c29d7d70791c6dfe602a3">setNumOfFieldsAndElems</a>(nfF, nfE * totalElemNum);</div>
1280
- <div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160; </div>
1281
- <div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160; <span class="keywordflow">return</span> stInfo;</div>
1282
- <div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160;}</div>
1283
- <div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160; </div>
1284
- <div class="line"><a name="l01259"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a946d1251501c7e0e33a9210838951258"> 1259</a></span>&#160;<a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* <a class="code" href="classSVF_1_1LLVMModuleSet.html#a946d1251501c7e0e33a9210838951258">LLVMModuleSet::collectStructInfo</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a>* structTy,</div>
1285
- <div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>&amp; numFields)</div>
1286
- <div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160;{</div>
1287
- <div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160; <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* stInfo = <span class="keyword">new</span> <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>(1);</div>
1288
- <div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160; </div>
1289
- <div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160; <span class="comment">// Number of fields after flattening the struct</span></div>
1290
- <div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160; numFields = 0;</div>
1291
- <div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160; <span class="comment">// The offset when considering array stride info</span></div>
1292
- <div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> strideOffset = 0;</div>
1293
- <div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* elemTy : structTy-&gt;elements())</div>
1294
- <div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160; {</div>
1295
- <div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* elemSvfTy = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(elemTy);</div>
1296
- <div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160; <span class="comment">// offset with int_32 (s32_t) is large enough and won&#39;t overflow</span></div>
1297
- <div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#aae0736a5e99b11571af52e28500a6f9c">addFldWithType</a>(numFields, elemSvfTy, strideOffset);</div>
1298
- <div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160; </div>
1299
- <div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;StructType, ArrayType&gt;(elemTy))</div>
1300
- <div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160; {</div>
1301
- <div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160; <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* subStInfo = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a1f6cc76c996a0577b20b8cedd83fff92">collectTypeInfo</a>(elemTy);</div>
1302
- <div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> nfF = subStInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ae5fad367673315da57a604e64b5889f0">getNumOfFlattenFields</a>();</div>
1303
- <div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> nfE = subStInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a518c82138fcadc6634980566c1c0f762">getNumOfFlattenElements</a>();</div>
1304
- <div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160; <span class="comment">// Copy ST&#39;s info, whose element 0 is the size of ST itself.</span></div>
1305
- <div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> j = 0; j &lt; nfF; ++j)</div>
1306
- <div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160; {</div>
1307
- <div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* elemTy = subStInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ac0a9f85f90524abfd519d3cd2ac95a56">getFlattenFieldTypes</a>()[j];</div>
1308
- <div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ac0a9f85f90524abfd519d3cd2ac95a56">getFlattenFieldTypes</a>().push_back(elemTy);</div>
1309
- <div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160; }</div>
1310
- <div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160; numFields += nfF;</div>
1311
- <div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160; strideOffset += nfE;</div>
1312
- <div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> tpj = 0; tpj &lt; nfE; ++tpj)</div>
1313
- <div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160; {</div>
1314
- <div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* ty = subStInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a03bfeee0406c7e54557e74f3a8e848b7">getFlattenElementTypes</a>()[tpj];</div>
1315
- <div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a03bfeee0406c7e54557e74f3a8e848b7">getFlattenElementTypes</a>().push_back(ty);</div>
1316
- <div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160; }</div>
1317
- <div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160; </div>
1318
- <div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160; }</div>
1319
- <div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160; <span class="keywordflow">else</span></div>
1320
- <div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160; {</div>
1321
- <div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160; <span class="comment">// Simple type</span></div>
1322
- <div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160; numFields += 1;</div>
1323
- <div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160; strideOffset += 1;</div>
1324
- <div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ac0a9f85f90524abfd519d3cd2ac95a56">getFlattenFieldTypes</a>().push_back(elemSvfTy);</div>
1325
- <div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a03bfeee0406c7e54557e74f3a8e848b7">getFlattenElementTypes</a>().push_back(elemSvfTy);</div>
1224
+ <div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160; <span class="keywordflow">else</span></div>
1225
+ <div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160; {</div>
1226
+ <div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="cJSON_8h.html#a503753140aa27b00f99a3501280b2746">buffer</a>;</div>
1227
+ <div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160; <span class="keyword">auto</span> ot = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFOtherType.html">SVFOtherType</a>(T-&gt;isSingleValueType());</div>
1228
+ <div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160; llvm::raw_string_ostream(<a class="code" href="cJSON_8h.html#a503753140aa27b00f99a3501280b2746">buffer</a>) &lt;&lt; *T;</div>
1229
+ <div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160; ot-&gt;setRepr(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(<a class="code" href="cJSON_8h.html#a503753140aa27b00f99a3501280b2746">buffer</a>));</div>
1230
+ <div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160; svftype = ot;</div>
1231
+ <div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160; }</div>
1232
+ <div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160; </div>
1233
+ <div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5552135a27684cbe4d2a5ed346f64644">symInfo</a>-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a91083d9504ae5d220b28e0b3e461d4aa">addTypeInfo</a>(svftype);</div>
1234
+ <div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a067661e0049314779a44c9600420820f">LLVMType2SVFType</a>[T] = svftype;</div>
1235
+ <div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160; <span class="keywordflow">return</span> svftype;</div>
1236
+ <div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160;}</div>
1237
+ <div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160; </div>
1238
+ <div class="line"><a name="l01204"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#aa8de934358332505d4805db137d8ec29"> 1204</a></span>&#160;<a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* <a class="code" href="classSVF_1_1LLVMModuleSet.html#aa8de934358332505d4805db137d8ec29">LLVMModuleSet::collectArrayInfo</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a146d286041987860388da3d8bc85cee3">ArrayType</a>* ty)</div>
1239
+ <div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160;{</div>
1240
+ <div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160; <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> totalElemNum = ty-&gt;getNumElements();</div>
1241
+ <div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* elemTy = ty-&gt;getElementType();</div>
1242
+ <div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160; <span class="keywordflow">while</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a146d286041987860388da3d8bc85cee3">ArrayType</a>* aty = SVFUtil::dyn_cast&lt;ArrayType&gt;(elemTy))</div>
1243
+ <div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160; {</div>
1244
+ <div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160; totalElemNum *= aty-&gt;getNumElements();</div>
1245
+ <div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160; elemTy = aty-&gt;getElementType();</div>
1246
+ <div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160; }</div>
1247
+ <div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160; </div>
1248
+ <div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160; <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* stInfo = <span class="keyword">new</span> <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>(totalElemNum);</div>
1249
+ <div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* elemSvfType = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(elemTy);</div>
1250
+ <div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160; </div>
1251
+ <div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160; <span class="keywordflow">if</span> (totalElemNum == 0)</div>
1252
+ <div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160; {</div>
1253
+ <div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#aae0736a5e99b11571af52e28500a6f9c">addFldWithType</a>(0, elemSvfType, 0);</div>
1254
+ <div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a1a07c2b1415c29d7d70791c6dfe602a3">setNumOfFieldsAndElems</a>(1, 1);</div>
1255
+ <div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ac0a9f85f90524abfd519d3cd2ac95a56">getFlattenFieldTypes</a>().push_back(elemSvfType);</div>
1256
+ <div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a03bfeee0406c7e54557e74f3a8e848b7">getFlattenElementTypes</a>().push_back(elemSvfType);</div>
1257
+ <div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160; <span class="keywordflow">return</span> stInfo;</div>
1258
+ <div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160; }</div>
1259
+ <div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160; </div>
1260
+ <div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160; <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* elemStInfo = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a1f6cc76c996a0577b20b8cedd83fff92">collectTypeInfo</a>(elemTy);</div>
1261
+ <div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> nfF = elemStInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ae5fad367673315da57a604e64b5889f0">getNumOfFlattenFields</a>();</div>
1262
+ <div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> nfE = elemStInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a518c82138fcadc6634980566c1c0f762">getNumOfFlattenElements</a>();</div>
1263
+ <div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> j = 0; j &lt; nfF; j++)</div>
1264
+ <div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160; {</div>
1265
+ <div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* fieldTy = elemStInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ac0a9f85f90524abfd519d3cd2ac95a56">getFlattenFieldTypes</a>()[j];</div>
1266
+ <div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ac0a9f85f90524abfd519d3cd2ac95a56">getFlattenFieldTypes</a>().push_back(fieldTy);</div>
1267
+ <div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160; }</div>
1268
+ <div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160; </div>
1269
+ <div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> outArrayElemNum = ty-&gt;getNumElements();</div>
1270
+ <div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; outArrayElemNum; ++i)</div>
1271
+ <div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160; {</div>
1272
+ <div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160; <span class="keyword">auto</span> idx = (i * nfE * totalElemNum) / outArrayElemNum;</div>
1273
+ <div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#aae0736a5e99b11571af52e28500a6f9c">addFldWithType</a>(0, elemSvfType, idx);</div>
1274
+ <div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160; }</div>
1275
+ <div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160; </div>
1276
+ <div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; totalElemNum; ++i)</div>
1277
+ <div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160; {</div>
1278
+ <div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> j = 0; j &lt; nfE; ++j)</div>
1279
+ <div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160; {</div>
1280
+ <div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* et = elemStInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a03bfeee0406c7e54557e74f3a8e848b7">getFlattenElementTypes</a>()[j];</div>
1281
+ <div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a03bfeee0406c7e54557e74f3a8e848b7">getFlattenElementTypes</a>().push_back(et);</div>
1282
+ <div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160; }</div>
1283
+ <div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160; }</div>
1284
+ <div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160; </div>
1285
+ <div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160; assert(stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a03bfeee0406c7e54557e74f3a8e848b7">getFlattenElementTypes</a>().size() == nfE * totalElemNum &amp;&amp;</div>
1286
+ <div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160; <span class="stringliteral">&quot;typeForArray size incorrect!!!&quot;</span>);</div>
1287
+ <div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a1a07c2b1415c29d7d70791c6dfe602a3">setNumOfFieldsAndElems</a>(nfF, nfE * totalElemNum);</div>
1288
+ <div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160; </div>
1289
+ <div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160; <span class="keywordflow">return</span> stInfo;</div>
1290
+ <div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160;}</div>
1291
+ <div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160; </div>
1292
+ <div class="line"><a name="l01267"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a946d1251501c7e0e33a9210838951258"> 1267</a></span>&#160;<a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* <a class="code" href="classSVF_1_1LLVMModuleSet.html#a946d1251501c7e0e33a9210838951258">LLVMModuleSet::collectStructInfo</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a>* structTy,</div>
1293
+ <div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>&amp; numFields)</div>
1294
+ <div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160;{</div>
1295
+ <div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160; <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* stInfo = <span class="keyword">new</span> <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>(1);</div>
1296
+ <div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160; </div>
1297
+ <div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160; <span class="comment">// Number of fields after flattening the struct</span></div>
1298
+ <div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160; numFields = 0;</div>
1299
+ <div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160; <span class="comment">// The offset when considering array stride info</span></div>
1300
+ <div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> strideOffset = 0;</div>
1301
+ <div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* elemTy : structTy-&gt;elements())</div>
1302
+ <div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160; {</div>
1303
+ <div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* elemSvfTy = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(elemTy);</div>
1304
+ <div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160; <span class="comment">// offset with int_32 (s32_t) is large enough and won&#39;t overflow</span></div>
1305
+ <div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#aae0736a5e99b11571af52e28500a6f9c">addFldWithType</a>(numFields, elemSvfTy, strideOffset);</div>
1306
+ <div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160; </div>
1307
+ <div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;StructType, ArrayType&gt;(elemTy))</div>
1308
+ <div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160; {</div>
1309
+ <div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160; <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* subStInfo = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a1f6cc76c996a0577b20b8cedd83fff92">collectTypeInfo</a>(elemTy);</div>
1310
+ <div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> nfF = subStInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ae5fad367673315da57a604e64b5889f0">getNumOfFlattenFields</a>();</div>
1311
+ <div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> nfE = subStInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a518c82138fcadc6634980566c1c0f762">getNumOfFlattenElements</a>();</div>
1312
+ <div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160; <span class="comment">// Copy ST&#39;s info, whose element 0 is the size of ST itself.</span></div>
1313
+ <div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> j = 0; j &lt; nfF; ++j)</div>
1314
+ <div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160; {</div>
1315
+ <div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* elemTy = subStInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ac0a9f85f90524abfd519d3cd2ac95a56">getFlattenFieldTypes</a>()[j];</div>
1316
+ <div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ac0a9f85f90524abfd519d3cd2ac95a56">getFlattenFieldTypes</a>().push_back(elemTy);</div>
1317
+ <div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160; }</div>
1318
+ <div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160; numFields += nfF;</div>
1319
+ <div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160; strideOffset += nfE;</div>
1320
+ <div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> tpj = 0; tpj &lt; nfE; ++tpj)</div>
1321
+ <div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160; {</div>
1322
+ <div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* ty = subStInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a03bfeee0406c7e54557e74f3a8e848b7">getFlattenElementTypes</a>()[tpj];</div>
1323
+ <div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a03bfeee0406c7e54557e74f3a8e848b7">getFlattenElementTypes</a>().push_back(ty);</div>
1324
+ <div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160; }</div>
1325
+ <div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160; </div>
1326
1326
  <div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160; }</div>
1327
- <div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160; }</div>
1328
- <div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160; </div>
1329
- <div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160; assert(stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a03bfeee0406c7e54557e74f3a8e848b7">getFlattenElementTypes</a>().size() == strideOffset &amp;&amp;</div>
1330
- <div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160; <span class="stringliteral">&quot;typeForStruct size incorrect!&quot;</span>);</div>
1331
- <div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a1a07c2b1415c29d7d70791c6dfe602a3">setNumOfFieldsAndElems</a>(numFields,strideOffset);</div>
1332
- <div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160; </div>
1333
- <div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160; <span class="keywordflow">return</span> stInfo;</div>
1334
- <div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160;}</div>
1335
- <div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160; </div>
1327
+ <div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160; <span class="keywordflow">else</span></div>
1328
+ <div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160; {</div>
1329
+ <div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160; <span class="comment">// Simple type</span></div>
1330
+ <div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160; numFields += 1;</div>
1331
+ <div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160; strideOffset += 1;</div>
1332
+ <div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ac0a9f85f90524abfd519d3cd2ac95a56">getFlattenFieldTypes</a>().push_back(elemSvfTy);</div>
1333
+ <div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a03bfeee0406c7e54557e74f3a8e848b7">getFlattenElementTypes</a>().push_back(elemSvfTy);</div>
1334
+ <div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160; }</div>
1335
+ <div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160; }</div>
1336
1336
  <div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160; </div>
1337
- <div class="line"><a name="l01316"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a52853bd34a394882c6fd0fc73739c9f2"> 1316</a></span>&#160;<a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* <a class="code" href="classSVF_1_1LLVMModuleSet.html#a52853bd34a394882c6fd0fc73739c9f2">LLVMModuleSet::collectSimpleTypeInfo</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* ty)</div>
1338
- <div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160;{</div>
1339
- <div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160; <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* stInfo = <span class="keyword">new</span> <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>(1);</div>
1340
- <div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160; <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* svfType = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(ty);</div>
1341
- <div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#aae0736a5e99b11571af52e28500a6f9c">addFldWithType</a>(0, svfType, 0);</div>
1342
- <div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>&#160; </div>
1343
- <div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ac0a9f85f90524abfd519d3cd2ac95a56">getFlattenFieldTypes</a>().push_back(svfType);</div>
1344
- <div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a03bfeee0406c7e54557e74f3a8e848b7">getFlattenElementTypes</a>().push_back(svfType);</div>
1345
- <div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a1a07c2b1415c29d7d70791c6dfe602a3">setNumOfFieldsAndElems</a>(1,1);</div>
1346
- <div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160; </div>
1347
- <div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160; <span class="keywordflow">return</span> stInfo;</div>
1348
- <div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160;}</div>
1337
+ <div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160; assert(stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a03bfeee0406c7e54557e74f3a8e848b7">getFlattenElementTypes</a>().size() == strideOffset &amp;&amp;</div>
1338
+ <div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160; <span class="stringliteral">&quot;typeForStruct size incorrect!&quot;</span>);</div>
1339
+ <div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a1a07c2b1415c29d7d70791c6dfe602a3">setNumOfFieldsAndElems</a>(numFields,strideOffset);</div>
1340
+ <div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160; </div>
1341
+ <div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160; <span class="keywordflow">return</span> stInfo;</div>
1342
+ <div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160;}</div>
1343
+ <div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160; </div>
1344
+ <div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160; </div>
1345
+ <div class="line"><a name="l01324"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a52853bd34a394882c6fd0fc73739c9f2"> 1324</a></span>&#160;<a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* <a class="code" href="classSVF_1_1LLVMModuleSet.html#a52853bd34a394882c6fd0fc73739c9f2">LLVMModuleSet::collectSimpleTypeInfo</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* ty)</div>
1346
+ <div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160;{</div>
1347
+ <div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160; <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* stInfo = <span class="keyword">new</span> <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>(1);</div>
1348
+ <div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160; <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* svfType = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(ty);</div>
1349
+ <div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#aae0736a5e99b11571af52e28500a6f9c">addFldWithType</a>(0, svfType, 0);</div>
1350
+ <div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160; </div>
1351
+ <div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ac0a9f85f90524abfd519d3cd2ac95a56">getFlattenFieldTypes</a>().push_back(svfType);</div>
1352
+ <div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a03bfeee0406c7e54557e74f3a8e848b7">getFlattenElementTypes</a>().push_back(svfType);</div>
1353
+ <div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a1a07c2b1415c29d7d70791c6dfe602a3">setNumOfFieldsAndElems</a>(1,1);</div>
1354
+ <div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160; </div>
1355
+ <div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160; <span class="keywordflow">return</span> stInfo;</div>
1356
+ <div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160;}</div>
1349
1357
  </div><!-- fragment --></div><!-- contents -->
1350
1358
  <div class="ttc" id="aclassSVF_1_1SymbolTableInfo_html_a72be32d606db86090067159de44e01ec"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#a72be32d606db86090067159de44e01ec">SVF::SymbolTableInfo::addStInfo</a></div><div class="ttdeci">void addStInfo(StInfo *stInfo)</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00352">SymbolTableInfo.h:352</a></div></div>
1351
1359
  <div class="ttc" id="anamespaceSVF_html_a827d09974dc7bf0849f96823cc2fee89"><div class="ttname"><a href="namespaceSVF.html#a827d09974dc7bf0849f96823cc2fee89">SVF::DomTreeNode</a></div><div class="ttdeci">llvm::DomTreeNode DomTreeNode</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00132">BasicTypes.h:132</a></div></div>
1352
1360
  <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_af2c555af91679d9e6d3009547ee11486"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#af2c555af91679d9e6d3009547ee11486">SVF::LLVMModuleSet::Type2TypeInfo</a></div><div class="ttdeci">Type2TypeInfoMap Type2TypeInfo</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00088">LLVMModule.h:88</a></div></div>
1353
1361
  <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_ae265a7f3cc7367d62013e0f15cf3d233"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#ae265a7f3cc7367d62013e0f15cf3d233">SVF::LLVMModuleSet::getModuleNum</a></div><div class="ttdeci">u32_t getModuleNum() const</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00121">LLVMModule.h:121</a></div></div>
1354
- <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_aaab03cb6ff665bc008c67b866ba81e47"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#aaab03cb6ff665bc008c67b866ba81e47">SVF::LLVMModuleSet::buildGlobalDefToRepMap</a></div><div class="ttdeci">void buildGlobalDefToRepMap()</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00851">LLVMModule.cpp:851</a></div></div>
1362
+ <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_aaab03cb6ff665bc008c67b866ba81e47"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#aaab03cb6ff665bc008c67b866ba81e47">SVF::LLVMModuleSet::buildGlobalDefToRepMap</a></div><div class="ttdeci">void buildGlobalDefToRepMap()</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00859">LLVMModule.cpp:859</a></div></div>
1355
1363
  <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a8e4add30bd0ce00d3f2aa2e31c64fef8"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a8e4add30bd0ce00d3f2aa2e31c64fef8">SVF::LLVMUtil::getSourceLoc</a></div><div class="ttdeci">const std::string getSourceLoc(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00471">LLVMUtil.cpp:471</a></div></div>
1356
1364
  <div class="ttc" id="aLLVMModule_8cpp_html_a9fd6e28e6ed93f65a20a348ab0646320"><div class="ttname"><a href="LLVMModule_8cpp.html#a9fd6e28e6ed93f65a20a348ab0646320">SVF_GLOBAL_DTORS</a></div><div class="ttdeci">#define SVF_GLOBAL_DTORS</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00070">LLVMModule.cpp:70</a></div></div>
1357
1365
  <div class="ttc" id="aclassSVF_1_1SVFType_html_aef5999ada62dac3cc946d832ac66948c"><div class="ttname"><a href="classSVF_1_1SVFType.html#aef5999ada62dac3cc946d832ac66948c">SVF::SVFType::setTypeInfo</a></div><div class="ttdeci">void setTypeInfo(StInfo *ti)</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00302">SVFType.h:302</a></div></div>
@@ -1360,7 +1368,7 @@ $(function() {
1360
1368
  <div class="ttc" id="anamespaceSVF_html_aecbb42b8e9d17fa0189c50dda9fd5fdd"><div class="ttname"><a href="namespaceSVF.html#aecbb42b8e9d17fa0189c50dda9fd5fdd">SVF::DominatorTree</a></div><div class="ttdeci">llvm::DominatorTree DominatorTree</div><div class="ttdoc">LLVM Dominators.</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00131">BasicTypes.h:131</a></div></div>
1361
1369
  <div class="ttc" id="aclassSVF_1_1SymbolTableInfo_html_a0c1143eff451edf8ea47d4487a8d3a55"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#a0c1143eff451edf8ea47d4487a8d3a55">SVF::SymbolTableInfo::maxStruct</a></div><div class="ttdeci">const SVFType * maxStruct</div><div class="ttdoc">The struct type with the most fields.</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00340">SymbolTableInfo.h:340</a></div></div>
1362
1370
  <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_ae919327019b5014f64b754dbdeb07f75"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#ae919327019b5014f64b754dbdeb07f75">SVF::LLVMModuleSet::buildSVFModule</a></div><div class="ttdeci">static SVFModule * buildSVFModule(Module &amp;mod)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00094">LLVMModule.cpp:94</a></div></div>
1363
- <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_aab7b08db9252ef7e21e54d019f44b073"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#aab7b08db9252ef7e21e54d019f44b073">SVF::LLVMModuleSet::addSVFTypeInfo</a></div><div class="ttdeci">SVFType * addSVFTypeInfo(const Type *t)</div><div class="ttdoc">Create SVFTypes.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l01147">LLVMModule.cpp:1147</a></div></div>
1371
+ <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_aab7b08db9252ef7e21e54d019f44b073"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#aab7b08db9252ef7e21e54d019f44b073">SVF::LLVMModuleSet::addSVFTypeInfo</a></div><div class="ttdeci">SVFType * addSVFTypeInfo(const Type *t)</div><div class="ttdoc">Create SVFTypes.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l01155">LLVMModule.cpp:1155</a></div></div>
1364
1372
  <div class="ttc" id="aclassSVF_1_1SVFBasicBlock_html_ac1b15d8f9c2499add8dbc889ae5cab65"><div class="ttname"><a href="classSVF_1_1SVFBasicBlock.html#ac1b15d8f9c2499add8dbc889ae5cab65">SVF::SVFBasicBlock::addInstruction</a></div><div class="ttdeci">void addInstruction(const SVFInstruction *inst)</div><div class="ttdoc">Function where this BasicBlock is.</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00508">SVFValue.h:508</a></div></div>
1365
1373
  <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a4091b12bdfe4423d8114612a199bc480"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a4091b12bdfe4423d8114612a199bc480">SVF::LLVMModuleSet::getLLVMModules</a></div><div class="ttdeci">const std::vector&lt; std::reference_wrapper&lt; Module &gt; &gt; &amp; getLLVMModules() const</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00126">LLVMModule.h:126</a></div></div>
1366
1374
  <div class="ttc" id="anamespaceSVF_html_a94824519e439aeef1568d415b6f7331c"><div class="ttname"><a href="namespaceSVF.html#a94824519e439aeef1568d415b6f7331c">SVF::IRBuilder</a></div><div class="ttdeci">llvm::IRBuilder IRBuilder</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00072">BasicTypes.h:72</a></div></div>
@@ -1368,7 +1376,7 @@ $(function() {
1368
1376
  <div class="ttc" id="aclassSVF_1_1SVFCallInst_html"><div class="ttname"><a href="classSVF_1_1SVFCallInst.html">SVF::SVFCallInst</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00665">SVFValue.h:665</a></div></div>
1369
1377
  <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a7de84e7817406867b173e1591e0681ac"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a7de84e7817406867b173e1591e0681ac">SVF::LLVMModuleSet::addGlobalValueMap</a></div><div class="ttdeci">void addGlobalValueMap(const GlobalValue *glob, SVFGlobalValue *svfglob)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00165">LLVMModule.h:165</a></div></div>
1370
1378
  <div class="ttc" id="anamespaceSVF_html_a6ec0236303089a01fd9da36a8bb84e0a"><div class="ttname"><a href="namespaceSVF.html#a6ec0236303089a01fd9da36a8bb84e0a">SVF::FunctionType</a></div><div class="ttdeci">llvm::FunctionType FunctionType</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00096">BasicTypes.h:96</a></div></div>
1371
- <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_ac7c646a78c989807c52263fc35fb3628"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#ac7c646a78c989807c52263fc35fb3628">SVF::LLVMModuleSet::buildFunToFunMap</a></div><div class="ttdeci">void buildFunToFunMap()</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00764">LLVMModule.cpp:764</a></div></div>
1379
+ <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_ac7c646a78c989807c52263fc35fb3628"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#ac7c646a78c989807c52263fc35fb3628">SVF::LLVMModuleSet::buildFunToFunMap</a></div><div class="ttdeci">void buildFunToFunMap()</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00772">LLVMModule.cpp:772</a></div></div>
1372
1380
  <div class="ttc" id="aclassSVF_1_1SVFCallInst_html_a6dd304f555d2d2388c4430e57b0d2b91"><div class="ttname"><a href="classSVF_1_1SVFCallInst.html#a6dd304f555d2d2388c4430e57b0d2b91">SVF::SVFCallInst::setCalledOperand</a></div><div class="ttdeci">void setCalledOperand(const SVFValue *v)</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00683">SVFValue.h:683</a></div></div>
1373
1381
  <div class="ttc" id="aclassSVF_1_1SymbolTableInfo_html_a91083d9504ae5d220b28e0b3e461d4aa"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#a91083d9504ae5d220b28e0b3e461d4aa">SVF::SymbolTableInfo::addTypeInfo</a></div><div class="ttdeci">void addTypeInfo(const SVFType *ty)</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00345">SymbolTableInfo.h:345</a></div></div>
1374
1382
  <div class="ttc" id="aclassSVF_1_1SVFPointerType_html"><div class="ttname"><a href="classSVF_1_1SVFPointerType.html">SVF::SVFPointerType</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00332">SVFType.h:332</a></div></div>
@@ -1378,7 +1386,7 @@ $(function() {
1378
1386
  <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_ae2a1fa0b908cf372c50af90e62c4bf2b"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#ae2a1fa0b908cf372c50af90e62c4bf2b">SVF::LLVMModuleSet::GlobalDefToRepMap</a></div><div class="ttdeci">GlobalDefToRepMapTy GlobalDefToRepMap</div><div class="ttdoc">Global definition to a rep definition map.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00078">LLVMModule.h:78</a></div></div>
1379
1387
  <div class="ttc" id="anamespaceSVF_html_a23bf614858f168b6ad76e0233cec9965"><div class="ttname"><a href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">SVF::BasicBlock</a></div><div class="ttdeci">llvm::BasicBlock BasicBlock</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00084">BasicTypes.h:84</a></div></div>
1380
1388
  <div class="ttc" id="anamespaceSVF_html"><div class="ttname"><a href="namespaceSVF.html">SVF</a></div><div class="ttdoc">for isBitcode</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00065">BasicTypes.h:65</a></div></div>
1381
- <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_af37b9976b282c875cac7bb1777da635c"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#af37b9976b282c875cac7bb1777da635c">SVF::LLVMModuleSet::dumpModulesToFile</a></div><div class="ttdeci">void dumpModulesToFile(const std::string &amp;suffix)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00894">LLVMModule.cpp:894</a></div></div>
1389
+ <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_af37b9976b282c875cac7bb1777da635c"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#af37b9976b282c875cac7bb1777da635c">SVF::LLVMModuleSet::dumpModulesToFile</a></div><div class="ttdeci">void dumpModulesToFile(const std::string &amp;suffix)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00902">LLVMModule.cpp:902</a></div></div>
1382
1390
  <div class="ttc" id="aSVFGBuilder_8h_html"><div class="ttname"><a href="SVFGBuilder_8h.html">SVFGBuilder.h</a></div></div>
1383
1391
  <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_ad3f66b40ad360003845253f452d6a711"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#ad3f66b40ad360003845253f452d6a711">SVF::LLVMModuleSet::getSVFArgument</a></div><div class="ttdeci">SVFArgument * getSVFArgument(const Argument *arg) const</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00216">LLVMModule.h:216</a></div></div>
1384
1392
  <div class="ttc" id="aclassSVF_1_1SVFValue_html_a8325774df9d65d78ef6a66fef59b9a97"><div class="ttname"><a href="classSVF_1_1SVFValue.html#a8325774df9d65d78ef6a66fef59b9a97">SVF::SVFValue::setName</a></div><div class="ttdeci">void setName(const std::string &amp;n)</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00220">SVFValue.h:220</a></div></div>
@@ -1386,21 +1394,21 @@ $(function() {
1386
1394
  <div class="ttc" id="aLLVMModule_8cpp_html_a02ccaa6664b87aaa9ee148d352344352"><div class="ttname"><a href="LLVMModule_8cpp.html#a02ccaa6664b87aaa9ee148d352344352">shortenLongInfo</a></div><div class="ttdeci">static void shortenLongInfo(std::string &amp;info, unsigned bestLen=15)</div><div class="ttdoc">Helper function to summarize a long string.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00076">LLVMModule.cpp:76</a></div></div>
1387
1395
  <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_af4bd487b3b6efe55bf869b869f5e8a80"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#af4bd487b3b6efe55bf869b869f5e8a80">SVF::LLVMModuleSet::addConstantDataMap</a></div><div class="ttdeci">void addConstantDataMap(const ConstantData *cd, SVFConstantData *svfcd)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00170">LLVMModule.h:170</a></div></div>
1388
1396
  <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>
1389
- <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a15e97e3f2ba62d3fe444bb17cd637dbd"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a15e97e3f2ba62d3fe444bb17cd637dbd">SVF::LLVMModuleSet::buildSymbolTable</a></div><div class="ttdeci">void buildSymbolTable() const</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00135">LLVMModule.cpp:135</a></div></div>
1397
+ <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a15e97e3f2ba62d3fe444bb17cd637dbd"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a15e97e3f2ba62d3fe444bb17cd637dbd">SVF::LLVMModuleSet::buildSymbolTable</a></div><div class="ttdeci">void buildSymbolTable() const</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00136">LLVMModule.cpp:136</a></div></div>
1390
1398
  <div class="ttc" id="aclassSVF_1_1SVFModule_html_a7af3076a26060090377d1f74293560fe"><div class="ttname"><a href="classSVF_1_1SVFModule.html#a7af3076a26060090377d1f74293560fe">SVF::SVFModule::setPagFromTXT</a></div><div class="ttdeci">static void setPagFromTXT(const std::string &amp;txt)</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00084">SVFModule.h:84</a></div></div>
1391
1399
  <div class="ttc" id="aSVFType_8h_html_a1aeda3370621dc00e9a0fe8e7aabc736"><div class="ttname"><a href="SVFType_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a></div><div class="ttdeci">#define TIMEINTERVAL</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00577">SVFType.h:577</a></div></div>
1392
1400
  <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a3eaadb33cd21d0bd868526b5ddb051d9"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a3eaadb33cd21d0bd868526b5ddb051d9">SVF::LLVMModuleSet::addBasicBlockMap</a></div><div class="ttdeci">void addBasicBlockMap(const BasicBlock *bb, SVFBasicBlock *svfBB)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00150">LLVMModule.h:150</a></div></div>
1393
- <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a0ef17c1d5e6a95c597d2334ea577a965"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a0ef17c1d5e6a95c597d2334ea577a965">SVF::LLVMModuleSet::getSVFOtherValue</a></div><div class="ttdeci">SVFOtherValue * getSVFOtherValue(const Value *ov)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l01031">LLVMModule.cpp:1031</a></div></div>
1401
+ <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a0ef17c1d5e6a95c597d2334ea577a965"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a0ef17c1d5e6a95c597d2334ea577a965">SVF::LLVMModuleSet::getSVFOtherValue</a></div><div class="ttdeci">SVFOtherValue * getSVFOtherValue(const Value *ov)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l01039">LLVMModule.cpp:1039</a></div></div>
1394
1402
  <div class="ttc" id="aclassSVF_1_1StInfo_html_a518c82138fcadc6634980566c1c0f762"><div class="ttname"><a href="classSVF_1_1StInfo.html#a518c82138fcadc6634980566c1c0f762">SVF::StInfo::getNumOfFlattenElements</a></div><div class="ttdeci">u32_t getNumOfFlattenElements() const</div><div class="ttdoc">Return number of elements after flattenning (including array elements)</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00225">SVFType.h:225</a></div></div>
1395
1403
  <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a2c61d741afbcfa853b505cd391f29f9b"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a2c61d741afbcfa853b505cd391f29f9b">SVF::LLVMUtil::isUncalledFunction</a></div><div class="ttdeci">bool isUncalledFunction(const Function *fun)</div><div class="ttdoc">whether this is a function without any possible caller?</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00144">LLVMUtil.cpp:144</a></div></div>
1396
1404
  <div class="ttc" id="aclassSVF_1_1SVFConstantData_html"><div class="ttname"><a href="classSVF_1_1SVFConstantData.html">SVF::SVFConstantData</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00908">SVFValue.h:908</a></div></div>
1397
- <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a5f0bd932f3129a9c565f3a09711f7b99"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">SVF::LLVMModuleSet::getSVFType</a></div><div class="ttdeci">SVFType * getSVFType(const Type *T)</div><div class="ttdoc">Get or create SVFType and typeinfo.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l01095">LLVMModule.cpp:1095</a></div></div>
1405
+ <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a5f0bd932f3129a9c565f3a09711f7b99"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">SVF::LLVMModuleSet::getSVFType</a></div><div class="ttdeci">SVFType * getSVFType(const Type *T)</div><div class="ttdoc">Get or create SVFType and typeinfo.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l01103">LLVMModule.cpp:1103</a></div></div>
1398
1406
  <div class="ttc" id="aclassSVF_1_1SVFModule_html_a0bc5a63d8c10da51766007cf40b095e5"><div class="ttname"><a href="classSVF_1_1SVFModule.html#a0bc5a63d8c10da51766007cf40b095e5">SVF::SVFModule::addGlobalSet</a></div><div class="ttdeci">void addGlobalSet(SVFGlobalValue *glob)</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00111">SVFModule.h:111</a></div></div>
1399
1407
  <div class="ttc" id="aclassSVF_1_1SVFMetadataAsValue_html"><div class="ttname"><a href="classSVF_1_1SVFMetadataAsValue.html">SVF::SVFMetadataAsValue</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l01074">SVFValue.h:1074</a></div></div>
1400
1408
  <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a4b94c96898dbbc71bc1cee04786cf3dc"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a4b94c96898dbbc71bc1cee04786cf3dc">SVF::LLVMModuleSet::LLVMConst2SVFConst</a></div><div class="ttdeci">LLVMConst2SVFConstMap LLVMConst2SVFConst</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00084">LLVMModule.h:84</a></div></div>
1401
1409
  <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a2f8e91c075d90be66412a079fe73e936"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a2f8e91c075d90be66412a079fe73e936">SVF::LLVMModuleSet::releaseLLVMModuleSet</a></div><div class="ttdeci">static void releaseLLVMModuleSet()</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00105">LLVMModule.h:105</a></div></div>
1402
1410
  <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a50fc24901350df9db890ba16a9b87e33"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a50fc24901350df9db890ba16a9b87e33">SVF::LLVMModuleSet::getSVFFunction</a></div><div class="ttdeci">SVFFunction * getSVFFunction(const Function *fun) const</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00195">LLVMModule.h:195</a></div></div>
1403
- <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a946d1251501c7e0e33a9210838951258"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a946d1251501c7e0e33a9210838951258">SVF::LLVMModuleSet::collectStructInfo</a></div><div class="ttdeci">StInfo * collectStructInfo(const StructType *structTy, u32_t &amp;numFields)</div><div class="ttdoc">Collect the struct info and set the number of fields after flattening.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l01259">LLVMModule.cpp:1259</a></div></div>
1411
+ <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a946d1251501c7e0e33a9210838951258"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a946d1251501c7e0e33a9210838951258">SVF::LLVMModuleSet::collectStructInfo</a></div><div class="ttdeci">StInfo * collectStructInfo(const StructType *structTy, u32_t &amp;numFields)</div><div class="ttdoc">Collect the struct info and set the number of fields after flattening.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l01267">LLVMModule.cpp:1267</a></div></div>
1404
1412
  <div class="ttc" id="anamespaceSVF_html_a90b263fd2f541eca78135078114cabda"><div class="ttname"><a href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">SVF::Value</a></div><div class="ttdeci">llvm::Value Value</div><div class="ttdoc">LLVM Basic classes.</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00080">BasicTypes.h:80</a></div></div>
1405
1413
  <div class="ttc" id="aclassSVF_1_1SVFModule_html_ae64d24569942d7c4b18d2198be4839f3"><div class="ttname"><a href="classSVF_1_1SVFModule.html#ae64d24569942d7c4b18d2198be4839f3">SVF::SVFModule::addConstant</a></div><div class="ttdeci">void addConstant(SVFConstant *cd)</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00121">SVFModule.h:121</a></div></div>
1406
1414
  <div class="ttc" id="aclassSVF_1_1SVFBlackHoleValue_html"><div class="ttname"><a href="classSVF_1_1SVFBlackHoleValue.html">SVF::SVFBlackHoleValue</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l01028">SVFValue.h:1028</a></div></div>
@@ -1425,12 +1433,12 @@ $(function() {
1425
1433
  <div class="ttc" id="acJSON_8h_html_a750b5d744c39a06bfb13e6eb010e35d0"><div class="ttname"><a href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a></div><div class="ttdeci">int index</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00170">cJSON.h:170</a></div></div>
1426
1434
  <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_ab0c0f321b6bfbfab2e4ff06d81920ab9"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#ab0c0f321b6bfbfab2e4ff06d81920ab9">SVF::LLVMModuleSet::getSVFBasicBlock</a></div><div class="ttdeci">SVFBasicBlock * getSVFBasicBlock(const BasicBlock *bb) const</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00202">LLVMModule.h:202</a></div></div>
1427
1435
  <div class="ttc" id="anamespaceSVF_html_a09f5fa3bc44bf53612a085e3a611cc4e"><div class="ttname"><a href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">SVF::GlobalVariable</a></div><div class="ttdeci">llvm::GlobalVariable GlobalVariable</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00128">BasicTypes.h:128</a></div></div>
1428
- <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a0b46a2a5ff2165d17993a071d9cc82c1"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a0b46a2a5ff2165d17993a071d9cc82c1">SVF::LLVMModuleSet::getLLVMGlobalFunctions</a></div><div class="ttdeci">std::vector&lt; const Function * &gt; getLLVMGlobalFunctions(const GlobalVariable *global)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00580">LLVMModule.cpp:580</a></div></div>
1436
+ <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a0b46a2a5ff2165d17993a071d9cc82c1"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a0b46a2a5ff2165d17993a071d9cc82c1">SVF::LLVMModuleSet::getLLVMGlobalFunctions</a></div><div class="ttdeci">std::vector&lt; const Function * &gt; getLLVMGlobalFunctions(const GlobalVariable *global)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00588">LLVMModule.cpp:588</a></div></div>
1429
1437
  <div class="ttc" id="aclassSVF_1_1SVFStat_html_aa4950ec26b66a085ad38ac154b789db5"><div class="ttname"><a href="classSVF_1_1SVFStat.html#aa4950ec26b66a085ad38ac154b789db5">SVF::SVFStat::timeOfBuildingLLVMModule</a></div><div class="ttdeci">static double timeOfBuildingLLVMModule</div><div class="ttdef"><b>Definition:</b> <a href="SVFStat_8h_source.html#l00090">SVFStat.h:90</a></div></div>
1430
1438
  <div class="ttc" id="anamespaceSVF_html_a0fd33072b099f61eaa642e94ed0c03fc"><div class="ttname"><a href="namespaceSVF.html#a0fd33072b099f61eaa642e94ed0c03fc">SVF::GlobalAlias</a></div><div class="ttdeci">llvm::GlobalAlias GlobalAlias</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00126">BasicTypes.h:126</a></div></div>
1431
1439
  <div class="ttc" id="anamespaceSVF_html_aedd9d023a68dddd66314be63bb8e48d2"><div class="ttname"><a href="namespaceSVF.html#aedd9d023a68dddd66314be63bb8e48d2">SVF::operator&gt;</a></div><div class="ttdeci">IntervalValue operator&gt;(const IntervalValue &amp;lhs, const IntervalValue &amp;rhs)</div><div class="ttdoc">Greater than IntervalValues.</div><div class="ttdef"><b>Definition:</b> <a href="IntervalValue_8h_source.html#l00581">IntervalValue.h:581</a></div></div>
1432
1440
  <div class="ttc" id="aSVFUtil_8h_html"><div class="ttname"><a href="SVFUtil_8h.html">SVFUtil.h</a></div></div>
1433
- <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_af8edfe08027020f14b81b44362c6018e"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#af8edfe08027020f14b81b44362c6018e">SVF::LLVMModuleSet::build</a></div><div class="ttdeci">void build()</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00150">LLVMModule.cpp:150</a></div></div>
1441
+ <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_af8edfe08027020f14b81b44362c6018e"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#af8edfe08027020f14b81b44362c6018e">SVF::LLVMModuleSet::build</a></div><div class="ttdeci">void build()</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00151">LLVMModule.cpp:151</a></div></div>
1434
1442
  <div class="ttc" id="aclassSVF_1_1SVFModule_html_aa6627399cf4d30d576f76f681d83449d"><div class="ttname"><a href="classSVF_1_1SVFModule.html#aa6627399cf4d30d576f76f681d83449d">SVF::SVFModule::addAliasSet</a></div><div class="ttdeci">void addAliasSet(SVFGlobalValue *alias)</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00116">SVFModule.h:116</a></div></div>
1435
1443
  <div class="ttc" id="aOptions_8h_html"><div class="ttname"><a href="Options_8h.html">Options.h</a></div></div>
1436
1444
  <div class="ttc" id="aclassSVF_1_1SVFValue_html_afe1de41ca3215b325d0ca61814c6bd6b"><div class="ttname"><a href="classSVF_1_1SVFValue.html#afe1de41ca3215b325d0ca61814c6bd6b">SVF::SVFValue::setConstDataOrAggData</a></div><div class="ttdeci">void setConstDataOrAggData()</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00197">SVFValue.h:197</a></div></div>
@@ -1447,6 +1455,7 @@ $(function() {
1447
1455
  <div class="ttc" id="aclassSVF_1_1SVFArrayType_html"><div class="ttname"><a href="classSVF_1_1SVFArrayType.html">SVF::SVFArrayType</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00443">SVFType.h:443</a></div></div>
1448
1456
  <div class="ttc" id="aLLVMModule_8cpp_html_a10ab7c7da3a458495d8528b9e90d714b"><div class="ttname"><a href="LLVMModule_8cpp.html#a10ab7c7da3a458495d8528b9e90d714b">SVF_MAIN_FUNC_NAME</a></div><div class="ttdeci">#define SVF_MAIN_FUNC_NAME</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00068">LLVMModule.cpp:68</a></div></div>
1449
1457
  <div class="ttc" id="aclassSVF_1_1SVFFunction_html_a5798ecc742ee74e357d13eea751258c4"><div class="ttname"><a href="classSVF_1_1SVFFunction.html#a5798ecc742ee74e357d13eea751258c4">SVF::SVFFunction::getLoopAndDomInfo</a></div><div class="ttdeci">SVFLoopAndDomInfo * getLoopAndDomInfo()</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00340">SVFValue.h:340</a></div></div>
1458
+ <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a8820d1df9098db6eadf3a9c67e380e55"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a8820d1df9098db6eadf3a9c67e380e55">SVF::LLVMModuleSet::loadExtAPIModules</a></div><div class="ttdeci">void loadExtAPIModules()</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00564">LLVMModule.cpp:564</a></div></div>
1450
1459
  <div class="ttc" id="aclassSVF_1_1SVFValue_html_ac2e5c42d0ac92375c88ef5b3f1b65dc4"><div class="ttname"><a href="classSVF_1_1SVFValue.html#ac2e5c42d0ac92375c88ef5b3f1b65dc4">SVF::SVFValue::setPtrInUncalledFunction</a></div><div class="ttdeci">void setPtrInUncalledFunction()</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00201">SVFValue.h:201</a></div></div>
1451
1460
  <div class="ttc" id="aBreakConstantExpr_8h_html"><div class="ttname"><a href="BreakConstantExpr_8h.html">BreakConstantExpr.h</a></div></div>
1452
1461
  <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>
@@ -1467,34 +1476,33 @@ $(function() {
1467
1476
  <div class="ttc" id="aBasicTypes_8h_html"><div class="ttname"><a href="BasicTypes_8h.html">BasicTypes.h</a></div></div>
1468
1477
  <div class="ttc" id="aclassSVF_1_1SVFConstantInt_html"><div class="ttname"><a href="classSVF_1_1SVFConstantInt.html">SVF::SVFConstantInt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00939">SVFValue.h:939</a></div></div>
1469
1478
  <div class="ttc" id="aclassSVF_1_1SVFConstantFP_html"><div class="ttname"><a href="classSVF_1_1SVFConstantFP.html">SVF::SVFConstantFP</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00975">SVFValue.h:975</a></div></div>
1470
- <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a298966366b02d0a34f409c2c77da3789"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a298966366b02d0a34f409c2c77da3789">SVF::LLVMModuleSet::loadModules</a></div><div class="ttdeci">void loadModules(const std::vector&lt; std::string &gt; &amp;moduleNameVec)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00500">LLVMModule.cpp:500</a></div></div>
1479
+ <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a298966366b02d0a34f409c2c77da3789"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a298966366b02d0a34f409c2c77da3789">SVF::LLVMModuleSet::loadModules</a></div><div class="ttdeci">void loadModules(const std::vector&lt; std::string &gt; &amp;moduleNameVec)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00509">LLVMModule.cpp:509</a></div></div>
1471
1480
  <div class="ttc" id="aclassSVF_1_1SVFGlobalValue_html"><div class="ttname"><a href="classSVF_1_1SVFGlobalValue.html">SVF::SVFGlobalValue</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00823">SVFValue.h:823</a></div></div>
1472
1481
  <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_ad06a92bf8bc556de742e0ffdf79ffafe"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#ad06a92bf8bc556de742e0ffdf79ffafe">SVF::LLVMModuleSet::cxts</a></div><div class="ttdeci">std::unique_ptr&lt; LLVMContext &gt; cxts</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00069">LLVMModule.h:69</a></div></div>
1473
1482
  <div class="ttc" id="aclassSVF_1_1SVFModule_html_a1357c876eccedd58b3abe68875b3a570"><div class="ttname"><a href="classSVF_1_1SVFModule.html#a1357c876eccedd58b3abe68875b3a570">SVF::SVFModule::pagReadFromTXT</a></div><div class="ttdeci">static bool pagReadFromTXT()</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00099">SVFModule.h:99</a></div></div>
1474
- <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a52853bd34a394882c6fd0fc73739c9f2"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a52853bd34a394882c6fd0fc73739c9f2">SVF::LLVMModuleSet::collectSimpleTypeInfo</a></div><div class="ttdeci">StInfo * collectSimpleTypeInfo(const Type *T)</div><div class="ttdoc">Collect simple type (non-aggregate) info.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l01316">LLVMModule.cpp:1316</a></div></div>
1483
+ <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a52853bd34a394882c6fd0fc73739c9f2"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a52853bd34a394882c6fd0fc73739c9f2">SVF::LLVMModuleSet::collectSimpleTypeInfo</a></div><div class="ttdeci">StInfo * collectSimpleTypeInfo(const Type *T)</div><div class="ttdoc">Collect simple type (non-aggregate) info.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l01324">LLVMModule.cpp:1324</a></div></div>
1475
1484
  <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_ae365189769640adb919a23c36978e5e2"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#ae365189769640adb919a23c36978e5e2">SVF::LLVMModuleSet::owned_modules</a></div><div class="ttdeci">std::vector&lt; std::unique_ptr&lt; Module &gt; &gt; owned_modules</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00070">LLVMModule.h:70</a></div></div>
1476
1485
  <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a43832e93a42ae43d44b0cc160981678f"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a43832e93a42ae43d44b0cc160981678f">SVF::LLVMModuleSet::svfModule</a></div><div class="ttdeci">SVFModule * svfModule</div><div class="ttdoc">Borrowed from singleton SVFModule::svfModule.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00068">LLVMModule.h:68</a></div></div>
1477
1486
  <div class="ttc" id="aSVFModule_8h_html"><div class="ttname"><a href="SVFModule_8h.html">SVFModule.h</a></div></div>
1478
1487
  <div class="ttc" id="aclassSVF_1_1StInfo_html_a1a07c2b1415c29d7d70791c6dfe602a3"><div class="ttname"><a href="classSVF_1_1StInfo.html#a1a07c2b1415c29d7d70791c6dfe602a3">SVF::StInfo::setNumOfFieldsAndElems</a></div><div class="ttdeci">void setNumOfFieldsAndElems(u32_t nf, u32_t ne)</div><div class="ttdoc">Set number of fields and elements of an aggrate.</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00218">SVFType.h:218</a></div></div>
1479
- <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a9247b3240ea36913baf7e7aa6d4a37e8"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a9247b3240ea36913baf7e7aa6d4a37e8">SVF::LLVMModuleSet::loadExtModules</a></div><div class="ttdeci">void loadExtModules()</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00555">LLVMModule.cpp:555</a></div></div>
1480
1488
  <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a9e0c786488dfdc4605d4cbcf9943c85a"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a9e0c786488dfdc4605d4cbcf9943c85a">SVF::LLVMUtil::getGlobalRep</a></div><div class="ttdeci">const Value * getGlobalRep(const Value *val)</div><div class="ttdoc">find the unique defined global across multiple modules</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00390">LLVMUtil.h:390</a></div></div>
1481
- <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a8af6b911b728713f66f7c809d5c0fbf1"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a8af6b911b728713f66f7c809d5c0fbf1">SVF::LLVMModuleSet::addSVFMain</a></div><div class="ttdeci">void addSVFMain()</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00669">LLVMModule.cpp:669</a></div></div>
1482
- <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a8ba9092747108e0289014d52465a692d"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a8ba9092747108e0289014d52465a692d">SVF::LLVMModuleSet::initDomTree</a></div><div class="ttdeci">void initDomTree(SVFFunction *func, const Function *f)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00389">LLVMModule.cpp:389</a></div></div>
1489
+ <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a8af6b911b728713f66f7c809d5c0fbf1"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a8af6b911b728713f66f7c809d5c0fbf1">SVF::LLVMModuleSet::addSVFMain</a></div><div class="ttdeci">void addSVFMain()</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00677">LLVMModule.cpp:677</a></div></div>
1490
+ <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a8ba9092747108e0289014d52465a692d"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a8ba9092747108e0289014d52465a692d">SVF::LLVMModuleSet::initDomTree</a></div><div class="ttdeci">void initDomTree(SVFFunction *func, const Function *f)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00397">LLVMModule.cpp:397</a></div></div>
1483
1491
  <div class="ttc" id="anamespaceSVF_html_aa7a770b5dd5cd0e37d06a1088f252906"><div class="ttname"><a href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">SVF::Module</a></div><div class="ttdeci">llvm::Module Module</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00082">BasicTypes.h:82</a></div></div>
1484
1492
  <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_ab1b4c565ae6be788b934defc21a5cfaf"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#ab1b4c565ae6be788b934defc21a5cfaf">SVF::LLVMUtil::isVirtualCallSite</a></div><div class="ttdeci">bool isVirtualCallSite(const CallBase *cs)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00734">LLVMUtil.cpp:734</a></div></div>
1485
1493
  <div class="ttc" id="anamespaceSVF_html_a86863d104a3930b3a806935d92ddbf30"><div class="ttname"><a href="namespaceSVF.html#a86863d104a3930b3a806935d92ddbf30">SVF::SMDiagnostic</a></div><div class="ttdeci">llvm::SMDiagnostic SMDiagnostic</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00088">BasicTypes.h:88</a></div></div>
1486
1494
  <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_ae19e38054c55d5822dfc83a12f12aa60"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#ae19e38054c55d5822dfc83a12f12aa60">SVF::LLVMModuleSet::empty</a></div><div class="ttdeci">bool empty() const</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00318">LLVMModule.h:318</a></div></div>
1487
1495
  <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a22ef185e767ff76c098e75126c885400"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">SVF::SVFUtil::isExtCall</a></div><div class="ttdeci">bool isExtCall(const SVFFunction *fun)</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00309">SVFUtil.h:309</a></div></div>
1488
- <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a2fdc1bd61b8f6cdf6c07a5059b641b04"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a2fdc1bd61b8f6cdf6c07a5059b641b04">SVF::LLVMModuleSet::preProcessBCs</a></div><div class="ttdeci">static void preProcessBCs(std::vector&lt; std::string &gt; &amp;moduleNameVec)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00480">LLVMModule.cpp:480</a></div></div>
1496
+ <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a2fdc1bd61b8f6cdf6c07a5059b641b04"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a2fdc1bd61b8f6cdf6c07a5059b641b04">SVF::LLVMModuleSet::preProcessBCs</a></div><div class="ttdeci">static void preProcessBCs(std::vector&lt; std::string &gt; &amp;moduleNameVec)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00488">LLVMModule.cpp:488</a></div></div>
1489
1497
  <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a428bd75b33fab60988d8758090712f29"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a428bd75b33fab60988d8758090712f29">SVF::LLVMUtil::isArgOfUncalledFunction</a></div><div class="ttdeci">bool isArgOfUncalledFunction(const Value *val)</div><div class="ttdoc">Return true if the argument in a function does not have a caller.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00202">LLVMUtil.h:202</a></div></div>
1490
1498
  <div class="ttc" id="aclassSVF_1_1SVFCallInst_html_ac979b49b449b97b2a23f195cb107ec77"><div class="ttname"><a href="classSVF_1_1SVFCallInst.html#ac979b49b449b97b2a23f195cb107ec77">SVF::SVFCallInst::addArgument</a></div><div class="ttdeci">void addArgument(const SVFValue *a)</div><div class="ttdoc">attributes to be set only through Module builders e.g., LLVMModule</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00679">SVFValue.h:679</a></div></div>
1491
1499
  <div class="ttc" id="anamespaceSVF_html_ab34383ee87cd45eb485fa29db482ffef"><div class="ttname"><a href="namespaceSVF.html#ab34383ee87cd45eb485fa29db482ffef">SVF::PostDominatorTree</a></div><div class="ttdeci">llvm::PostDominatorTree PostDominatorTree</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00134">BasicTypes.h:134</a></div></div>
1492
- <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_aa8de934358332505d4805db137d8ec29"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#aa8de934358332505d4805db137d8ec29">SVF::LLVMModuleSet::collectArrayInfo</a></div><div class="ttdeci">StInfo * collectArrayInfo(const ArrayType *T)</div><div class="ttdoc">Collect the array info.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l01196">LLVMModule.cpp:1196</a></div></div>
1493
- <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a4ca8c4678a7fefe26372fc1f4b2880fd"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a4ca8c4678a7fefe26372fc1f4b2880fd">SVF::LLVMModuleSet::createSVFDataStructure</a></div><div class="ttdeci">void createSVFDataStructure()</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00165">LLVMModule.cpp:165</a></div></div>
1500
+ <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_aa8de934358332505d4805db137d8ec29"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#aa8de934358332505d4805db137d8ec29">SVF::LLVMModuleSet::collectArrayInfo</a></div><div class="ttdeci">StInfo * collectArrayInfo(const ArrayType *T)</div><div class="ttdoc">Collect the array info.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l01204">LLVMModule.cpp:1204</a></div></div>
1501
+ <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a4ca8c4678a7fefe26372fc1f4b2880fd"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a4ca8c4678a7fefe26372fc1f4b2880fd">SVF::LLVMModuleSet::createSVFDataStructure</a></div><div class="ttdeci">void createSVFDataStructure()</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00166">LLVMModule.cpp:166</a></div></div>
1494
1502
  <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a7f8e61cf5d838d7a2e862bc6955f16be"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a7f8e61cf5d838d7a2e862bc6955f16be">SVF::LLVMModuleSet::SVFValue2LLVMValue</a></div><div class="ttdeci">SVFValue2LLVMValueMap SVFValue2LLVMValue</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00086">LLVMModule.h:86</a></div></div>
1495
1503
  <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a72502f7f536418621485e90ab98c2016"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">SVF::SVFUtil::move</a></div><div class="ttdeci">constexpr std::remove_reference&lt; T &gt;::type &amp;&amp; move(T &amp;&amp;t) noexcept</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00670">SVFUtil.h:670</a></div></div>
1496
1504
  <div class="ttc" id="anamespaceSVF_html_a1c7c7ac12791c0ae386283c0a4f127ba"><div class="ttname"><a href="namespaceSVF.html#a1c7c7ac12791c0ae386283c0a4f127ba">SVF::raw_fd_ostream</a></div><div class="ttdeci">llvm::raw_fd_ostream raw_fd_ostream</div><div class="ttdoc">LLVM outputs.</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00257">BasicTypes.h:257</a></div></div>
1497
- <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a610a7777a48132caadec167c8109f044"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a610a7777a48132caadec167c8109f044">SVF::LLVMModuleSet::getLLVMType</a></div><div class="ttdeci">const Type * getLLVMType(const SVFType *T) const</div><div class="ttdoc">Get LLVM Type.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l01081">LLVMModule.cpp:1081</a></div></div>
1505
+ <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a610a7777a48132caadec167c8109f044"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a610a7777a48132caadec167c8109f044">SVF::LLVMModuleSet::getLLVMType</a></div><div class="ttdeci">const Type * getLLVMType(const SVFType *T) const</div><div class="ttdoc">Get LLVM Type.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l01089">LLVMModule.cpp:1089</a></div></div>
1498
1506
  <div class="ttc" id="aclassSVF_1_1SVFLoopAndDomInfo_html_ae37546be7304c66b4eca2654d995eaa7"><div class="ttname"><a href="classSVF_1_1SVFLoopAndDomInfo.html#ae37546be7304c66b4eca2654d995eaa7">SVF::SVFLoopAndDomInfo::getDomFrontierMap</a></div><div class="ttdeci">const Map&lt; const SVFBasicBlock *, BBSet &gt; &amp; getDomFrontierMap() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00072">SVFValue.h:72</a></div></div>
1499
1507
  <div class="ttc" id="aclassSVF_1_1StInfo_html_a03bfeee0406c7e54557e74f3a8e848b7"><div class="ttname"><a href="classSVF_1_1StInfo.html#a03bfeee0406c7e54557e74f3a8e848b7">SVF::StInfo::getFlattenElementTypes</a></div><div class="ttdeci">std::vector&lt; const SVFType * &gt; &amp; getFlattenElementTypes()</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00188">SVFType.h:188</a></div></div>
1500
1508
  <div class="ttc" id="anamespaceSVF_html_a7e230c0cba2e3a7c2e5a5f2ee7d88af9"><div class="ttname"><a href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">SVF::Constant</a></div><div class="ttdeci">llvm::Constant Constant</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00122">BasicTypes.h:122</a></div></div>
@@ -1506,18 +1514,18 @@ $(function() {
1506
1514
  <div class="ttc" id="anamespaceSVF_html_a4f21e91ff8eaea5207afe5c60dbd78d7"><div class="ttname"><a href="namespaceSVF.html#a4f21e91ff8eaea5207afe5c60dbd78d7">SVF::OrderedSet</a></div><div class="ttdeci">std::set&lt; Key, Compare, Allocator &gt; OrderedSet</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00106">SVFType.h:106</a></div></div>
1507
1515
  <div class="ttc" id="aclassSVF_1_1Options_html_a53f783c80f368bcdca6c7620229d6f8e"><div class="ttname"><a href="classSVF_1_1Options.html#a53f783c80f368bcdca6c7620229d6f8e">SVF::Options::Graphtxt</a></div><div class="ttdeci">static const Option&lt; std::string &gt; Graphtxt</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00213">Options.h:213</a></div></div>
1508
1516
  <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_ab671d5bb9ca5761e2b438a4d4da229cf"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#ab671d5bb9ca5761e2b438a4d4da229cf">SVF::LLVMModuleSet::addFunctionMap</a></div><div class="ttdeci">void addFunctionMap(const Function *func, SVFFunction *svfFunc)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00145">LLVMModule.h:145</a></div></div>
1509
- <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_ac6a5540354696f4c9170e0a5832ba70e"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#ac6a5540354696f4c9170e0a5832ba70e">SVF::LLVMModuleSet::initSVFFunction</a></div><div class="ttdeci">void initSVFFunction()</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00318">LLVMModule.cpp:318</a></div></div>
1517
+ <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_ac6a5540354696f4c9170e0a5832ba70e"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#ac6a5540354696f4c9170e0a5832ba70e">SVF::LLVMModuleSet::initSVFFunction</a></div><div class="ttdeci">void initSVFFunction()</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00326">LLVMModule.cpp:326</a></div></div>
1510
1518
  <div class="ttc" id="anamespaceSVF_html_a3436a988bf80c021cd8022fb445b66d5"><div class="ttname"><a href="namespaceSVF.html#a3436a988bf80c021cd8022fb445b66d5">SVF::succ_const_iterator</a></div><div class="ttdeci">llvm::succ_const_iterator succ_const_iterator</div><div class="ttdoc">LLVM Iterators.</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00269">BasicTypes.h:269</a></div></div>
1511
1519
  <div class="ttc" id="aclassSVF_1_1SVFModule_html"><div class="ttname"><a href="classSVF_1_1SVFModule.html">SVF::SVFModule</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00041">SVFModule.h:41</a></div></div>
1512
1520
  <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>
1513
- <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a25821b0feeb3b08e00ec9d444520b727"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a25821b0feeb3b08e00ec9d444520b727">SVF::LLVMModuleSet::getSVFConstantData</a></div><div class="ttdeci">SVFConstantData * getSVFConstantData(const ConstantData *cd)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00945">LLVMModule.cpp:945</a></div></div>
1521
+ <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a25821b0feeb3b08e00ec9d444520b727"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a25821b0feeb3b08e00ec9d444520b727">SVF::LLVMModuleSet::getSVFConstantData</a></div><div class="ttdeci">SVFConstantData * getSVFConstantData(const ConstantData *cd)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00953">LLVMModule.cpp:953</a></div></div>
1514
1522
  <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 &amp; 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>
1515
1523
  <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>
1516
1524
  <div class="ttc" id="aclassSVF_1_1SVFIntegerType_html"><div class="ttname"><a href="classSVF_1_1SVFIntegerType.html">SVF::SVFIntegerType</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00357">SVFType.h:357</a></div></div>
1517
1525
  <div class="ttc" id="aclassSVF_1_1SVFStat_html_ae89293bc063bdc74a988e9c37c70321e"><div class="ttname"><a href="classSVF_1_1SVFStat.html#ae89293bc063bdc74a988e9c37c70321e">SVF::SVFStat::timeOfBuildingSymbolTable</a></div><div class="ttdeci">static double timeOfBuildingSymbolTable</div><div class="ttdef"><b>Definition:</b> <a href="SVFStat_8h_source.html#l00091">SVFStat.h:91</a></div></div>
1518
1526
  <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a3d34fcdfc98add848a34fd5259c11eb2"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a3d34fcdfc98add848a34fd5259c11eb2">SVF::LLVMUtil::getDefFunForMultipleModule</a></div><div class="ttdeci">const Function * getDefFunForMultipleModule(const Function *fun)</div><div class="ttdoc">Get the definition of a function across multiple modules.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00058">LLVMUtil.h:58</a></div></div>
1519
1527
  <div class="ttc" id="aclassSVF_1_1SVFType_html_a3ddabbd763acaaca28cacbabe5bc7f3b"><div class="ttname"><a href="classSVF_1_1SVFType.html#a3ddabbd763acaaca28cacbabe5bc7f3b">SVF::SVFType::setPointerTo</a></div><div class="ttdeci">void setPointerTo(const SVFPointerType *ty)</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00291">SVFType.h:291</a></div></div>
1520
- <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a74256f36f0fdc242df9729906c34efbc"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a74256f36f0fdc242df9729906c34efbc">SVF::LLVMModuleSet::getOtherSVFConstant</a></div><div class="ttdeci">SVFConstant * getOtherSVFConstant(const Constant *oc)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00992">LLVMModule.cpp:992</a></div></div>
1528
+ <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a74256f36f0fdc242df9729906c34efbc"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a74256f36f0fdc242df9729906c34efbc">SVF::LLVMModuleSet::getOtherSVFConstant</a></div><div class="ttdeci">SVFConstant * getOtherSVFConstant(const Constant *oc)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l01000">LLVMModule.cpp:1000</a></div></div>
1521
1529
  <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html">SVF::LLVMModuleSet</a></div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00043">LLVMModule.h:43</a></div></div>
1522
1530
  <div class="ttc" id="aclassSVF_1_1SVFFunction_html_a0d5031bd11b6372803082111ec2cb4f6"><div class="ttname"><a href="classSVF_1_1SVFFunction.html#a0d5031bd11b6372803082111ec2cb4f6">SVF::SVFFunction::addBasicBlock</a></div><div class="ttdeci">void addBasicBlock(const SVFBasicBlock *bb)</div><div class="ttdoc">all formal arguments of this function</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00302">SVFValue.h:302</a></div></div>
1523
1531
  <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_ae74f307b6f96950ceedb2c375ef1c3a3"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#ae74f307b6f96950ceedb2c375ef1c3a3">SVF::LLVMModuleSet::getSVFInstruction</a></div><div class="ttdeci">SVFInstruction * getSVFInstruction(const Instruction *inst) const</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00209">LLVMModule.h:209</a></div></div>
@@ -1529,24 +1537,24 @@ $(function() {
1529
1537
  <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a9bd6f54920929e5ad35102ba2f2223da"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a9bd6f54920929e5ad35102ba2f2223da">SVF::LLVMUtil::getFunReachableBBs</a></div><div class="ttdeci">void getFunReachableBBs(const Function *svfFun, std::vector&lt; const SVFBasicBlock * &gt; &amp;bbs)</div><div class="ttdoc">Get reachable basic block from function entry.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00071">LLVMUtil.cpp:71</a></div></div>
1530
1538
  <div class="ttc" id="aclassSVF_1_1SVFBasicBlock_html_a38f8fdd93ef7222f408cbbb2a98a1cd5"><div class="ttname"><a href="classSVF_1_1SVFBasicBlock.html#a38f8fdd93ef7222f408cbbb2a98a1cd5">SVF::SVFBasicBlock::addPredBasicBlock</a></div><div class="ttdeci">void addPredBasicBlock(const SVFBasicBlock *pred)</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00518">SVFValue.h:518</a></div></div>
1531
1539
  <div class="ttc" id="aclassSVF_1_1SVFLoopAndDomInfo_html_ad07f95e790b5c3a50c864155aa20a083"><div class="ttname"><a href="classSVF_1_1SVFLoopAndDomInfo.html#ad07f95e790b5c3a50c864155aa20a083">SVF::SVFLoopAndDomInfo::getPostDomTreeMap</a></div><div class="ttdeci">const Map&lt; const SVFBasicBlock *, BBSet &gt; &amp; getPostDomTreeMap() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00105">SVFValue.h:105</a></div></div>
1532
- <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a7d61f479f52e1dc71a4ae7a4d62f3b6a"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a7d61f479f52e1dc71a4ae7a4d62f3b6a">SVF::LLVMModuleSet::setValueAttr</a></div><div class="ttdeci">void setValueAttr(const Value *val, SVFValue *value)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00919">LLVMModule.cpp:919</a></div></div>
1540
+ <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a7d61f479f52e1dc71a4ae7a4d62f3b6a"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a7d61f479f52e1dc71a4ae7a4d62f3b6a">SVF::LLVMModuleSet::setValueAttr</a></div><div class="ttdeci">void setValueAttr(const Value *val, SVFValue *value)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00927">LLVMModule.cpp:927</a></div></div>
1533
1541
  <div class="ttc" id="aclassSVF_1_1SVFLoopAndDomInfo_html_ad478ac88bc07cf4d6d0ad3517b2c4ab3"><div class="ttname"><a href="classSVF_1_1SVFLoopAndDomInfo.html#ad478ac88bc07cf4d6d0ad3517b2c4ab3">SVF::SVFLoopAndDomInfo::BBSet</a></div><div class="ttdeci">Set&lt; const SVFBasicBlock * &gt; BBSet</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00055">SVFValue.h:55</a></div></div>
1534
1542
  <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a4c94a6c02fb89c1a1604c87414956acd"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a4c94a6c02fb89c1a1604c87414956acd">SVF::LLVMUtil::getPrevInsts</a></div><div class="ttdeci">void getPrevInsts(const Instruction *curInst, std::vector&lt; const SVFInstruction * &gt; &amp;instList)</div><div class="ttdoc">Get the previous instructions following control flow.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00306">LLVMUtil.cpp:306</a></div></div>
1535
1543
  <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a7b8b93fec1dc8c63c0a5837a85b99129"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a7b8b93fec1dc8c63c0a5837a85b99129">SVF::LLVMUtil::llvmToString</a></div><div class="ttdeci">std::string llvmToString(const T &amp;val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00486">LLVMUtil.h:486</a></div></div>
1536
1544
  <div class="ttc" id="aSVFFileSystem_8cpp_html_ab25baccb41e3b67ef0bfdaa1336c9649"><div class="ttname"><a href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a></div><div class="ttdeci">#define F(f)</div></div>
1537
1545
  <div class="ttc" id="aclassSVF_1_1StInfo_html_aae0736a5e99b11571af52e28500a6f9c"><div class="ttname"><a href="classSVF_1_1StInfo.html#aae0736a5e99b11571af52e28500a6f9c">SVF::StInfo::addFldWithType</a></div><div class="ttdeci">void addFldWithType(u32_t fldIdx, const SVFType *type, u32_t elemIdx)</div><div class="ttdoc">Add field index and element index and their corresponding type.</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8cpp_source.html#l00008">SVFValue.cpp:8</a></div></div>
1538
- <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_afdd77bc1fca91f70b2ec362f1dacd392"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#afdd77bc1fca91f70b2ec362f1dacd392">SVF::LLVMModuleSet::getSVFValue</a></div><div class="ttdeci">SVFValue * getSVFValue(const Value *value)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l01058">LLVMModule.cpp:1058</a></div></div>
1539
- <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a1f6cc76c996a0577b20b8cedd83fff92"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a1f6cc76c996a0577b20b8cedd83fff92">SVF::LLVMModuleSet::collectTypeInfo</a></div><div class="ttdeci">StInfo * collectTypeInfo(const Type *ty)</div><div class="ttdoc">Collect a type info.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l01115">LLVMModule.cpp:1115</a></div></div>
1546
+ <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_afdd77bc1fca91f70b2ec362f1dacd392"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#afdd77bc1fca91f70b2ec362f1dacd392">SVF::LLVMModuleSet::getSVFValue</a></div><div class="ttdeci">SVFValue * getSVFValue(const Value *value)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l01066">LLVMModule.cpp:1066</a></div></div>
1547
+ <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a1f6cc76c996a0577b20b8cedd83fff92"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a1f6cc76c996a0577b20b8cedd83fff92">SVF::LLVMModuleSet::collectTypeInfo</a></div><div class="ttdeci">StInfo * collectTypeInfo(const Type *ty)</div><div class="ttdoc">Collect a type info.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l01123">LLVMModule.cpp:1123</a></div></div>
1540
1548
  <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a067661e0049314779a44c9600420820f"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a067661e0049314779a44c9600420820f">SVF::LLVMModuleSet::LLVMType2SVFType</a></div><div class="ttdeci">LLVMType2SVFTypeMap LLVMType2SVFType</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00087">LLVMModule.h:87</a></div></div>
1541
1549
  <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a4638a12f5481dff947b59cf8353e619b"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a4638a12f5481dff947b59cf8353e619b">SVF::LLVMUtil::isIntrinsicFun</a></div><div class="ttdeci">bool isIntrinsicFun(const Function *func)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00192">LLVMUtil.cpp:192</a></div></div>
1542
- <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a8b5f24c873db1f6a0614d1dac48bb4bb"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a8b5f24c873db1f6a0614d1dac48bb4bb">SVF::LLVMModuleSet::prePassSchedule</a></div><div class="ttdeci">void prePassSchedule()</div><div class="ttdoc">Invoke llvm passes to modify module.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00456">LLVMModule.cpp:456</a></div></div>
1550
+ <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a8b5f24c873db1f6a0614d1dac48bb4bb"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a8b5f24c873db1f6a0614d1dac48bb4bb">SVF::LLVMModuleSet::prePassSchedule</a></div><div class="ttdeci">void prePassSchedule()</div><div class="ttdoc">Invoke llvm passes to modify module.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00464">LLVMModule.cpp:464</a></div></div>
1543
1551
  <div class="ttc" id="aclassSVF_1_1SVFArgument_html"><div class="ttname"><a href="classSVF_1_1SVFArgument.html">SVF::SVFArgument</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00866">SVFValue.h:866</a></div></div>
1544
1552
  <div class="ttc" id="anamespaceSVF_html_ad49e4222ba46d9490b87a80df8b46800"><div class="ttname"><a href="namespaceSVF.html#ad49e4222ba46d9490b87a80df8b46800">SVF::ConstantFP</a></div><div class="ttdeci">llvm::ConstantFP ConstantFP</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00124">BasicTypes.h:124</a></div></div>
1545
1553
  <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_afbd60d5443c7fa1448813d00bb5d0fa7"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#afbd60d5443c7fa1448813d00bb5d0fa7">SVF::LLVMUtil::getNextInsts</a></div><div class="ttdeci">void getNextInsts(const Instruction *curInst, std::vector&lt; const SVFInstruction * &gt; &amp;instList)</div><div class="ttdoc">Get the next instructions following control flow.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00277">LLVMUtil.cpp:277</a></div></div>
1546
1554
  <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a023ea6f179433fa4d007c98ddc38e3c5"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a023ea6f179433fa4d007c98ddc38e3c5">SVF::LLVMModuleSet::addOtherValueMap</a></div><div class="ttdeci">void addOtherValueMap(const Value *ov, SVFOtherValue *svfov)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00180">LLVMModule.h:180</a></div></div>
1547
1555
  <div class="ttc" id="aclassSVF_1_1SVFOtherType_html"><div class="ttname"><a href="classSVF_1_1SVFOtherType.html">SVF::SVFOtherType</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00476">SVFType.h:476</a></div></div>
1548
1556
  <div class="ttc" id="aSVFType_8h_html_a173ce1b9b505fdadf5613b663749d3b0"><div class="ttname"><a href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a></div><div class="ttdeci">#define DBOUT(TYPE, X)</div><div class="ttdoc">LLVM debug macros, define type of your DBUG model of each pass.</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00549">SVFType.h:549</a></div></div>
1549
- <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a024f5de163fde6f63cb2d762b4b28d8a"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a024f5de163fde6f63cb2d762b4b28d8a">SVF::LLVMModuleSet::createSVFFunction</a></div><div class="ttdeci">void createSVFFunction(const Function *func)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00239">LLVMModule.cpp:239</a></div></div>
1557
+ <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a024f5de163fde6f63cb2d762b4b28d8a"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a024f5de163fde6f63cb2d762b4b28d8a">SVF::LLVMModuleSet::createSVFFunction</a></div><div class="ttdeci">void createSVFFunction(const Function *func)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00247">LLVMModule.cpp:247</a></div></div>
1550
1558
  <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#l00595">SVFValue.h:595</a></div></div>
1551
1559
  <div class="ttc" id="aclassSVF_1_1SymbolTableBuilder_html_aef0bb1e88d0b69313c673318f7b7cb5f"><div class="ttname"><a href="classSVF_1_1SymbolTableBuilder.html#aef0bb1e88d0b69313c673318f7b7cb5f">SVF::SymbolTableBuilder::buildMemModel</a></div><div class="ttdeci">void buildMemModel(SVFModule *svfModule)</div><div class="ttdoc">Start building memory model.</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableBuilder_8cpp_source.html#l00074">SymbolTableBuilder.cpp:74</a></div></div>
1552
1560
  <div class="ttc" id="aclassSVF_1_1SVFModule_html_a48d7f0643bb228701dcabb88ef541fca"><div class="ttname"><a href="classSVF_1_1SVFModule.html#a48d7f0643bb228701dcabb88ef541fca">SVF::SVFModule::addOtherValue</a></div><div class="ttdeci">void addOtherValue(SVFOtherValue *ov)</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00125">SVFModule.h:125</a></div></div>
@@ -1568,7 +1576,7 @@ $(function() {
1568
1576
  <div class="ttc" id="anamespaceSVF_html_aacffd97ab4cb45aeae2e67ec479889aa"><div class="ttname"><a href="namespaceSVF.html#aacffd97ab4cb45aeae2e67ec479889aa">SVF::GlobalIFunc</a></div><div class="ttdeci">llvm::GlobalIFunc GlobalIFunc</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00127">BasicTypes.h:127</a></div></div>
1569
1577
  <div class="ttc" id="aclassSVF_1_1SVFModule_html_acaba1ff38ed1fdd8a9a1251a1b36be92"><div class="ttname"><a href="classSVF_1_1SVFModule.html#acaba1ff38ed1fdd8a9a1251a1b36be92">SVF::SVFModule::setModuleIdentifier</a></div><div class="ttdeci">void setModuleIdentifier(const std::string &amp;moduleIdentifier)</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00089">SVFModule.h:89</a></div></div>
1570
1578
  <div class="ttc" id="aLLVMModule_8cpp_html_aa18802f2f60ef8030c66a42f20f285af"><div class="ttname"><a href="LLVMModule_8cpp.html#aa18802f2f60ef8030c66a42f20f285af">SVF_GLOBAL_CTORS</a></div><div class="ttdeci">#define SVF_GLOBAL_CTORS</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00069">LLVMModule.cpp:69</a></div></div>
1571
- <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a20162d2894d6a12ba29410311fba4002"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a20162d2894d6a12ba29410311fba4002">SVF::LLVMModuleSet::initSVFBasicBlock</a></div><div class="ttdeci">void initSVFBasicBlock(const Function *func)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00336">LLVMModule.cpp:336</a></div></div>
1579
+ <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a20162d2894d6a12ba29410311fba4002"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a20162d2894d6a12ba29410311fba4002">SVF::LLVMModuleSet::initSVFBasicBlock</a></div><div class="ttdeci">void initSVFBasicBlock(const Function *func)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00344">LLVMModule.cpp:344</a></div></div>
1572
1580
  <!-- start footer part -->
1573
1581
  <hr class="footer"/><address class="footer"><small>
1574
1582
  Generated by &#160;<a href="http://www.doxygen.org/index.html">