svf-tools 1.0.899 → 1.0.900

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.
@@ -302,1349 +302,1344 @@ $(function() {
302
302
  <div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(func-&gt;getFunctionType())),</div>
303
303
  <div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; func-&gt;isDeclaration(), <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a4638a12f5481dff947b59cf8353e619b">LLVMUtil::isIntrinsicFun</a>(func),</div>
304
304
  <div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; func-&gt;hasAddressTaken(), func-&gt;isVarArg(), <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFLoopAndDomInfo.html">SVFLoopAndDomInfo</a>);</div>
305
- <div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; svfFunc-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a8325774df9d65d78ef6a66fef59b9a97">setName</a>(func-&gt;getName().str());</div>
306
- <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#a8a0fe93cc13b799fc28540fb312573c6">addFunctionSet</a>(svfFunc);</div>
307
- <div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1LLVMModuleSet.html#a7968a00d41166d18acb684052ed1eed8">ExtFun2Annotations</a>.find(func) != <a class="code" href="classSVF_1_1LLVMModuleSet.html#a7968a00d41166d18acb684052ed1eed8">ExtFun2Annotations</a>.end())</div>
308
- <div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; svfFunc-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#a2731567cd10e2c499c812c33d01a412e">setAnnotations</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a7968a00d41166d18acb684052ed1eed8">ExtFun2Annotations</a>[func]);</div>
309
- <div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#ab671d5bb9ca5761e2b438a4d4da229cf">addFunctionMap</a>(func, svfFunc);</div>
310
- <div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; </div>
311
- <div class="line"><a name="l00246"></a><span class="lineno"> 246</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>
312
- <div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; {</div>
313
- <div class="line"><a name="l00248"></a><span class="lineno"> 248</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>
314
- <div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(arg.getType()), svfFunc, arg.getArgNo(),</div>
315
- <div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a428bd75b33fab60988d8758090712f29">LLVMUtil::isArgOfUncalledFunction</a>(&amp;arg));</div>
316
- <div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="comment">// Setting up arg name</span></div>
317
- <div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="keywordflow">if</span> (arg.hasName())</div>
318
- <div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; svfarg-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a8325774df9d65d78ef6a66fef59b9a97">setName</a>(arg.getName().str());</div>
319
- <div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keywordflow">else</span></div>
320
- <div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; svfarg-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a8325774df9d65d78ef6a66fef59b9a97">setName</a>(std::to_string(arg.getArgNo()));</div>
321
- <div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; </div>
322
- <div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; svfFunc-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#ad865b8440a6e0d5d212798d2213e1e9c">addArgument</a>(svfarg);</div>
323
- <div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5595ec3f7582934dc499770825bf5373">addArgumentMap</a>(&amp;arg, svfarg);</div>
324
- <div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; }</div>
325
- <div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; </div>
326
- <div class="line"><a name="l00261"></a><span class="lineno"> 261</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>
327
- <div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; {</div>
328
- <div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* svfBB =</div>
329
- <div class="line"><a name="l00264"></a><span class="lineno"> 264</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>
330
- <div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keywordflow">if</span> (bb.hasName())</div>
331
- <div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; svfBB-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a8325774df9d65d78ef6a66fef59b9a97">setName</a>(bb.getName().str());</div>
332
- <div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; svfFunc-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#a0d5031bd11b6372803082111ec2cb4f6">addBasicBlock</a>(svfBB);</div>
333
- <div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a3eaadb33cd21d0bd868526b5ddb051d9">addBasicBlockMap</a>(&amp;bb, svfBB);</div>
334
- <div class="line"><a name="l00269"></a><span class="lineno"> 269</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>
335
- <div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; {</div>
336
- <div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfInst = <span class="keyword">nullptr</span>;</div>
337
- <div class="line"><a name="l00272"></a><span class="lineno"> 272</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>
338
- <div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; {</div>
339
- <div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1cppUtil.html#aab1dce633f9a03796c208b6fba2bd2b4">cppUtil::isVirtualCallSite</a>(call))</div>
340
- <div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; svfInst = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFVirtualCallInst.html">SVFVirtualCallInst</a>(</div>
305
+ <div class="line"><a name="l00240"></a><span class="lineno"> 240</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>
306
+ <div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1LLVMModuleSet.html#a7968a00d41166d18acb684052ed1eed8">ExtFun2Annotations</a>.find(func) != <a class="code" href="classSVF_1_1LLVMModuleSet.html#a7968a00d41166d18acb684052ed1eed8">ExtFun2Annotations</a>.end())</div>
307
+ <div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; svfFunc-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#a2731567cd10e2c499c812c33d01a412e">setAnnotations</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a7968a00d41166d18acb684052ed1eed8">ExtFun2Annotations</a>[func]);</div>
308
+ <div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#ab671d5bb9ca5761e2b438a4d4da229cf">addFunctionMap</a>(func, svfFunc);</div>
309
+ <div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; </div>
310
+ <div class="line"><a name="l00245"></a><span class="lineno"> 245</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="l00246"></a><span class="lineno"> 246</span>&#160; {</div>
312
+ <div class="line"><a name="l00247"></a><span class="lineno"> 247</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="l00248"></a><span class="lineno"> 248</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="l00249"></a><span class="lineno"> 249</span>&#160; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a428bd75b33fab60988d8758090712f29">LLVMUtil::isArgOfUncalledFunction</a>(&amp;arg));</div>
315
+ <div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="comment">// Setting up arg name</span></div>
316
+ <div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keywordflow">if</span> (!arg.hasName())</div>
317
+ <div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; svfarg-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a8325774df9d65d78ef6a66fef59b9a97">setName</a>(std::to_string(arg.getArgNo()));</div>
318
+ <div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; </div>
319
+ <div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; svfFunc-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#ad865b8440a6e0d5d212798d2213e1e9c">addArgument</a>(svfarg);</div>
320
+ <div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5595ec3f7582934dc499770825bf5373">addArgumentMap</a>(&amp;arg, svfarg);</div>
321
+ <div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; }</div>
322
+ <div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; </div>
323
+ <div class="line"><a name="l00258"></a><span class="lineno"> 258</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>
324
+ <div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; {</div>
325
+ <div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* svfBB =</div>
326
+ <div class="line"><a name="l00261"></a><span class="lineno"> 261</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>
327
+ <div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; svfFunc-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#a0d5031bd11b6372803082111ec2cb4f6">addBasicBlock</a>(svfBB);</div>
328
+ <div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a3eaadb33cd21d0bd868526b5ddb051d9">addBasicBlockMap</a>(&amp;bb, svfBB);</div>
329
+ <div class="line"><a name="l00264"></a><span class="lineno"> 264</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>
330
+ <div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; {</div>
331
+ <div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfInst = <span class="keyword">nullptr</span>;</div>
332
+ <div class="line"><a name="l00267"></a><span class="lineno"> 267</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>
333
+ <div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; {</div>
334
+ <div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1cppUtil.html#aab1dce633f9a03796c208b6fba2bd2b4">cppUtil::isVirtualCallSite</a>(call))</div>
335
+ <div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; svfInst = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFVirtualCallInst.html">SVFVirtualCallInst</a>(</div>
336
+ <div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(call-&gt;getType()), svfBB,</div>
337
+ <div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; call-&gt;getFunctionType()-&gt;isVarArg(),</div>
338
+ <div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; inst.isTerminator());</div>
339
+ <div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keywordflow">else</span></div>
340
+ <div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; svfInst = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFCallInst.html">SVFCallInst</a>(</div>
341
341
  <div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(call-&gt;getType()), svfBB,</div>
342
342
  <div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; call-&gt;getFunctionType()-&gt;isVarArg(),</div>
343
343
  <div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; inst.isTerminator());</div>
344
- <div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keywordflow">else</span></div>
345
- <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_1SVFCallInst.html">SVFCallInst</a>(</div>
346
- <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>
347
- <div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; call-&gt;getFunctionType()-&gt;isVarArg(),</div>
348
- <div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; inst.isTerminator());</div>
349
- <div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; }</div>
350
- <div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keywordflow">else</span></div>
351
- <div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; {</div>
352
- <div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; svfInst =</div>
353
- <div class="line"><a name="l00288"></a><span class="lineno"> 288</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>
354
- <div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; svfBB, inst.isTerminator(),</div>
355
- <div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; SVFUtil::isa&lt;ReturnInst&gt;(inst));</div>
356
- <div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; }</div>
357
- <div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; </div>
358
- <div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; svfBB-&gt;<a class="code" href="classSVF_1_1SVFBasicBlock.html#ac1b15d8f9c2499add8dbc889ae5cab65">addInstruction</a>(svfInst);</div>
359
- <div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a172084437a8450314a17f7085a32b5d2">addInstructionMap</a>(&amp;inst, svfInst);</div>
360
- <div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; }</div>
361
- <div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; }</div>
362
- <div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160;}</div>
363
- <div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; </div>
364
- <div class="line"><a name="l00299"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#ac6a5540354696f4c9170e0a5832ba70e"> 299</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#ac6a5540354696f4c9170e0a5832ba70e">LLVMModuleSet::initSVFFunction</a>()</div>
365
- <div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160;{</div>
366
- <div class="line"><a name="l00301"></a><span class="lineno"> 301</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>
367
- <div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; {</div>
368
- <div class="line"><a name="l00304"></a><span class="lineno"> 304</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>
369
- <div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; {</div>
370
- <div class="line"><a name="l00306"></a><span class="lineno"> 306</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>
371
- <div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a20162d2894d6a12ba29410311fba4002">initSVFBasicBlock</a>(&amp;f);</div>
372
- <div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; </div>
373
- <div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">SVFUtil::isExtCall</a>(svffun))</div>
374
- <div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; {</div>
375
- <div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a8ba9092747108e0289014d52465a692d">initDomTree</a>(svffun, &amp;f);</div>
376
- <div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; }</div>
377
- <div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; }</div>
378
- <div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; }</div>
379
- <div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160;}</div>
380
- <div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; </div>
381
- <div class="line"><a name="l00317"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a20162d2894d6a12ba29410311fba4002"> 317</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>
382
- <div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160;{</div>
383
- <div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *svfFun = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a50fc24901350df9db890ba16a9b87e33">getSVFFunction</a>(func);</div>
384
- <div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keywordflow">for</span> (Function::const_iterator bit = func-&gt;begin(), ebit = func-&gt;end(); bit != ebit; ++bit)</div>
385
- <div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; {</div>
386
- <div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* bb = &amp;*bit;</div>
387
- <div class="line"><a name="l00323"></a><span class="lineno"> 323</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>
388
- <div class="line"><a name="l00324"></a><span class="lineno"> 324</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>
344
+ <div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; }</div>
345
+ <div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">else</span></div>
346
+ <div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; {</div>
347
+ <div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; svfInst =</div>
348
+ <div class="line"><a name="l00283"></a><span class="lineno"> 283</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>
349
+ <div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; svfBB, inst.isTerminator(),</div>
350
+ <div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; SVFUtil::isa&lt;ReturnInst&gt;(inst));</div>
351
+ <div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; }</div>
352
+ <div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; </div>
353
+ <div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; svfBB-&gt;<a class="code" href="classSVF_1_1SVFBasicBlock.html#ac1b15d8f9c2499add8dbc889ae5cab65">addInstruction</a>(svfInst);</div>
354
+ <div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a172084437a8450314a17f7085a32b5d2">addInstructionMap</a>(&amp;inst, svfInst);</div>
355
+ <div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; }</div>
356
+ <div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; }</div>
357
+ <div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160;}</div>
358
+ <div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; </div>
359
+ <div class="line"><a name="l00294"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#ac6a5540354696f4c9170e0a5832ba70e"> 294</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#ac6a5540354696f4c9170e0a5832ba70e">LLVMModuleSet::initSVFFunction</a>()</div>
360
+ <div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;{</div>
361
+ <div class="line"><a name="l00296"></a><span class="lineno"> 296</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>
362
+ <div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; {</div>
363
+ <div class="line"><a name="l00299"></a><span class="lineno"> 299</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>
364
+ <div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; {</div>
365
+ <div class="line"><a name="l00301"></a><span class="lineno"> 301</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>
366
+ <div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a20162d2894d6a12ba29410311fba4002">initSVFBasicBlock</a>(&amp;f);</div>
367
+ <div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; </div>
368
+ <div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">SVFUtil::isExtCall</a>(svffun))</div>
369
+ <div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; {</div>
370
+ <div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a8ba9092747108e0289014d52465a692d">initDomTree</a>(svffun, &amp;f);</div>
371
+ <div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; }</div>
372
+ <div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; }</div>
373
+ <div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; }</div>
374
+ <div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;}</div>
375
+ <div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; </div>
376
+ <div class="line"><a name="l00312"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a20162d2894d6a12ba29410311fba4002"> 312</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>
377
+ <div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;{</div>
378
+ <div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *svfFun = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a50fc24901350df9db890ba16a9b87e33">getSVFFunction</a>(func);</div>
379
+ <div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="keywordflow">for</span> (Function::const_iterator bit = func-&gt;begin(), ebit = func-&gt;end(); bit != ebit; ++bit)</div>
380
+ <div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; {</div>
381
+ <div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* bb = &amp;*bit;</div>
382
+ <div class="line"><a name="l00318"></a><span class="lineno"> 318</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>
383
+ <div class="line"><a name="l00319"></a><span class="lineno"> 319</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>
384
+ <div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; {</div>
385
+ <div class="line"><a name="l00321"></a><span class="lineno"> 321</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>
386
+ <div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; svfbb-&gt;<a class="code" href="classSVF_1_1SVFBasicBlock.html#abfe3a1ce5fa364d9db7cd2d0e6a144ff">addSuccBasicBlock</a>(svf_scc_bb);</div>
387
+ <div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; }</div>
388
+ <div class="line"><a name="l00324"></a><span class="lineno"> 324</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>
389
389
  <div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; {</div>
390
- <div class="line"><a name="l00326"></a><span class="lineno"> 326</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>
391
- <div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; svfbb-&gt;<a class="code" href="classSVF_1_1SVFBasicBlock.html#abfe3a1ce5fa364d9db7cd2d0e6a144ff">addSuccBasicBlock</a>(svf_scc_bb);</div>
390
+ <div class="line"><a name="l00326"></a><span class="lineno"> 326</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>
391
+ <div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; svfbb-&gt;<a class="code" href="classSVF_1_1SVFBasicBlock.html#a38f8fdd93ef7222f408cbbb2a98a1cd5">addPredBasicBlock</a>(svf_pred_bb);</div>
392
392
  <div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; }</div>
393
- <div class="line"><a name="l00329"></a><span class="lineno"> 329</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>
394
- <div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; {</div>
395
- <div class="line"><a name="l00331"></a><span class="lineno"> 331</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>
396
- <div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; svfbb-&gt;<a class="code" href="classSVF_1_1SVFBasicBlock.html#a38f8fdd93ef7222f408cbbb2a98a1cd5">addPredBasicBlock</a>(svf_pred_bb);</div>
397
- <div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; }</div>
398
- <div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; </div>
399
- <div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keywordflow">if</span> (svfbb-&gt;<a class="code" href="classSVF_1_1SVFBasicBlock.html#a66f51cd41e93ad055c4a0c2874e73fae">getSuccessors</a>().empty())</div>
400
- <div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; {</div>
401
- <div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#abb4b5ed04ec70a2e7fca8198132370cf">LLVMUtil::basicBlockHasRetInst</a>(bb))</div>
402
- <div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; {</div>
403
- <div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; svfFun-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#abd458bb5a035d3f7db32fac5f01b57f3">setExitBlock</a>(svfbb);</div>
404
- <div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; }</div>
405
- <div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; }</div>
406
- <div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; </div>
407
- <div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <span class="keywordflow">for</span> (BasicBlock::const_iterator iit = bb-&gt;begin(), eiit = bb-&gt;end(); iit != eiit; ++iit)</div>
408
- <div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; {</div>
409
- <div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst = &amp;*iit;</div>
410
- <div class="line"><a name="l00347"></a><span class="lineno"> 347</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>
411
- <div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; {</div>
412
- <div class="line"><a name="l00349"></a><span class="lineno"> 349</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>
413
- <div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <a class="code" href="classSVF_1_1SVFCallInst.html">SVFCallInst</a>* svfcall = SVFUtil::cast&lt;SVFCallInst&gt;(svfinst);</div>
414
- <div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keyword">auto</span> called_llvmval = call-&gt;getCalledOperand()-&gt;stripPointerCasts();</div>
415
- <div class="line"><a name="l00352"></a><span class="lineno"> 352</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>
416
- <div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; {</div>
417
- <div class="line"><a name="l00354"></a><span class="lineno"> 354</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#a21636200f17c62034720c4287aa818b5">LLVMUtil::getDefFunForMultipleModule</a>(called_llvmfunc);</div>
418
- <div class="line"><a name="l00355"></a><span class="lineno"> 355</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>
419
- <div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; svfcall-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#a6dd304f555d2d2388c4430e57b0d2b91">setCalledOperand</a>(callee);</div>
420
- <div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; }</div>
421
- <div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="keywordflow">else</span></div>
422
- <div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; {</div>
423
- <div class="line"><a name="l00360"></a><span class="lineno"> 360</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>
424
- <div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; }</div>
425
- <div class="line"><a name="l00362"></a><span class="lineno"> 362</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>
426
- <div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; {</div>
427
- <div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; virtualCall-&gt;setVtablePtr(<a class="code" href="classSVF_1_1LLVMModuleSet.html#afdd77bc1fca91f70b2ec362f1dacd392">getSVFValue</a>(<a class="code" href="namespaceSVF_1_1cppUtil.html#a374e7c0b161a77f4d693e13b99ed6283">cppUtil::getVCallVtblPtr</a>(call)));</div>
428
- <div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; virtualCall-&gt;setFunIdxInVtable(<a class="code" href="namespaceSVF_1_1cppUtil.html#a279fa78f7a2e45b458a0358de9c061b8">cppUtil::getVCallIdx</a>(call));</div>
429
- <div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; virtualCall-&gt;setFunNameOfVirtualCall(<a class="code" href="namespaceSVF_1_1cppUtil.html#a120e9fc3aa1dc2db3e0c2ea9a85b38b6">cppUtil::getFunNameOfVCallSite</a>(call));</div>
393
+ <div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; </div>
394
+ <div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="keywordflow">if</span> (svfbb-&gt;<a class="code" href="classSVF_1_1SVFBasicBlock.html#a66f51cd41e93ad055c4a0c2874e73fae">getSuccessors</a>().empty())</div>
395
+ <div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; {</div>
396
+ <div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#abb4b5ed04ec70a2e7fca8198132370cf">LLVMUtil::basicBlockHasRetInst</a>(bb))</div>
397
+ <div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; {</div>
398
+ <div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; svfFun-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#abd458bb5a035d3f7db32fac5f01b57f3">setExitBlock</a>(svfbb);</div>
399
+ <div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; }</div>
400
+ <div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; }</div>
401
+ <div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; </div>
402
+ <div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="keywordflow">for</span> (BasicBlock::const_iterator iit = bb-&gt;begin(), eiit = bb-&gt;end(); iit != eiit; ++iit)</div>
403
+ <div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; {</div>
404
+ <div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst = &amp;*iit;</div>
405
+ <div class="line"><a name="l00342"></a><span class="lineno"> 342</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>
406
+ <div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; {</div>
407
+ <div class="line"><a name="l00344"></a><span class="lineno"> 344</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>
408
+ <div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <a class="code" href="classSVF_1_1SVFCallInst.html">SVFCallInst</a>* svfcall = SVFUtil::cast&lt;SVFCallInst&gt;(svfinst);</div>
409
+ <div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="keyword">auto</span> called_llvmval = call-&gt;getCalledOperand()-&gt;stripPointerCasts();</div>
410
+ <div class="line"><a name="l00347"></a><span class="lineno"> 347</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>
411
+ <div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; {</div>
412
+ <div class="line"><a name="l00349"></a><span class="lineno"> 349</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#a21636200f17c62034720c4287aa818b5">LLVMUtil::getDefFunForMultipleModule</a>(called_llvmfunc);</div>
413
+ <div class="line"><a name="l00350"></a><span class="lineno"> 350</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>
414
+ <div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; svfcall-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#a6dd304f555d2d2388c4430e57b0d2b91">setCalledOperand</a>(callee);</div>
415
+ <div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; }</div>
416
+ <div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="keywordflow">else</span></div>
417
+ <div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; {</div>
418
+ <div class="line"><a name="l00355"></a><span class="lineno"> 355</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>
419
+ <div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; }</div>
420
+ <div class="line"><a name="l00357"></a><span class="lineno"> 357</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>
421
+ <div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; {</div>
422
+ <div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; virtualCall-&gt;setVtablePtr(<a class="code" href="classSVF_1_1LLVMModuleSet.html#afdd77bc1fca91f70b2ec362f1dacd392">getSVFValue</a>(<a class="code" href="namespaceSVF_1_1cppUtil.html#a374e7c0b161a77f4d693e13b99ed6283">cppUtil::getVCallVtblPtr</a>(call)));</div>
423
+ <div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; virtualCall-&gt;setFunIdxInVtable(<a class="code" href="namespaceSVF_1_1cppUtil.html#a279fa78f7a2e45b458a0358de9c061b8">cppUtil::getVCallIdx</a>(call));</div>
424
+ <div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; virtualCall-&gt;setFunNameOfVirtualCall(<a class="code" href="namespaceSVF_1_1cppUtil.html#a120e9fc3aa1dc2db3e0c2ea9a85b38b6">cppUtil::getFunNameOfVCallSite</a>(call));</div>
425
+ <div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; }</div>
426
+ <div class="line"><a name="l00363"></a><span class="lineno"> 363</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>
427
+ <div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; {</div>
428
+ <div class="line"><a name="l00365"></a><span class="lineno"> 365</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>
429
+ <div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; svfcall-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#ac979b49b449b97b2a23f195cb107ec77">addArgument</a>(svfval);</div>
430
430
  <div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; }</div>
431
- <div class="line"><a name="l00368"></a><span class="lineno"> 368</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>
432
- <div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; {</div>
433
- <div class="line"><a name="l00370"></a><span class="lineno"> 370</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>
434
- <div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; svfcall-&gt;<a class="code" href="classSVF_1_1SVFCallInst.html#ac979b49b449b97b2a23f195cb107ec77">addArgument</a>(svfval);</div>
435
- <div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; }</div>
436
- <div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; }</div>
437
- <div class="line"><a name="l00374"></a><span class="lineno"> 374</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>
438
- <div class="line"><a name="l00375"></a><span class="lineno"> 375</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>
439
- <div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; }</div>
440
- <div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; }</div>
441
- <div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="comment">// For no return functions, we set the last block as exit BB</span></div>
442
- <div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="comment">// This ensures that each function that has definition must have an exit BB</span></div>
443
- <div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="keywordflow">if</span>(svfFun-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#a374cbaa780f540cb4b4ccac562a82632">exitBlock</a> == <span class="keyword">nullptr</span> &amp;&amp; svfFun-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#a9a7f1f56b6cfc33e7fa241286a07fd63">hasBasicBlock</a>()) svfFun-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#abd458bb5a035d3f7db32fac5f01b57f3">setExitBlock</a>(</div>
444
- <div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="keyword">const_cast&lt;</span><a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a> *<span class="keyword">&gt;</span>(svfFun-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#a60797e9e8b9cbd6b32cc71fa5d00d80c">back</a>()));</div>
445
- <div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160;}</div>
446
- <div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; </div>
447
- <div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; </div>
448
- <div class="line"><a name="l00385"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a8ba9092747108e0289014d52465a692d"> 385</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>
449
- <div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160;{</div>
450
- <div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="keywordflow">if</span> (fun-&gt;isDeclaration())</div>
451
- <div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <span class="keywordflow">return</span>;</div>
452
- <div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="comment">//process and stored dt &amp; df</span></div>
453
- <div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <a class="code" href="namespaceSVF.html#aecbb42b8e9d17fa0189c50dda9fd5fdd">DominatorTree</a> dt;</div>
454
- <div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <a class="code" href="namespaceSVF.html#ab44d20f806be99699895260b14a942d7">DominanceFrontier</a> df;</div>
455
- <div class="line"><a name="l00392"></a><span class="lineno"> 392</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>
456
- <div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; df.analyze(dt);</div>
457
- <div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <a class="code" href="namespaceSVF.html#a77e088bfe47c0b0ddcbbe0693dec6fe5">LoopInfo</a> loopInfo = <a class="code" href="namespaceSVF.html#a77e088bfe47c0b0ddcbbe0693dec6fe5">LoopInfo</a>(dt);</div>
458
- <div class="line"><a name="l00395"></a><span class="lineno"> 395</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>
459
- <div class="line"><a name="l00396"></a><span class="lineno"> 396</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>
460
- <div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; </div>
461
- <div class="line"><a name="l00398"></a><span class="lineno"> 398</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>
462
- <div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="keywordflow">for</span> (DominanceFrontierBase::const_iterator dfIter = df.begin(), eDfIter = df.end(); dfIter != eDfIter; dfIter++)</div>
463
- <div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; {</div>
464
- <div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* keyBB = dfIter-&gt;first;</div>
465
- <div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keyword">const</span> std::set&lt;BasicBlock* &gt;&amp; domSet = dfIter-&gt;second;</div>
466
- <div class="line"><a name="l00403"></a><span class="lineno"> 403</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>
467
- <div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* bbValue:domSet)</div>
468
- <div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; {</div>
469
- <div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; valueBasicBlocks.insert(<a class="code" href="classSVF_1_1LLVMModuleSet.html#ab0c0f321b6bfbfab2e4ff06d81920ab9">getSVFBasicBlock</a>(bbValue));</div>
470
- <div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; }</div>
471
- <div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; }</div>
472
- <div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; std::vector&lt;const SVFBasicBlock*&gt; reachableBBs;</div>
473
- <div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a9bd6f54920929e5ad35102ba2f2223da">LLVMUtil::getFunReachableBBs</a>(fun, reachableBBs);</div>
474
- <div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; ld-&gt;<a class="code" href="classSVF_1_1SVFLoopAndDomInfo.html#acc409e328f641a2c9512beeb727f58c7">setReachableBBs</a>(reachableBBs);</div>
475
- <div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; </div>
476
- <div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="keywordflow">for</span> (Function::const_iterator bit = fun-&gt;begin(), beit = fun-&gt;end(); bit!=beit; ++bit)</div>
477
- <div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; {</div>
478
- <div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> &amp;bb = *bit;</div>
479
- <div class="line"><a name="l00416"></a><span class="lineno"> 416</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>
480
- <div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF.html#a827d09974dc7bf0849f96823cc2fee89">DomTreeNode</a>* dtNode = dt.getNode(&amp;bb))</div>
481
- <div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; {</div>
482
- <div class="line"><a name="l00419"></a><span class="lineno"> 419</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>
483
- <div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> domBB : *dtNode)</div>
484
- <div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; {</div>
485
- <div class="line"><a name="l00422"></a><span class="lineno"> 422</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>
486
- <div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; bbSet.insert(domSVFBB);</div>
487
- <div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; }</div>
488
- <div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; }</div>
489
- <div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; </div>
490
- <div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF.html#a827d09974dc7bf0849f96823cc2fee89">DomTreeNode</a>* pdtNode = pdt.getNode(&amp;bb))</div>
491
- <div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; {</div>
492
- <div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> level = pdtNode-&gt;getLevel();</div>
493
- <div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; ld-&gt;<a class="code" href="classSVF_1_1SVFLoopAndDomInfo.html#ac285502846c993f149b6bcc3e04f767e">getBBPDomLevel</a>()[svfBB] = level;</div>
494
- <div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* idomBB = pdtNode-&gt;getIDom()-&gt;getBlock();</div>
495
- <div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* idom = idomBB == <a class="code" href="cJSON_8cpp.html#a1a05ede2ad100bf5de5dfa7ccdfa4397">NULL</a> ? <a class="code" href="cJSON_8cpp.html#a1a05ede2ad100bf5de5dfa7ccdfa4397">NULL</a>: <a class="code" href="classSVF_1_1LLVMModuleSet.html#ab0c0f321b6bfbfab2e4ff06d81920ab9">getSVFBasicBlock</a>(idomBB);</div>
496
- <div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; ld-&gt;<a class="code" href="classSVF_1_1SVFLoopAndDomInfo.html#ae8a308d5ee34c0eb4a6c1278565e5907">getBB2PIdom</a>()[svfBB] = idom;</div>
497
- <div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; </div>
498
- <div class="line"><a name="l00435"></a><span class="lineno"> 435</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>
499
- <div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> domBB : *pdtNode)</div>
500
- <div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; {</div>
501
- <div class="line"><a name="l00438"></a><span class="lineno"> 438</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>
502
- <div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; bbSet.insert(domSVFBB);</div>
503
- <div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; }</div>
504
- <div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; }</div>
505
- <div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; </div>
506
- <div class="line"><a name="l00443"></a><span class="lineno"> 443</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>
507
- <div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; {</div>
508
- <div class="line"><a name="l00445"></a><span class="lineno"> 445</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>
509
- <div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; {</div>
510
- <div class="line"><a name="l00447"></a><span class="lineno"> 447</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>
511
- <div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; ld-&gt;<a class="code" href="classSVF_1_1SVFLoopAndDomInfo.html#aed2f125f7b8c21092b23d9727568ba50">addToBB2LoopMap</a>(svfBB, loopbb);</div>
512
- <div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; }</div>
513
- <div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; }</div>
514
- <div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; }</div>
515
- <div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160;}</div>
516
- <div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; </div>
517
- <div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; </div>
518
- <div class="line"><a name="l00458"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a8b5f24c873db1f6a0614d1dac48bb4bb"> 458</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a8b5f24c873db1f6a0614d1dac48bb4bb">LLVMModuleSet::prePassSchedule</a>()</div>
519
- <div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160;{</div>
520
- <div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; std::unique_ptr&lt;BreakConstantGEPs&gt; p1 = std::make_unique&lt;BreakConstantGEPs&gt;();</div>
521
- <div class="line"><a name="l00462"></a><span class="lineno"> 462</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
- <div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; {</div>
523
- <div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; p1-&gt;runOnModule(M);</div>
524
- <div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; }</div>
525
- <div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; </div>
526
- <div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; std::unique_ptr&lt;UnifyFunctionExitNodes&gt; p2 =</div>
527
- <div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; std::make_unique&lt;UnifyFunctionExitNodes&gt;();</div>
528
- <div class="line"><a name="l00470"></a><span class="lineno"> 470</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>
529
- <div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; {</div>
530
- <div class="line"><a name="l00472"></a><span class="lineno"> 472</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>
531
- <div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; {</div>
532
- <div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> &amp;fun = *<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>;</div>
533
- <div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <span class="keywordflow">if</span> (fun.isDeclaration())</div>
534
- <div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <span class="keywordflow">continue</span>;</div>
535
- <div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; p2-&gt;runOnFunction(fun);</div>
536
- <div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; }</div>
537
- <div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; }</div>
538
- <div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160;}</div>
539
- <div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; </div>
540
- <div class="line"><a name="l00482"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a2fdc1bd61b8f6cdf6c07a5059b641b04"> 482</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>
541
- <div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160;{</div>
542
- <div class="line"><a name="l00484"></a><span class="lineno"> 484</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>
543
- <div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; mset-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a298966366b02d0a34f409c2c77da3789">loadModules</a>(moduleNameVec);</div>
544
- <div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; mset-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a8820d1df9098db6eadf3a9c67e380e55">loadExtAPIModules</a>();</div>
545
- <div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; mset-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a8b5f24c873db1f6a0614d1dac48bb4bb">prePassSchedule</a>();</div>
546
- <div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; </div>
547
- <div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> preProcessSuffix = <span class="stringliteral">&quot;.pre.bc&quot;</span>;</div>
548
- <div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <span class="comment">// Get the existing module names, remove old extension, add preProcessSuffix</span></div>
549
- <div class="line"><a name="l00491"></a><span class="lineno"> 491</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>
550
- <div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; {</div>
551
- <div class="line"><a name="l00493"></a><span class="lineno"> 493</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>
552
- <div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> rawName = moduleNameVec[i].substr(0, lastIndex);</div>
553
- <div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; moduleNameVec[i] = (rawName + preProcessSuffix);</div>
554
- <div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; }</div>
431
+ <div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; }</div>
432
+ <div class="line"><a name="l00369"></a><span class="lineno"> 369</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>
433
+ <div class="line"><a name="l00370"></a><span class="lineno"> 370</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>
434
+ <div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; }</div>
435
+ <div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; }</div>
436
+ <div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <span class="comment">// For no return functions, we set the last block as exit BB</span></div>
437
+ <div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="comment">// This ensures that each function that has definition must have an exit BB</span></div>
438
+ <div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <span class="keywordflow">if</span>(svfFun-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#a374cbaa780f540cb4b4ccac562a82632">exitBlock</a> == <span class="keyword">nullptr</span> &amp;&amp; svfFun-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#a9a7f1f56b6cfc33e7fa241286a07fd63">hasBasicBlock</a>()) svfFun-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#abd458bb5a035d3f7db32fac5f01b57f3">setExitBlock</a>(</div>
439
+ <div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <span class="keyword">const_cast&lt;</span><a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a> *<span class="keyword">&gt;</span>(svfFun-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#a60797e9e8b9cbd6b32cc71fa5d00d80c">back</a>()));</div>
440
+ <div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160;}</div>
441
+ <div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; </div>
442
+ <div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; </div>
443
+ <div class="line"><a name="l00380"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a8ba9092747108e0289014d52465a692d"> 380</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>
444
+ <div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160;{</div>
445
+ <div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="keywordflow">if</span> (fun-&gt;isDeclaration())</div>
446
+ <div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keywordflow">return</span>;</div>
447
+ <div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="comment">//process and stored dt &amp; df</span></div>
448
+ <div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <a class="code" href="namespaceSVF.html#aecbb42b8e9d17fa0189c50dda9fd5fdd">DominatorTree</a> dt;</div>
449
+ <div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <a class="code" href="namespaceSVF.html#ab44d20f806be99699895260b14a942d7">DominanceFrontier</a> df;</div>
450
+ <div class="line"><a name="l00387"></a><span class="lineno"> 387</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>
451
+ <div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; df.analyze(dt);</div>
452
+ <div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <a class="code" href="namespaceSVF.html#a77e088bfe47c0b0ddcbbe0693dec6fe5">LoopInfo</a> loopInfo = <a class="code" href="namespaceSVF.html#a77e088bfe47c0b0ddcbbe0693dec6fe5">LoopInfo</a>(dt);</div>
453
+ <div class="line"><a name="l00390"></a><span class="lineno"> 390</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>
454
+ <div class="line"><a name="l00391"></a><span class="lineno"> 391</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>
455
+ <div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; </div>
456
+ <div class="line"><a name="l00393"></a><span class="lineno"> 393</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>
457
+ <div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <span class="keywordflow">for</span> (DominanceFrontierBase::const_iterator dfIter = df.begin(), eDfIter = df.end(); dfIter != eDfIter; dfIter++)</div>
458
+ <div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; {</div>
459
+ <div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* keyBB = dfIter-&gt;first;</div>
460
+ <div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <span class="keyword">const</span> std::set&lt;BasicBlock* &gt;&amp; domSet = dfIter-&gt;second;</div>
461
+ <div class="line"><a name="l00398"></a><span class="lineno"> 398</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>
462
+ <div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* bbValue:domSet)</div>
463
+ <div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; {</div>
464
+ <div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; valueBasicBlocks.insert(<a class="code" href="classSVF_1_1LLVMModuleSet.html#ab0c0f321b6bfbfab2e4ff06d81920ab9">getSVFBasicBlock</a>(bbValue));</div>
465
+ <div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; }</div>
466
+ <div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; }</div>
467
+ <div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; std::vector&lt;const SVFBasicBlock*&gt; reachableBBs;</div>
468
+ <div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a9bd6f54920929e5ad35102ba2f2223da">LLVMUtil::getFunReachableBBs</a>(fun, reachableBBs);</div>
469
+ <div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; ld-&gt;<a class="code" href="classSVF_1_1SVFLoopAndDomInfo.html#acc409e328f641a2c9512beeb727f58c7">setReachableBBs</a>(reachableBBs);</div>
470
+ <div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; </div>
471
+ <div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <span class="keywordflow">for</span> (Function::const_iterator bit = fun-&gt;begin(), beit = fun-&gt;end(); bit!=beit; ++bit)</div>
472
+ <div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; {</div>
473
+ <div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> &amp;bb = *bit;</div>
474
+ <div class="line"><a name="l00411"></a><span class="lineno"> 411</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>
475
+ <div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF.html#a827d09974dc7bf0849f96823cc2fee89">DomTreeNode</a>* dtNode = dt.getNode(&amp;bb))</div>
476
+ <div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; {</div>
477
+ <div class="line"><a name="l00414"></a><span class="lineno"> 414</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>
478
+ <div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> domBB : *dtNode)</div>
479
+ <div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; {</div>
480
+ <div class="line"><a name="l00417"></a><span class="lineno"> 417</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>
481
+ <div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; bbSet.insert(domSVFBB);</div>
482
+ <div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; }</div>
483
+ <div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; }</div>
484
+ <div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; </div>
485
+ <div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF.html#a827d09974dc7bf0849f96823cc2fee89">DomTreeNode</a>* pdtNode = pdt.getNode(&amp;bb))</div>
486
+ <div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; {</div>
487
+ <div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> level = pdtNode-&gt;getLevel();</div>
488
+ <div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; ld-&gt;<a class="code" href="classSVF_1_1SVFLoopAndDomInfo.html#ac285502846c993f149b6bcc3e04f767e">getBBPDomLevel</a>()[svfBB] = level;</div>
489
+ <div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* idomBB = pdtNode-&gt;getIDom()-&gt;getBlock();</div>
490
+ <div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* idom = idomBB == <a class="code" href="cJSON_8cpp.html#a1a05ede2ad100bf5de5dfa7ccdfa4397">NULL</a> ? <a class="code" href="cJSON_8cpp.html#a1a05ede2ad100bf5de5dfa7ccdfa4397">NULL</a>: <a class="code" href="classSVF_1_1LLVMModuleSet.html#ab0c0f321b6bfbfab2e4ff06d81920ab9">getSVFBasicBlock</a>(idomBB);</div>
491
+ <div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; ld-&gt;<a class="code" href="classSVF_1_1SVFLoopAndDomInfo.html#ae8a308d5ee34c0eb4a6c1278565e5907">getBB2PIdom</a>()[svfBB] = idom;</div>
492
+ <div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; </div>
493
+ <div class="line"><a name="l00430"></a><span class="lineno"> 430</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>
494
+ <div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> domBB : *pdtNode)</div>
495
+ <div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; {</div>
496
+ <div class="line"><a name="l00433"></a><span class="lineno"> 433</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>
497
+ <div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; bbSet.insert(domSVFBB);</div>
498
+ <div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; }</div>
499
+ <div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; }</div>
500
+ <div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; </div>
501
+ <div class="line"><a name="l00438"></a><span class="lineno"> 438</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>
502
+ <div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; {</div>
503
+ <div class="line"><a name="l00440"></a><span class="lineno"> 440</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>
504
+ <div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; {</div>
505
+ <div class="line"><a name="l00442"></a><span class="lineno"> 442</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>
506
+ <div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; ld-&gt;<a class="code" href="classSVF_1_1SVFLoopAndDomInfo.html#aed2f125f7b8c21092b23d9727568ba50">addToBB2LoopMap</a>(svfBB, loopbb);</div>
507
+ <div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; }</div>
508
+ <div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; }</div>
509
+ <div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; }</div>
510
+ <div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160;}</div>
511
+ <div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; </div>
512
+ <div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; </div>
513
+ <div class="line"><a name="l00453"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a8b5f24c873db1f6a0614d1dac48bb4bb"> 453</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a8b5f24c873db1f6a0614d1dac48bb4bb">LLVMModuleSet::prePassSchedule</a>()</div>
514
+ <div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160;{</div>
515
+ <div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; std::unique_ptr&lt;BreakConstantGEPs&gt; p1 = std::make_unique&lt;BreakConstantGEPs&gt;();</div>
516
+ <div class="line"><a name="l00457"></a><span class="lineno"> 457</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>
517
+ <div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; {</div>
518
+ <div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; p1-&gt;runOnModule(M);</div>
519
+ <div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; }</div>
520
+ <div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; </div>
521
+ <div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; std::unique_ptr&lt;UnifyFunctionExitNodes&gt; p2 =</div>
522
+ <div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; std::make_unique&lt;UnifyFunctionExitNodes&gt;();</div>
523
+ <div class="line"><a name="l00465"></a><span class="lineno"> 465</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>
524
+ <div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; {</div>
525
+ <div class="line"><a name="l00467"></a><span class="lineno"> 467</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>
526
+ <div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; {</div>
527
+ <div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> &amp;fun = *<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>;</div>
528
+ <div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <span class="keywordflow">if</span> (fun.isDeclaration())</div>
529
+ <div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <span class="keywordflow">continue</span>;</div>
530
+ <div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; p2-&gt;runOnFunction(fun);</div>
531
+ <div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; }</div>
532
+ <div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; }</div>
533
+ <div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160;}</div>
534
+ <div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; </div>
535
+ <div class="line"><a name="l00477"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a2fdc1bd61b8f6cdf6c07a5059b641b04"> 477</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>
536
+ <div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160;{</div>
537
+ <div class="line"><a name="l00479"></a><span class="lineno"> 479</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>
538
+ <div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; mset-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a298966366b02d0a34f409c2c77da3789">loadModules</a>(moduleNameVec);</div>
539
+ <div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; mset-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a8820d1df9098db6eadf3a9c67e380e55">loadExtAPIModules</a>();</div>
540
+ <div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; mset-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a8b5f24c873db1f6a0614d1dac48bb4bb">prePassSchedule</a>();</div>
541
+ <div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; </div>
542
+ <div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> preProcessSuffix = <span class="stringliteral">&quot;.pre.bc&quot;</span>;</div>
543
+ <div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <span class="comment">// Get the existing module names, remove old extension, add preProcessSuffix</span></div>
544
+ <div class="line"><a name="l00486"></a><span class="lineno"> 486</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>
545
+ <div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; {</div>
546
+ <div class="line"><a name="l00488"></a><span class="lineno"> 488</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>
547
+ <div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> rawName = moduleNameVec[i].substr(0, lastIndex);</div>
548
+ <div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; moduleNameVec[i] = (rawName + preProcessSuffix);</div>
549
+ <div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; }</div>
550
+ <div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; </div>
551
+ <div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; mset-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#af37b9976b282c875cac7bb1777da635c">dumpModulesToFile</a>(preProcessSuffix);</div>
552
+ <div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a3204400c52ec55da70418471d5c9bad5">preProcessed</a> = <span class="keyword">true</span>;</div>
553
+ <div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a2f8e91c075d90be66412a079fe73e936">releaseLLVMModuleSet</a>();</div>
554
+ <div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160;}</div>
555
555
  <div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; </div>
556
- <div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; mset-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#af37b9976b282c875cac7bb1777da635c">dumpModulesToFile</a>(preProcessSuffix);</div>
557
- <div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a3204400c52ec55da70418471d5c9bad5">preProcessed</a> = <span class="keyword">true</span>;</div>
558
- <div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a2f8e91c075d90be66412a079fe73e936">releaseLLVMModuleSet</a>();</div>
559
- <div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160;}</div>
560
- <div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; </div>
561
- <div class="line"><a name="l00503"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a298966366b02d0a34f409c2c77da3789"> 503</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>
562
- <div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160;{</div>
563
- <div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; </div>
564
- <div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <span class="comment">// We read SVFIR from LLVM IR</span></div>
565
- <div class="line"><a name="l00507"></a><span class="lineno"> 507</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>
566
- <div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; {</div>
567
- <div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; <span class="keywordflow">if</span>(moduleNameVec.empty())</div>
568
- <div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; {</div>
569
- <div class="line"><a name="l00511"></a><span class="lineno"> 511</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>
570
- <div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; exit(0);</div>
571
- <div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; }</div>
572
- <div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <span class="comment">//assert(!moduleNameVec.empty() &amp;&amp; &quot;no LLVM bc file is found!&quot;);</span></div>
573
- <div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; }</div>
574
- <div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="comment">// We read SVFIR from a user-defined txt instead of parsing SVFIR from LLVM IR</span></div>
575
- <div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; <span class="keywordflow">else</span></div>
576
- <div class="line"><a name="l00518"></a><span class="lineno"> 518</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>
577
- <div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; </div>
556
+ <div class="line"><a name="l00498"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a298966366b02d0a34f409c2c77da3789"> 498</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>
557
+ <div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160;{</div>
558
+ <div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; </div>
559
+ <div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <span class="comment">// We read SVFIR from LLVM IR</span></div>
560
+ <div class="line"><a name="l00502"></a><span class="lineno"> 502</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>
561
+ <div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; {</div>
562
+ <div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; <span class="keywordflow">if</span>(moduleNameVec.empty())</div>
563
+ <div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; {</div>
564
+ <div class="line"><a name="l00506"></a><span class="lineno"> 506</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>
565
+ <div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; exit(0);</div>
566
+ <div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; }</div>
567
+ <div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; <span class="comment">//assert(!moduleNameVec.empty() &amp;&amp; &quot;no LLVM bc file is found!&quot;);</span></div>
568
+ <div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; }</div>
569
+ <div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <span class="comment">// We read SVFIR from a user-defined txt instead of parsing SVFIR from LLVM IR</span></div>
570
+ <div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <span class="keywordflow">else</span></div>
571
+ <div class="line"><a name="l00513"></a><span class="lineno"> 513</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>
572
+ <div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; </div>
573
+ <div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <span class="comment">//</span></div>
574
+ <div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="comment">// LLVMContext objects separate global LLVM settings (from which e.g. types are</span></div>
575
+ <div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; <span class="comment">// derived); multiple LLVMContext objects can coexist and each context can &quot;own&quot;</span></div>
576
+ <div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; <span class="comment">// multiple modules (modules can only have one context). Mixing contexts can lead</span></div>
577
+ <div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; <span class="comment">// to unintended inequalities, such as the following:</span></div>
578
578
  <div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; <span class="comment">//</span></div>
579
- <div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <span class="comment">// LLVMContext objects separate global LLVM settings (from which e.g. types are</span></div>
580
- <div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; <span class="comment">// derived); multiple LLVMContext objects can coexist and each context can &quot;own&quot;</span></div>
581
- <div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="comment">// multiple modules (modules can only have one context). Mixing contexts can lead</span></div>
582
- <div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <span class="comment">// to unintended inequalities, such as the following:</span></div>
583
- <div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <span class="comment">//</span></div>
584
- <div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="comment">// ------------------------------------------------------------------</span></div>
585
- <div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <span class="comment">// LLVMContext ctxa,ctxb;</span></div>
586
- <div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <span class="comment">// IntegerType * t1 = IntegerType::get(ctxa,32);</span></div>
587
- <div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; <span class="comment">// IntegerType * t2 = IntegerType::get(ctxa,32);</span></div>
588
- <div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; <span class="comment">// assert(t1 == t2);</span></div>
589
- <div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <span class="comment">// IntegerType * t3 = IntegerType::get(ctxb,32);</span></div>
590
- <div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <span class="comment">// IntegerType * t4 = IntegerType::get(ctxb,32);</span></div>
591
- <div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="comment">// assert(t3 == t4);</span></div>
592
- <div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <span class="comment">// assert(t1 != t3);</span></div>
593
- <div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <span class="comment">// ------------------------------------------------------------------</span></div>
594
- <div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <span class="comment">//</span></div>
595
- <div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; <span class="comment">// When loading bytecode files, SVF will use the same LLVMContext object for all</span></div>
596
- <div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <span class="comment">// modules (i.e. the context owns all loaded modules). This applies to ExtAPI as</span></div>
597
- <div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="comment">// well, which *must* be loaded using the same LLVMContext object. Hence, when</span></div>
598
- <div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <span class="comment">// loading modules from bitcode files, a new LLVMContext is created (using a</span></div>
599
- <div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; <span class="comment">// `std::unique_ptr&lt;LLVMContext&gt;` type to ensure automatic garbage collection).</span></div>
600
- <div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <span class="comment">//</span></div>
601
- <div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; <span class="comment">// This garbage collection should be avoided when building an SVF module from an LLVM</span></div>
602
- <div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <span class="comment">// module instance; see the comment(s) in `buildSVFModule` and `loadExtAPIModules()`</span></div>
603
- <div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; </div>
604
- <div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a4b678ce8642fcdab0582cd626b7ac7c5">owned_ctx</a> = std::make_unique&lt;LLVMContext&gt;();</div>
605
- <div class="line"><a name="l00547"></a><span class="lineno"> 547</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>
606
- <div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; {</div>
607
- <div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="namespaceSVF_1_1LLVMUtil.html#ad8a8c32a09340f491fffffcb07dd7a41">LLVMUtil::isIRFile</a>(moduleName))</div>
608
- <div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; {</div>
609
- <div class="line"><a name="l00551"></a><span class="lineno"> 551</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>
610
- <div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; abort();</div>
611
- <div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; }</div>
612
- <div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; </div>
613
- <div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; <a class="code" href="namespaceSVF.html#a86863d104a3930b3a806935d92ddbf30">SMDiagnostic</a> Err;</div>
614
- <div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; std::unique_ptr&lt;Module&gt; mod = parseIRFile(moduleName, Err, *<a class="code" href="classSVF_1_1LLVMModuleSet.html#a4b678ce8642fcdab0582cd626b7ac7c5">owned_ctx</a>);</div>
615
- <div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <span class="keywordflow">if</span> (mod == <span class="keyword">nullptr</span>)</div>
616
- <div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; {</div>
617
- <div class="line"><a name="l00559"></a><span class="lineno"> 559</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>
618
- <div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; Err.print(<span class="stringliteral">&quot;SVFModuleLoader&quot;</span>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">llvm::errs</a>());</div>
619
- <div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; abort();</div>
620
- <div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; }</div>
621
- <div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#acde6292e719c80f93d3d1c344ab442cd">modules</a>.emplace_back(*mod);</div>
622
- <div class="line"><a name="l00564"></a><span class="lineno"> 564</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>
623
- <div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; }</div>
624
- <div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160;}</div>
625
- <div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; </div>
626
- <div class="line"><a name="l00568"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a8820d1df9098db6eadf3a9c67e380e55"> 568</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a8820d1df9098db6eadf3a9c67e380e55">LLVMModuleSet::loadExtAPIModules</a>()</div>
627
- <div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160;{</div>
628
- <div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <span class="comment">// This function loads the ExtAPI bitcode file as an LLVM module. Note that it is important that</span></div>
629
- <div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; <span class="comment">// the same LLVMContext object is used to load this bitcode file as is used by the other modules</span></div>
630
- <div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <span class="comment">// being analysed.</span></div>
631
- <div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; <span class="comment">// When the modules are loaded from bitcode files (i.e. passing filenames to files containing</span></div>
632
- <div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; <span class="comment">// LLVM IR to `buildSVFModule({file1.bc, file2.bc, ...})) the context is created while loading</span></div>
633
- <div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; <span class="comment">// the modules in `loadModules()`, which populates this-&gt;modules and this-&gt;owned_modules.</span></div>
634
- <div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; <span class="comment">// If, however, an LLVM Module object is passed to `buildSVFModule` (e.g. from an LLVM pass),</span></div>
635
- <div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <span class="comment">// the context should be retrieved from the module itself (note that the garbage collection from</span></div>
636
- <div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <span class="comment">// `std::unique_ptr&lt;LLVMContext&gt; LLVMModuleSet::owned_ctx` should be avoided in this case). This</span></div>
637
- <div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; <span class="comment">// function populates only this-&gt;modules.</span></div>
638
- <div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; <span class="comment">// In both cases, fetching the context from the main LLVM module (through `getContext`) works</span></div>
639
- <div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; assert(!<a class="code" href="classSVF_1_1LLVMModuleSet.html#ae19e38054c55d5822dfc83a12f12aa60">empty</a>() &amp;&amp; <span class="stringliteral">&quot;LLVMModuleSet contains no modules; cannot load ExtAPI module without LLVMContext!&quot;</span>);</div>
640
- <div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; </div>
641
- <div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; <span class="comment">// Load external API module (extapi.bc)</span></div>
642
- <div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1ExtAPI.html#a58a764c27354d5f9b70995d30de65f1d">ExtAPI::getExtAPI</a>()-&gt;getExtBcPath().<a class="code" href="classSVF_1_1LLVMModuleSet.html#ae19e38054c55d5822dfc83a12f12aa60">empty</a>())</div>
643
- <div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; {</div>
644
- <div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> extModuleName = <a class="code" href="classSVF_1_1ExtAPI.html#a58a764c27354d5f9b70995d30de65f1d">ExtAPI::getExtAPI</a>()-&gt;<a class="code" href="classSVF_1_1ExtAPI.html#a26bc352dbfd1b2fe34106a73f1f6d50c">getExtBcPath</a>();</div>
645
- <div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="namespaceSVF_1_1LLVMUtil.html#ad8a8c32a09340f491fffffcb07dd7a41">LLVMUtil::isIRFile</a>(extModuleName))</div>
646
- <div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; {</div>
647
- <div class="line"><a name="l00589"></a><span class="lineno"> 589</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>
648
- <div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; abort();</div>
649
- <div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; }</div>
650
- <div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; <a class="code" href="namespaceSVF.html#a86863d104a3930b3a806935d92ddbf30">SMDiagnostic</a> Err;</div>
651
- <div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; std::unique_ptr&lt;Module&gt; mod = parseIRFile(extModuleName, Err, <a class="code" href="classSVF_1_1LLVMModuleSet.html#ac1a9d20d62066ec4e181fad223669e32">getContext</a>());</div>
652
- <div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; <span class="keywordflow">if</span> (mod == <span class="keyword">nullptr</span>)</div>
653
- <div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; {</div>
654
- <div class="line"><a name="l00596"></a><span class="lineno"> 596</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>
655
- <div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; Err.print(<span class="stringliteral">&quot;SVFModuleLoader&quot;</span>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">llvm::errs</a>());</div>
656
- <div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; abort();</div>
657
- <div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; }</div>
658
- <div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; <span class="comment">// The module of extapi.bc needs to be inserted before applications modules, like std::vector&lt;std::reference_wrapper&lt;Module&gt;&gt; modules{extapi_module, app_module}.</span></div>
659
- <div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; <span class="comment">// Otherwise, when overwriting the app function with SVF extern function, the corresponding SVFFunction of the extern function will not be found.</span></div>
660
- <div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#acde6292e719c80f93d3d1c344ab442cd">modules</a>.insert(<a class="code" href="classSVF_1_1LLVMModuleSet.html#acde6292e719c80f93d3d1c344ab442cd">modules</a>.begin(), *mod);</div>
661
- <div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#ae365189769640adb919a23c36978e5e2">owned_modules</a>.insert(<a class="code" href="classSVF_1_1LLVMModuleSet.html#ae365189769640adb919a23c36978e5e2">owned_modules</a>.begin(),<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(mod));</div>
662
- <div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; }</div>
663
- <div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160;}</div>
664
- <div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; </div>
665
- <div class="line"><a name="l00607"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a0b46a2a5ff2165d17993a071d9cc82c1"> 607</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>
666
- <div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160;{</div>
667
- <div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <span class="comment">// This function is used to extract constructor and destructor functions</span></div>
668
- <div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; <span class="comment">// sorted by their priority from @llvm.global_ctors or @llvm.global_dtors.</span></div>
669
- <div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; <span class="comment">// For example, given following @llvm.global_ctors, the returning sorted</span></div>
670
- <div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; <span class="comment">// function list should be [ctor3, ctor1, ctor2].</span></div>
671
- <div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; <span class="comment">// ------------------------------------------------------------------</span></div>
672
- <div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <span class="comment">// ; Each struct in the array is {priority, function, associated data}</span></div>
673
- <div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; <span class="comment">//</span></div>
674
- <div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; <span class="comment">// @llvm.global_ctors = appending global [2 x { i32, void ()*, i8* }]</span></div>
675
- <div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; <span class="comment">// [{ i32, void ()*, i8* } { i32 1234, void ()* @ctor1.cpp, i8* null },</span></div>
676
- <div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; <span class="comment">// { i32, void ()*, i8* } { i32 2345, void ()* @ctor2.cpp, i8* null },</span></div>
677
- <div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; <span class="comment">// { i32, void ()*, i8* } { i32 345, void ()* @ctor3.cpp, i8* null }]</span></div>
678
- <div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; <span class="comment">// ------------------------------------------------------------------</span></div>
679
- <div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; <span class="comment">// TODO: According to LLVM language reference, if the third field is</span></div>
680
- <div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; <span class="comment">// non-null, and points to a global variable or function, the initializer</span></div>
681
- <div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; <span class="comment">// function will only run if the associated data from the current module is</span></div>
682
- <div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; <span class="comment">// not discarded. However the associated data is currently ignored.</span></div>
683
- <div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; </div>
684
- <div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; </div>
685
- <div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; <span class="comment">// This class is used for the priority queue that sorts the functions by</span></div>
686
- <div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; <span class="comment">// their priority. Each object of this class stands for an item in the</span></div>
687
- <div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; <span class="comment">// function array.</span></div>
688
- <div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; <span class="keyword">class </span>LLVMGlobalFunction</div>
689
- <div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; {</div>
690
- <div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <span class="keyword">public</span>:</div>
691
- <div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> priority;</div>
692
- <div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* func;</div>
693
- <div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; LLVMGlobalFunction() {};</div>
694
- <div class="line"><a name="l00636"></a><span class="lineno"> 636</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>
695
- <div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; : priority(_priority), func(_func) {};</div>
696
- <div class="line"><a name="l00638"></a><span class="lineno"> 638</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>
697
- <div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160;<span class="keyword"> </span>{</div>
698
- <div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; <span class="keywordflow">if</span> (priority != other.priority)</div>
699
- <div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; {</div>
700
- <div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; <span class="keywordflow">return</span> priority &gt; other.priority;</div>
701
- <div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; }</div>
702
- <div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; <span class="keywordflow">else</span></div>
703
- <div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; {</div>
704
- <div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; <span class="keywordflow">return</span> func &gt; other.func;</div>
705
- <div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; }</div>
706
- <div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; }</div>
707
- <div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; };</div>
579
+ <div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <span class="comment">// ------------------------------------------------------------------</span></div>
580
+ <div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; <span class="comment">// LLVMContext ctxa,ctxb;</span></div>
581
+ <div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="comment">// IntegerType * t1 = IntegerType::get(ctxa,32);</span></div>
582
+ <div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <span class="comment">// IntegerType * t2 = IntegerType::get(ctxa,32);</span></div>
583
+ <div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <span class="comment">// assert(t1 == t2);</span></div>
584
+ <div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="comment">// IntegerType * t3 = IntegerType::get(ctxb,32);</span></div>
585
+ <div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <span class="comment">// IntegerType * t4 = IntegerType::get(ctxb,32);</span></div>
586
+ <div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <span class="comment">// assert(t3 == t4);</span></div>
587
+ <div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; <span class="comment">// assert(t1 != t3);</span></div>
588
+ <div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; <span class="comment">// ------------------------------------------------------------------</span></div>
589
+ <div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <span class="comment">//</span></div>
590
+ <div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <span class="comment">// When loading bytecode files, SVF will use the same LLVMContext object for all</span></div>
591
+ <div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="comment">// modules (i.e. the context owns all loaded modules). This applies to ExtAPI as</span></div>
592
+ <div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <span class="comment">// well, which *must* be loaded using the same LLVMContext object. Hence, when</span></div>
593
+ <div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <span class="comment">// loading modules from bitcode files, a new LLVMContext is created (using a</span></div>
594
+ <div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <span class="comment">// `std::unique_ptr&lt;LLVMContext&gt;` type to ensure automatic garbage collection).</span></div>
595
+ <div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; <span class="comment">//</span></div>
596
+ <div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <span class="comment">// This garbage collection should be avoided when building an SVF module from an LLVM</span></div>
597
+ <div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="comment">// module instance; see the comment(s) in `buildSVFModule` and `loadExtAPIModules()`</span></div>
598
+ <div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; </div>
599
+ <div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a4b678ce8642fcdab0582cd626b7ac7c5">owned_ctx</a> = std::make_unique&lt;LLVMContext&gt;();</div>
600
+ <div class="line"><a name="l00542"></a><span class="lineno"> 542</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>
601
+ <div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; {</div>
602
+ <div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="namespaceSVF_1_1LLVMUtil.html#ad8a8c32a09340f491fffffcb07dd7a41">LLVMUtil::isIRFile</a>(moduleName))</div>
603
+ <div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; {</div>
604
+ <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;not an IR file: &quot;</span> &lt;&lt; moduleName &lt;&lt; std::endl;</div>
605
+ <div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; abort();</div>
606
+ <div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; }</div>
607
+ <div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; </div>
608
+ <div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; <a class="code" href="namespaceSVF.html#a86863d104a3930b3a806935d92ddbf30">SMDiagnostic</a> Err;</div>
609
+ <div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; std::unique_ptr&lt;Module&gt; mod = parseIRFile(moduleName, Err, *<a class="code" href="classSVF_1_1LLVMModuleSet.html#a4b678ce8642fcdab0582cd626b7ac7c5">owned_ctx</a>);</div>
610
+ <div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; <span class="keywordflow">if</span> (mod == <span class="keyword">nullptr</span>)</div>
611
+ <div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; {</div>
612
+ <div class="line"><a name="l00554"></a><span class="lineno"> 554</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>
613
+ <div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; Err.print(<span class="stringliteral">&quot;SVFModuleLoader&quot;</span>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">llvm::errs</a>());</div>
614
+ <div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; abort();</div>
615
+ <div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; }</div>
616
+ <div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#acde6292e719c80f93d3d1c344ab442cd">modules</a>.emplace_back(*mod);</div>
617
+ <div class="line"><a name="l00559"></a><span class="lineno"> 559</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>
618
+ <div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; }</div>
619
+ <div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160;}</div>
620
+ <div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; </div>
621
+ <div class="line"><a name="l00563"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a8820d1df9098db6eadf3a9c67e380e55"> 563</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a8820d1df9098db6eadf3a9c67e380e55">LLVMModuleSet::loadExtAPIModules</a>()</div>
622
+ <div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160;{</div>
623
+ <div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; <span class="comment">// This function loads the ExtAPI bitcode file as an LLVM module. Note that it is important that</span></div>
624
+ <div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; <span class="comment">// the same LLVMContext object is used to load this bitcode file as is used by the other modules</span></div>
625
+ <div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <span class="comment">// being analysed.</span></div>
626
+ <div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; <span class="comment">// When the modules are loaded from bitcode files (i.e. passing filenames to files containing</span></div>
627
+ <div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; <span class="comment">// LLVM IR to `buildSVFModule({file1.bc, file2.bc, ...})) the context is created while loading</span></div>
628
+ <div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <span class="comment">// the modules in `loadModules()`, which populates this-&gt;modules and this-&gt;owned_modules.</span></div>
629
+ <div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; <span class="comment">// If, however, an LLVM Module object is passed to `buildSVFModule` (e.g. from an LLVM pass),</span></div>
630
+ <div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <span class="comment">// the context should be retrieved from the module itself (note that the garbage collection from</span></div>
631
+ <div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; <span class="comment">// `std::unique_ptr&lt;LLVMContext&gt; LLVMModuleSet::owned_ctx` should be avoided in this case). This</span></div>
632
+ <div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; <span class="comment">// function populates only this-&gt;modules.</span></div>
633
+ <div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; <span class="comment">// In both cases, fetching the context from the main LLVM module (through `getContext`) works</span></div>
634
+ <div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; assert(!<a class="code" href="classSVF_1_1LLVMModuleSet.html#ae19e38054c55d5822dfc83a12f12aa60">empty</a>() &amp;&amp; <span class="stringliteral">&quot;LLVMModuleSet contains no modules; cannot load ExtAPI module without LLVMContext!&quot;</span>);</div>
635
+ <div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; </div>
636
+ <div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <span class="comment">// Load external API module (extapi.bc)</span></div>
637
+ <div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1ExtAPI.html#a58a764c27354d5f9b70995d30de65f1d">ExtAPI::getExtAPI</a>()-&gt;getExtBcPath().<a class="code" href="classSVF_1_1LLVMModuleSet.html#ae19e38054c55d5822dfc83a12f12aa60">empty</a>())</div>
638
+ <div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; {</div>
639
+ <div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> extModuleName = <a class="code" href="classSVF_1_1ExtAPI.html#a58a764c27354d5f9b70995d30de65f1d">ExtAPI::getExtAPI</a>()-&gt;<a class="code" href="classSVF_1_1ExtAPI.html#a26bc352dbfd1b2fe34106a73f1f6d50c">getExtBcPath</a>();</div>
640
+ <div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="namespaceSVF_1_1LLVMUtil.html#ad8a8c32a09340f491fffffcb07dd7a41">LLVMUtil::isIRFile</a>(extModuleName))</div>
641
+ <div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; {</div>
642
+ <div class="line"><a name="l00584"></a><span class="lineno"> 584</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>
643
+ <div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; abort();</div>
644
+ <div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; }</div>
645
+ <div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <a class="code" href="namespaceSVF.html#a86863d104a3930b3a806935d92ddbf30">SMDiagnostic</a> Err;</div>
646
+ <div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; std::unique_ptr&lt;Module&gt; mod = parseIRFile(extModuleName, Err, <a class="code" href="classSVF_1_1LLVMModuleSet.html#ac1a9d20d62066ec4e181fad223669e32">getContext</a>());</div>
647
+ <div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <span class="keywordflow">if</span> (mod == <span class="keyword">nullptr</span>)</div>
648
+ <div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; {</div>
649
+ <div class="line"><a name="l00591"></a><span class="lineno"> 591</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>
650
+ <div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; Err.print(<span class="stringliteral">&quot;SVFModuleLoader&quot;</span>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">llvm::errs</a>());</div>
651
+ <div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; abort();</div>
652
+ <div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; }</div>
653
+ <div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; <span class="comment">// The module of extapi.bc needs to be inserted before applications modules, like std::vector&lt;std::reference_wrapper&lt;Module&gt;&gt; modules{extapi_module, app_module}.</span></div>
654
+ <div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; <span class="comment">// Otherwise, when overwriting the app function with SVF extern function, the corresponding SVFFunction of the extern function will not be found.</span></div>
655
+ <div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#acde6292e719c80f93d3d1c344ab442cd">modules</a>.insert(<a class="code" href="classSVF_1_1LLVMModuleSet.html#acde6292e719c80f93d3d1c344ab442cd">modules</a>.begin(), *mod);</div>
656
+ <div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#ae365189769640adb919a23c36978e5e2">owned_modules</a>.insert(<a class="code" href="classSVF_1_1LLVMModuleSet.html#ae365189769640adb919a23c36978e5e2">owned_modules</a>.begin(),<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(mod));</div>
657
+ <div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; }</div>
658
+ <div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160;}</div>
659
+ <div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; </div>
660
+ <div class="line"><a name="l00602"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a0b46a2a5ff2165d17993a071d9cc82c1"> 602</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>
661
+ <div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160;{</div>
662
+ <div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; <span class="comment">// This function is used to extract constructor and destructor functions</span></div>
663
+ <div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <span class="comment">// sorted by their priority from @llvm.global_ctors or @llvm.global_dtors.</span></div>
664
+ <div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; <span class="comment">// For example, given following @llvm.global_ctors, the returning sorted</span></div>
665
+ <div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; <span class="comment">// function list should be [ctor3, ctor1, ctor2].</span></div>
666
+ <div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; <span class="comment">// ------------------------------------------------------------------</span></div>
667
+ <div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <span class="comment">// ; Each struct in the array is {priority, function, associated data}</span></div>
668
+ <div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; <span class="comment">//</span></div>
669
+ <div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; <span class="comment">// @llvm.global_ctors = appending global [2 x { i32, void ()*, i8* }]</span></div>
670
+ <div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; <span class="comment">// [{ i32, void ()*, i8* } { i32 1234, void ()* @ctor1.cpp, i8* null },</span></div>
671
+ <div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; <span class="comment">// { i32, void ()*, i8* } { i32 2345, void ()* @ctor2.cpp, i8* null },</span></div>
672
+ <div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <span class="comment">// { i32, void ()*, i8* } { i32 345, void ()* @ctor3.cpp, i8* null }]</span></div>
673
+ <div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; <span class="comment">// ------------------------------------------------------------------</span></div>
674
+ <div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; <span class="comment">// TODO: According to LLVM language reference, if the third field is</span></div>
675
+ <div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; <span class="comment">// non-null, and points to a global variable or function, the initializer</span></div>
676
+ <div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; <span class="comment">// function will only run if the associated data from the current module is</span></div>
677
+ <div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; <span class="comment">// not discarded. However the associated data is currently ignored.</span></div>
678
+ <div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; </div>
679
+ <div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; </div>
680
+ <div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; <span class="comment">// This class is used for the priority queue that sorts the functions by</span></div>
681
+ <div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; <span class="comment">// their priority. Each object of this class stands for an item in the</span></div>
682
+ <div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; <span class="comment">// function array.</span></div>
683
+ <div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; <span class="keyword">class </span>LLVMGlobalFunction</div>
684
+ <div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; {</div>
685
+ <div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; <span class="keyword">public</span>:</div>
686
+ <div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> priority;</div>
687
+ <div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* func;</div>
688
+ <div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; LLVMGlobalFunction() {};</div>
689
+ <div class="line"><a name="l00631"></a><span class="lineno"> 631</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>
690
+ <div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; : priority(_priority), func(_func) {};</div>
691
+ <div class="line"><a name="l00633"></a><span class="lineno"> 633</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>
692
+ <div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160;<span class="keyword"> </span>{</div>
693
+ <div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; <span class="keywordflow">if</span> (priority != other.priority)</div>
694
+ <div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; {</div>
695
+ <div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; <span class="keywordflow">return</span> priority &gt; other.priority;</div>
696
+ <div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; }</div>
697
+ <div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; <span class="keywordflow">else</span></div>
698
+ <div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; {</div>
699
+ <div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; <span class="keywordflow">return</span> func &gt; other.func;</div>
700
+ <div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; }</div>
701
+ <div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; }</div>
702
+ <div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; };</div>
703
+ <div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; </div>
704
+ <div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; std::priority_queue&lt;LLVMGlobalFunction, std::vector&lt;LLVMGlobalFunction&gt;,</div>
705
+ <div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; greater&lt;LLVMGlobalFunction&gt;&gt;</div>
706
+ <div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; queue;</div>
707
+ <div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; std::vector&lt;const Function* &gt; result;</div>
708
708
  <div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; </div>
709
- <div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; std::priority_queue&lt;LLVMGlobalFunction, std::vector&lt;LLVMGlobalFunction&gt;,</div>
710
- <div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; greater&lt;LLVMGlobalFunction&gt;&gt;</div>
711
- <div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; queue;</div>
712
- <div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; std::vector&lt;const Function* &gt; result;</div>
713
- <div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; </div>
714
- <div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <span class="comment">// The @llvm.global_ctors/dtors global variable is an array of struct. Each</span></div>
715
- <div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; <span class="comment">// struct has three fields: {i32 priority, void ()* @ctor/dtor, i8* @data}.</span></div>
716
- <div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; <span class="comment">// First get the array here.</span></div>
717
- <div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5ae718cba37d8e34d2946530dc098c8e">ConstantArray</a> *globalFuncArray =</div>
718
- <div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; SVFUtil::dyn_cast&lt;ConstantArray&gt;(global-&gt;getInitializer()))</div>
719
- <div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; {</div>
720
- <div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; <span class="comment">// Get each struct in the array.</span></div>
721
- <div class="line"><a name="l00663"></a><span class="lineno"> 663</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>
722
- <div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; {</div>
723
- <div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; <span class="keywordflow">if</span> (</div>
724
- <div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2b28f48dde0a9a91d251e654ce1f9477">ConstantStruct</a> *globalFuncItem =</div>
725
- <div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; SVFUtil::dyn_cast&lt;ConstantStruct&gt;(</div>
726
- <div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; globalFuncArray-&gt;getOperand(i)))</div>
727
- <div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; {</div>
728
- <div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; </div>
729
- <div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; <span class="comment">// Extract priority and function from the struct</span></div>
730
- <div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a>* priority = SVFUtil::dyn_cast&lt;ConstantInt&gt;(</div>
731
- <div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; globalFuncItem-&gt;getOperand(0));</div>
732
- <div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* func = SVFUtil::dyn_cast&lt;Function&gt;(</div>
733
- <div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; globalFuncItem-&gt;getOperand(1));</div>
734
- <div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; </div>
735
- <div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; <span class="keywordflow">if</span> (priority &amp;&amp; func)</div>
736
- <div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; {</div>
737
- <div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; queue.push(LLVMGlobalFunction(priority</div>
738
- <div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; -&gt;getZExtValue(),</div>
739
- <div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; func));</div>
740
- <div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; }</div>
741
- <div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; }</div>
742
- <div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; }</div>
743
- <div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; }</div>
744
- <div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; </div>
745
- <div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; <span class="comment">// Generate a sorted vector of functions from the priority queue.</span></div>
746
- <div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; <span class="keywordflow">while</span> (!queue.empty())</div>
747
- <div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; {</div>
748
- <div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; result.push_back(queue.top().func);</div>
749
- <div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; queue.pop();</div>
750
- <div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; }</div>
751
- <div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; <span class="keywordflow">return</span> result;</div>
752
- <div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160;}</div>
753
- <div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; </div>
754
- <div class="line"><a name="l00696"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a8af6b911b728713f66f7c809d5c0fbf1"> 696</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a8af6b911b728713f66f7c809d5c0fbf1">LLVMModuleSet::addSVFMain</a>()</div>
755
- <div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160;{</div>
756
- <div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; std::vector&lt;const Function*&gt; ctor_funcs;</div>
757
- <div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; std::vector&lt;const Function*&gt; dtor_funcs;</div>
758
- <div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* orgMain = 0;</div>
759
- <div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; <a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a>* mainMod = <span class="keyword">nullptr</span>;</div>
760
- <div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; </div>
761
- <div class="line"><a name="l00703"></a><span class="lineno"> 703</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>
762
- <div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; {</div>
763
- <div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; <span class="comment">// Collect ctor and dtor functions</span></div>
764
- <div class="line"><a name="l00706"></a><span class="lineno"> 706</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>
765
- <div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; {</div>
766
- <div class="line"><a name="l00708"></a><span class="lineno"> 708</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>
767
- <div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; {</div>
768
- <div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; ctor_funcs = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a0b46a2a5ff2165d17993a071d9cc82c1">getLLVMGlobalFunctions</a>(&amp;global);</div>
769
- <div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; }</div>
770
- <div class="line"><a name="l00712"></a><span class="lineno"> 712</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>
771
- <div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; {</div>
772
- <div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; dtor_funcs = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a0b46a2a5ff2165d17993a071d9cc82c1">getLLVMGlobalFunctions</a>(&amp;global);</div>
773
- <div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; }</div>
774
- <div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; }</div>
709
+ <div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; <span class="comment">// The @llvm.global_ctors/dtors global variable is an array of struct. Each</span></div>
710
+ <div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <span class="comment">// struct has three fields: {i32 priority, void ()* @ctor/dtor, i8* @data}.</span></div>
711
+ <div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; <span class="comment">// First get the array here.</span></div>
712
+ <div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5ae718cba37d8e34d2946530dc098c8e">ConstantArray</a> *globalFuncArray =</div>
713
+ <div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; SVFUtil::dyn_cast&lt;ConstantArray&gt;(global-&gt;getInitializer()))</div>
714
+ <div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; {</div>
715
+ <div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; <span class="comment">// Get each struct in the array.</span></div>
716
+ <div class="line"><a name="l00658"></a><span class="lineno"> 658</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>
717
+ <div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; {</div>
718
+ <div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; <span class="keywordflow">if</span> (</div>
719
+ <div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2b28f48dde0a9a91d251e654ce1f9477">ConstantStruct</a> *globalFuncItem =</div>
720
+ <div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; SVFUtil::dyn_cast&lt;ConstantStruct&gt;(</div>
721
+ <div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; globalFuncArray-&gt;getOperand(i)))</div>
722
+ <div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; {</div>
723
+ <div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; </div>
724
+ <div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; <span class="comment">// Extract priority and function from the struct</span></div>
725
+ <div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a>* priority = SVFUtil::dyn_cast&lt;ConstantInt&gt;(</div>
726
+ <div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; globalFuncItem-&gt;getOperand(0));</div>
727
+ <div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* func = SVFUtil::dyn_cast&lt;Function&gt;(</div>
728
+ <div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; globalFuncItem-&gt;getOperand(1));</div>
729
+ <div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; </div>
730
+ <div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; <span class="keywordflow">if</span> (priority &amp;&amp; func)</div>
731
+ <div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; {</div>
732
+ <div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; queue.push(LLVMGlobalFunction(priority</div>
733
+ <div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; -&gt;getZExtValue(),</div>
734
+ <div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; func));</div>
735
+ <div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; }</div>
736
+ <div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; }</div>
737
+ <div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; }</div>
738
+ <div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; }</div>
739
+ <div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; </div>
740
+ <div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; <span class="comment">// Generate a sorted vector of functions from the priority queue.</span></div>
741
+ <div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; <span class="keywordflow">while</span> (!queue.empty())</div>
742
+ <div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; {</div>
743
+ <div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; result.push_back(queue.top().func);</div>
744
+ <div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; queue.pop();</div>
745
+ <div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; }</div>
746
+ <div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; <span class="keywordflow">return</span> result;</div>
747
+ <div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160;}</div>
748
+ <div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; </div>
749
+ <div class="line"><a name="l00691"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a8af6b911b728713f66f7c809d5c0fbf1"> 691</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a8af6b911b728713f66f7c809d5c0fbf1">LLVMModuleSet::addSVFMain</a>()</div>
750
+ <div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160;{</div>
751
+ <div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; std::vector&lt;const Function*&gt; ctor_funcs;</div>
752
+ <div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; std::vector&lt;const Function*&gt; dtor_funcs;</div>
753
+ <div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* orgMain = 0;</div>
754
+ <div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; <a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a>* mainMod = <span class="keyword">nullptr</span>;</div>
755
+ <div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; </div>
756
+ <div class="line"><a name="l00698"></a><span class="lineno"> 698</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>
757
+ <div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; {</div>
758
+ <div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; <span class="comment">// Collect ctor and dtor functions</span></div>
759
+ <div class="line"><a name="l00701"></a><span class="lineno"> 701</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>
760
+ <div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; {</div>
761
+ <div class="line"><a name="l00703"></a><span class="lineno"> 703</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>
762
+ <div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; {</div>
763
+ <div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; ctor_funcs = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a0b46a2a5ff2165d17993a071d9cc82c1">getLLVMGlobalFunctions</a>(&amp;global);</div>
764
+ <div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; }</div>
765
+ <div class="line"><a name="l00707"></a><span class="lineno"> 707</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>
766
+ <div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; {</div>
767
+ <div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; dtor_funcs = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a0b46a2a5ff2165d17993a071d9cc82c1">getLLVMGlobalFunctions</a>(&amp;global);</div>
768
+ <div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; }</div>
769
+ <div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; }</div>
770
+ <div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; </div>
771
+ <div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; <span class="comment">// Find main function</span></div>
772
+ <div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> &amp;func : mod)</div>
773
+ <div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; {</div>
774
+ <div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; <span class="keyword">auto</span> funName = func.getName();</div>
775
775
  <div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; </div>
776
- <div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; <span class="comment">// Find main function</span></div>
777
- <div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> &amp;func : mod)</div>
778
- <div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; {</div>
779
- <div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; <span class="keyword">auto</span> funName = func.getName();</div>
780
- <div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; </div>
781
- <div class="line"><a name="l00723"></a><span class="lineno"> 723</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>
782
- <div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; </div>
783
- <div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; <span class="keywordflow">if</span> (funName.equals(<span class="stringliteral">&quot;main&quot;</span>))</div>
784
- <div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; {</div>
785
- <div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; orgMain = &amp;func;</div>
786
- <div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; mainMod = &amp;mod;</div>
787
- <div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; }</div>
788
- <div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; }</div>
789
- <div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; }</div>
790
- <div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; </div>
791
- <div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; <span class="comment">// Only create svf.main when the original main function is found, and also</span></div>
792
- <div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; <span class="comment">// there are global constructor or destructor functions.</span></div>
793
- <div class="line"><a name="l00735"></a><span class="lineno"> 735</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>
794
- <div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; (ctor_funcs.size() &gt; 0 || dtor_funcs.size() &gt; 0))</div>
795
- <div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; {</div>
796
- <div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; assert(mainMod &amp;&amp; <span class="stringliteral">&quot;Module with main function not found.&quot;</span>);</div>
797
- <div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; <a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a>&amp; M = *mainMod;</div>
798
- <div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; <span class="comment">// char **</span></div>
799
- <div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* ptr = PointerType::getUnqual(M.getContext());</div>
800
- <div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* i32 = IntegerType::getInt32Ty(M.getContext());</div>
801
- <div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; <span class="comment">// define void @svf.main(i32, i8**, i8**)</span></div>
802
- <div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160;<span class="preprocessor">#if (LLVM_VERSION_MAJOR &gt;= 9)</span></div>
803
- <div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; FunctionCallee svfmainFn = M.getOrInsertFunction(</div>
804
- <div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; <a class="code" href="LLVMModule_8cpp.html#a10ab7c7da3a458495d8528b9e90d714b">SVF_MAIN_FUNC_NAME</a>,</div>
805
- <div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; Type::getVoidTy(M.getContext()),</div>
806
- <div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; i32,ptr,ptr</div>
807
- <div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; );</div>
808
- <div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* svfmain = SVFUtil::dyn_cast&lt;Function&gt;(svfmainFn.getCallee());</div>
809
- <div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160;<span class="preprocessor">#else</span></div>
810
- <div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* svfmain = SVFUtil::dyn_cast&lt;Function&gt;(M.getOrInsertFunction(</div>
811
- <div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; <a class="code" href="LLVMModule_8cpp.html#a10ab7c7da3a458495d8528b9e90d714b">SVF_MAIN_FUNC_NAME</a>,</div>
812
- <div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; Type::getVoidTy(M.getContext()),</div>
813
- <div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; i32,i8ptr2,i8ptr2</div>
814
- <div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; ));</div>
815
- <div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160;<span class="preprocessor">#endif</span></div>
816
- <div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; svfmain-&gt;setCallingConv(llvm::CallingConv::C);</div>
817
- <div class="line"><a name="l00759"></a><span class="lineno"> 759</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>
818
- <div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; <a class="code" href="namespaceSVF.html#a94824519e439aeef1568d415b6f7331c">IRBuilder</a> Builder(block);</div>
819
- <div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; <span class="comment">// emit &quot;call void @ctor()&quot;. ctor_funcs is sorted so the functions are</span></div>
820
- <div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; <span class="comment">// emitted in the order of priority</span></div>
821
- <div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; ctor : ctor_funcs)</div>
822
- <div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; {</div>
823
- <div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; <span class="keyword">auto</span> target = M.getOrInsertFunction(</div>
824
- <div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; ctor-&gt;getName(),</div>
825
- <div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; Type::getVoidTy(M.getContext())</div>
826
- <div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; );</div>
827
- <div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; Builder.CreateCall(target);</div>
828
- <div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; }</div>
829
- <div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; <span class="comment">// main() should be called after all ctor functions and before dtor</span></div>
830
- <div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; <span class="comment">// functions.</span></div>
831
- <div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; Function::arg_iterator arg_it = svfmain-&gt;arg_begin();</div>
832
- <div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* args[] = {arg_it, arg_it + 1, arg_it + 2};</div>
833
- <div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; <span class="keywordtype">size_t</span> cnt = orgMain-&gt;arg_size();</div>
834
- <div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; assert(cnt &lt;= 3 &amp;&amp; <span class="stringliteral">&quot;Too many arguments for main()&quot;</span>);</div>
835
- <div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; Builder.CreateCall(orgMain, llvm::ArrayRef&lt;Value*&gt;(args, args + cnt));</div>
836
- <div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; <span class="comment">// emit &quot;call void @dtor()&quot;. dtor_funcs is sorted so the functions are</span></div>
837
- <div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; <span class="comment">// emitted in the order of priority</span></div>
838
- <div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; dtor : dtor_funcs)</div>
839
- <div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; {</div>
840
- <div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; <span class="keyword">auto</span> target = M.getOrInsertFunction(dtor-&gt;getName(), Type::getVoidTy(M.getContext()));</div>
841
- <div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; Builder.CreateCall(target);</div>
842
- <div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; }</div>
843
- <div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; <span class="comment">// return;</span></div>
844
- <div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; Builder.CreateRetVoid();</div>
845
- <div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; }</div>
846
- <div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160;}</div>
847
- <div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; </div>
848
- <div class="line"><a name="l00790"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#afb06c18fcf916e84dfacb139f644aa48"> 790</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#afb06c18fcf916e84dfacb139f644aa48">LLVMModuleSet::collectExtFunAnnotations</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a>* mod)</div>
849
- <div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160;{</div>
850
- <div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a> *glob = mod-&gt;getGlobalVariable(<span class="stringliteral">&quot;llvm.global.annotations&quot;</span>);</div>
851
- <div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; <span class="keywordflow">if</span> (glob == <span class="keyword">nullptr</span> || !glob-&gt;hasInitializer())</div>
852
- <div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; <span class="keywordflow">return</span>;</div>
853
- <div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; </div>
854
- <div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; <a class="code" href="namespaceSVF.html#a5ae718cba37d8e34d2946530dc098c8e">ConstantArray</a> *ca = SVFUtil::dyn_cast&lt;ConstantArray&gt;(glob-&gt;getInitializer());</div>
855
- <div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; <span class="keywordflow">if</span> (ca == <span class="keyword">nullptr</span>)</div>
856
- <div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; <span class="keywordflow">return</span>;</div>
857
- <div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; </div>
858
- <div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i &lt; ca-&gt;getNumOperands(); ++i)</div>
859
- <div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; {</div>
860
- <div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; <a class="code" href="namespaceSVF.html#a2b28f48dde0a9a91d251e654ce1f9477">ConstantStruct</a> *structAn = SVFUtil::dyn_cast&lt;ConstantStruct&gt;(ca-&gt;getOperand(i));</div>
861
- <div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; <span class="keywordflow">if</span> (structAn == <span class="keyword">nullptr</span> || structAn-&gt;getNumOperands() == 0)</div>
862
- <div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; <span class="keywordflow">continue</span>;</div>
863
- <div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; </div>
864
- <div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; <span class="comment">// Check if the annotation is for a function</span></div>
865
- <div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fun = <span class="keyword">nullptr</span>;</div>
866
- <div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a> *annotateStr = <span class="keyword">nullptr</span>;</div>
867
- <div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a> *expr = SVFUtil::dyn_cast&lt;ConstantExpr&gt;(structAn-&gt;getOperand(0)))</div>
868
- <div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; {</div>
869
- <div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; <span class="keywordflow">if</span> (expr-&gt;getOpcode() == Instruction::BitCast &amp;&amp; SVFUtil::isa&lt;Function&gt;(expr-&gt;getOperand(0)))</div>
870
- <div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; fun = SVFUtil::cast&lt;Function&gt;(expr-&gt;getOperand(0));</div>
871
- <div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; </div>
872
- <div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a> *note = SVFUtil::cast&lt;ConstantExpr&gt;(structAn-&gt;getOperand(1));</div>
873
- <div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; <span class="keywordflow">if</span> (note-&gt;getOpcode() != Instruction::GetElementPtr)</div>
874
- <div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; <span class="keywordflow">continue</span>;</div>
875
- <div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; </div>
876
- <div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; annotateStr = SVFUtil::dyn_cast&lt;GlobalVariable&gt;(note-&gt;getOperand(0));</div>
877
- <div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; }</div>
878
- <div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; <span class="keywordflow">else</span></div>
879
- <div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; {</div>
880
- <div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; fun = SVFUtil::dyn_cast&lt;Function&gt;(structAn-&gt;getOperand(0));</div>
881
- <div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; annotateStr = SVFUtil::dyn_cast&lt;GlobalVariable&gt;(structAn-&gt;getOperand(1));</div>
882
- <div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; }</div>
883
- <div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; </div>
884
- <div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; <span class="keywordflow">if</span> (!fun || annotateStr == <span class="keyword">nullptr</span> || !annotateStr-&gt;hasInitializer())</div>
885
- <div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; <span class="keywordflow">continue</span>;;</div>
886
- <div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; </div>
887
- <div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; <a class="code" href="namespaceSVF.html#a8ad3aa124fabddc2fdd07c50403d70a9">ConstantDataSequential</a> *data = SVFUtil::dyn_cast&lt;ConstantDataSequential&gt;(annotateStr-&gt;getInitializer());</div>
888
- <div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; <span class="keywordflow">if</span> (data &amp;&amp; data-&gt;isString())</div>
889
- <div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; {</div>
890
- <div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> annotation = data-&gt;getAsString().str();</div>
891
- <div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; <span class="keywordflow">if</span> (!annotation.empty())</div>
892
- <div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a7968a00d41166d18acb684052ed1eed8">ExtFun2Annotations</a>[fun].push_back(annotation);</div>
893
- <div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; }</div>
894
- <div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; }</div>
895
- <div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160;}</div>
896
- <div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; </div>
897
- <div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160;<span class="comment">/*</span></div>
898
- <div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160;<span class="comment"> For a more detailed explanation of the Function declaration and definition mapping relationships and how External APIs are handled,</span></div>
899
- <div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160;<span class="comment"> please refer to the SVF Wiki: https://github.com/SVF-tools/SVF/wiki/Handling-External-APIs-with-extapi.c</span></div>
900
- <div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160;<span class="comment"></span> </div>
901
- <div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160;<span class="comment"> Table 1</span></div>
902
- <div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160;<span class="comment"> | ------- | ----------------- | --------------- | ----------------- | ----------- |</span></div>
903
- <div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160;<span class="comment"> | | AppDef | AppDecl | ExtDef | ExtDecl |</span></div>
904
- <div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160;<span class="comment"> | ------- | ----------------- | --------------- | ----------------- | ----------- |</span></div>
905
- <div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160;<span class="comment"> | AppDef | X | FunDefToDeclsMap| FunDeclToDefMap | X |</span></div>
906
- <div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160;<span class="comment"> | ------- | ----------------- | --------------- | ----------------- | ----------- |</span></div>
907
- <div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160;<span class="comment"> | AppDecl | FunDeclToDefMap | X | FunDeclToDefMap | X |</span></div>
908
- <div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160;<span class="comment"> | ------- | ----------------- | --------------- | ----------------- | ----------- |</span></div>
909
- <div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160;<span class="comment"> | ExtDef | FunDefToDeclsMap | FunDefToDeclsMap| X | X |</span></div>
910
- <div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160;<span class="comment"> | ------- | ----------------- | --------------- | ----------------- | ----------- |</span></div>
911
- <div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160;<span class="comment"> | ExtDecl | FunDeclToDefMap | X | X | ExtFuncsVec |</span></div>
912
- <div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160;<span class="comment"> | ------- | ----------------- | --------------- | ----------------- | ----------- |</span></div>
913
- <div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160;<span class="comment"></span> </div>
914
- <div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160;<span class="comment"> When a user wants to use functions in extapi.c to overwrite the functions defined in the app code, two relationships, &quot;AppDef -&gt; ExtDef&quot; and &quot;ExtDef -&gt; AppDef,&quot; are used.</span></div>
915
- <div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160;<span class="comment"> Use Ext function definition to override the App function definition (Ext function with &quot;__attribute__((annotate(&quot;OVERWRITE&quot;)))&quot; in extapi.c).</span></div>
916
- <div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160;<span class="comment"> The app function definition will be changed to an app function declaration.</span></div>
917
- <div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160;<span class="comment"> Then, put the app function declaration and its corresponding Ext function definition into FunDeclToDefMap/FunDefToDeclsMap.</span></div>
918
- <div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160;<span class="comment"> ------------------------------------------------------</span></div>
919
- <div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160;<span class="comment"> AppDef -&gt; ExtDef (overwrite):</span></div>
920
- <div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160;<span class="comment"> For example,</span></div>
921
- <div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160;<span class="comment"> App function:</span></div>
922
- <div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160;<span class="comment"> char* foo(char *a, char *b){return a;}</span></div>
923
- <div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160;<span class="comment"> Ext function:</span></div>
924
- <div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160;<span class="comment"> __attribute__((annotate(&quot;OVERWRITE&quot;)))</span></div>
925
- <div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160;<span class="comment"> char* foo(char *a, char *b){return b;}</span></div>
926
- <div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160;<span class="comment"></span> </div>
927
- <div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160;<span class="comment"> When SVF handles the foo function in the App module,</span></div>
928
- <div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160;<span class="comment"> the definition of</span></div>
929
- <div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160;<span class="comment"> foo: char* foo(char *a, char *b){return a;}</span></div>
930
- <div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160;<span class="comment"> will be changed to a declaration</span></div>
931
- <div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160;<span class="comment"> foo: char* foo(char *a, char *b);</span></div>
932
- <div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160;<span class="comment"> Then,</span></div>
933
- <div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160;<span class="comment"> foo: char* foo(char *a, char *b);</span></div>
934
- <div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160;<span class="comment"> and</span></div>
935
- <div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160;<span class="comment"> __attribute__((annotate(&quot;OVERWRITE&quot;)))</span></div>
936
- <div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160;<span class="comment"> char* foo(char *a, char *b){return b;}</span></div>
937
- <div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160;<span class="comment"> will be put into FunDeclToDefMap</span></div>
938
- <div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160;<span class="comment"> ------------------------------------------------------</span></div>
939
- <div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160;<span class="comment"> ExtDef -&gt; AppDef (overwrite):</span></div>
940
- <div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160;<span class="comment"> __attribute__((annotate(&quot;OVERWRITE&quot;)))</span></div>
941
- <div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160;<span class="comment"> char* foo(char *a, char *b){return b;}</span></div>
942
- <div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160;<span class="comment"> and</span></div>
943
- <div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160;<span class="comment"> foo: char* foo(char *a, char *b);</span></div>
944
- <div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160;<span class="comment"> are put into FunDefToDeclsMap;</span></div>
945
- <div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160;<span class="comment"> ------------------------------------------------------</span></div>
946
- <div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160;<span class="comment"> In principle, all functions in extapi.c have bodies (definitions), but some functions (those starting with &quot;sse_&quot;)</span></div>
947
- <div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160;<span class="comment"> have only function declarations without definitions. ExtFuncsVec is used to record function declarations starting with &quot;sse_&quot; that are used.</span></div>
948
- <div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160;<span class="comment"></span> </div>
949
- <div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160;<span class="comment"> ExtDecl -&gt; ExtDecl:</span></div>
950
- <div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160;<span class="comment"> For example,</span></div>
951
- <div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160;<span class="comment"> App function:</span></div>
952
- <div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160;<span class="comment"> foo(){call memcpy();}</span></div>
953
- <div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160;<span class="comment"> Ext function:</span></div>
954
- <div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160;<span class="comment"> declare sse_check_overflow();</span></div>
955
- <div class="line"><a name="l00899"></a><span class="lineno"> 899</span>&#160;<span class="comment"> memcpy(){sse_check_overflow();}</span></div>
956
- <div class="line"><a name="l00900"></a><span class="lineno"> 900</span>&#160;<span class="comment"></span> </div>
957
- <div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160;<span class="comment"> sse_check_overflow() used in the Ext function but not in the App function.</span></div>
958
- <div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160;<span class="comment"> sse_check_overflow should be kept in ExtFuncsVec.</span></div>
959
- <div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160;<span class="comment">*/</span></div>
960
- <div class="line"><a name="l00904"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#ac7c646a78c989807c52263fc35fb3628"> 904</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#ac7c646a78c989807c52263fc35fb3628">LLVMModuleSet::buildFunToFunMap</a>()</div>
961
- <div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160;{</div>
962
- <div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const Function*&gt;</a> funDecls, funDefs, extFuncs, overwriteExtFuncs;</div>
963
- <div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160; <a class="code" href="namespaceSVF.html#a4f21e91ff8eaea5207afe5c60dbd78d7">OrderedSet&lt;string&gt;</a> declNames, defNames, intersectNames;</div>
964
- <div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;string, const Function*&gt;</a> NameToFunDefMapTy;</div>
965
- <div class="line"><a name="l00909"></a><span class="lineno"> 909</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>
966
- <div class="line"><a name="l00910"></a><span class="lineno"> 910</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>
967
- <div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160; {</div>
968
- <div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; <span class="comment">// extapi.bc functions</span></div>
969
- <div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160; <span class="keywordflow">if</span> (mod.getName().str() == <a class="code" href="classSVF_1_1ExtAPI.html#a58a764c27354d5f9b70995d30de65f1d">ExtAPI::getExtAPI</a>()-&gt;<a class="code" href="classSVF_1_1ExtAPI.html#a26bc352dbfd1b2fe34106a73f1f6d50c">getExtBcPath</a>())</div>
970
- <div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160; {</div>
971
- <div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#afb06c18fcf916e84dfacb139f644aa48">collectExtFunAnnotations</a>(&amp;mod);</div>
972
- <div class="line"><a name="l00916"></a><span class="lineno"> 916</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>
973
- <div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160; {</div>
974
- <div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160; <span class="comment">// there is main declaration in ext bc, it should be mapped to</span></div>
975
- <div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160; <span class="comment">// main definition in app bc.</span></div>
976
- <div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160; <span class="keywordflow">if</span> (fun.getName().str() == <span class="stringliteral">&quot;main&quot;</span>)</div>
977
- <div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160; {</div>
978
- <div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160; funDecls.insert(&amp;fun);</div>
979
- <div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160; declNames.insert(fun.getName().str());</div>
980
- <div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160; }</div>
981
- <div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fun.getName().str() == <span class="stringliteral">&quot;svf__main&quot;</span>)</div>
982
- <div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; {</div>
983
- <div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#ab932917041e1b1d8b461bfef464330fd">ExtFuncsVec</a>.push_back(&amp;fun);</div>
984
- <div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160; <span class="comment">// Get all called functions in svf_main()</span></div>
985
- <div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160; std::vector&lt;const Function*&gt; calledFunctions = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a47d2af43ff12d9e1014fa19256619466">LLVMUtil::getCalledFunctions</a>(&amp;fun);</div>
986
- <div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#ab932917041e1b1d8b461bfef464330fd">ExtFuncsVec</a>.insert(<a class="code" href="classSVF_1_1LLVMModuleSet.html#ab932917041e1b1d8b461bfef464330fd">ExtFuncsVec</a>.end(), calledFunctions.begin(), calledFunctions.end());</div>
987
- <div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160; }</div>
988
- <div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160; <span class="keywordflow">else</span></div>
989
- <div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160; {</div>
990
- <div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160; extFuncs.insert(&amp;fun);</div>
991
- <div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160; <span class="comment">// Find overwrite functions in extapi.bc</span></div>
992
- <div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1LLVMModuleSet.html#a7968a00d41166d18acb684052ed1eed8">ExtFun2Annotations</a>.find(&amp;fun) != <a class="code" href="classSVF_1_1LLVMModuleSet.html#a7968a00d41166d18acb684052ed1eed8">ExtFun2Annotations</a>.end())</div>
993
- <div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160; {</div>
994
- <div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160; std::vector&lt;std::string&gt; annotations = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a7968a00d41166d18acb684052ed1eed8">ExtFun2Annotations</a>[&amp;fun];</div>
995
- <div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160; <span class="keyword">auto</span> it =</div>
996
- <div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; std::find_if(annotations.begin(), annotations.end(),</div>
997
- <div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; [&amp;](<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a>&amp; annotation)</div>
776
+ <div class="line"><a name="l00718"></a><span class="lineno"> 718</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>
777
+ <div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; </div>
778
+ <div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; <span class="keywordflow">if</span> (funName.equals(<span class="stringliteral">&quot;main&quot;</span>))</div>
779
+ <div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; {</div>
780
+ <div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; orgMain = &amp;func;</div>
781
+ <div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; mainMod = &amp;mod;</div>
782
+ <div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; }</div>
783
+ <div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; }</div>
784
+ <div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; }</div>
785
+ <div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; </div>
786
+ <div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; <span class="comment">// Only create svf.main when the original main function is found, and also</span></div>
787
+ <div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; <span class="comment">// there are global constructor or destructor functions.</span></div>
788
+ <div class="line"><a name="l00730"></a><span class="lineno"> 730</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>
789
+ <div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; (ctor_funcs.size() &gt; 0 || dtor_funcs.size() &gt; 0))</div>
790
+ <div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; {</div>
791
+ <div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; assert(mainMod &amp;&amp; <span class="stringliteral">&quot;Module with main function not found.&quot;</span>);</div>
792
+ <div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; <a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a>&amp; M = *mainMod;</div>
793
+ <div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; <span class="comment">// char **</span></div>
794
+ <div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* ptr = PointerType::getUnqual(M.getContext());</div>
795
+ <div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* i32 = IntegerType::getInt32Ty(M.getContext());</div>
796
+ <div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; <span class="comment">// define void @svf.main(i32, i8**, i8**)</span></div>
797
+ <div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160;<span class="preprocessor">#if (LLVM_VERSION_MAJOR &gt;= 9)</span></div>
798
+ <div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; FunctionCallee svfmainFn = M.getOrInsertFunction(</div>
799
+ <div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; <a class="code" href="LLVMModule_8cpp.html#a10ab7c7da3a458495d8528b9e90d714b">SVF_MAIN_FUNC_NAME</a>,</div>
800
+ <div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; Type::getVoidTy(M.getContext()),</div>
801
+ <div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; i32,ptr,ptr</div>
802
+ <div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; );</div>
803
+ <div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* svfmain = SVFUtil::dyn_cast&lt;Function&gt;(svfmainFn.getCallee());</div>
804
+ <div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160;<span class="preprocessor">#else</span></div>
805
+ <div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* svfmain = SVFUtil::dyn_cast&lt;Function&gt;(M.getOrInsertFunction(</div>
806
+ <div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; <a class="code" href="LLVMModule_8cpp.html#a10ab7c7da3a458495d8528b9e90d714b">SVF_MAIN_FUNC_NAME</a>,</div>
807
+ <div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; Type::getVoidTy(M.getContext()),</div>
808
+ <div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; i32,i8ptr2,i8ptr2</div>
809
+ <div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; ));</div>
810
+ <div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160;<span class="preprocessor">#endif</span></div>
811
+ <div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; svfmain-&gt;setCallingConv(llvm::CallingConv::C);</div>
812
+ <div class="line"><a name="l00754"></a><span class="lineno"> 754</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>
813
+ <div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; <a class="code" href="namespaceSVF.html#a94824519e439aeef1568d415b6f7331c">IRBuilder</a> Builder(block);</div>
814
+ <div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; <span class="comment">// emit &quot;call void @ctor()&quot;. ctor_funcs is sorted so the functions are</span></div>
815
+ <div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; <span class="comment">// emitted in the order of priority</span></div>
816
+ <div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; ctor : ctor_funcs)</div>
817
+ <div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; {</div>
818
+ <div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; <span class="keyword">auto</span> target = M.getOrInsertFunction(</div>
819
+ <div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; ctor-&gt;getName(),</div>
820
+ <div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; Type::getVoidTy(M.getContext())</div>
821
+ <div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; );</div>
822
+ <div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; Builder.CreateCall(target);</div>
823
+ <div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; }</div>
824
+ <div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; <span class="comment">// main() should be called after all ctor functions and before dtor</span></div>
825
+ <div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; <span class="comment">// functions.</span></div>
826
+ <div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; Function::arg_iterator arg_it = svfmain-&gt;arg_begin();</div>
827
+ <div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* args[] = {arg_it, arg_it + 1, arg_it + 2};</div>
828
+ <div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; <span class="keywordtype">size_t</span> cnt = orgMain-&gt;arg_size();</div>
829
+ <div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; assert(cnt &lt;= 3 &amp;&amp; <span class="stringliteral">&quot;Too many arguments for main()&quot;</span>);</div>
830
+ <div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; Builder.CreateCall(orgMain, llvm::ArrayRef&lt;Value*&gt;(args, args + cnt));</div>
831
+ <div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; <span class="comment">// emit &quot;call void @dtor()&quot;. dtor_funcs is sorted so the functions are</span></div>
832
+ <div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; <span class="comment">// emitted in the order of priority</span></div>
833
+ <div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; dtor : dtor_funcs)</div>
834
+ <div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; {</div>
835
+ <div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; <span class="keyword">auto</span> target = M.getOrInsertFunction(dtor-&gt;getName(), Type::getVoidTy(M.getContext()));</div>
836
+ <div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; Builder.CreateCall(target);</div>
837
+ <div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; }</div>
838
+ <div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; <span class="comment">// return;</span></div>
839
+ <div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; Builder.CreateRetVoid();</div>
840
+ <div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; }</div>
841
+ <div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160;}</div>
842
+ <div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; </div>
843
+ <div class="line"><a name="l00785"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#afb06c18fcf916e84dfacb139f644aa48"> 785</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#afb06c18fcf916e84dfacb139f644aa48">LLVMModuleSet::collectExtFunAnnotations</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a>* mod)</div>
844
+ <div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160;{</div>
845
+ <div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a> *glob = mod-&gt;getGlobalVariable(<span class="stringliteral">&quot;llvm.global.annotations&quot;</span>);</div>
846
+ <div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; <span class="keywordflow">if</span> (glob == <span class="keyword">nullptr</span> || !glob-&gt;hasInitializer())</div>
847
+ <div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; <span class="keywordflow">return</span>;</div>
848
+ <div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; </div>
849
+ <div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; <a class="code" href="namespaceSVF.html#a5ae718cba37d8e34d2946530dc098c8e">ConstantArray</a> *ca = SVFUtil::dyn_cast&lt;ConstantArray&gt;(glob-&gt;getInitializer());</div>
850
+ <div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; <span class="keywordflow">if</span> (ca == <span class="keyword">nullptr</span>)</div>
851
+ <div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; <span class="keywordflow">return</span>;</div>
852
+ <div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; </div>
853
+ <div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i &lt; ca-&gt;getNumOperands(); ++i)</div>
854
+ <div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; {</div>
855
+ <div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; <a class="code" href="namespaceSVF.html#a2b28f48dde0a9a91d251e654ce1f9477">ConstantStruct</a> *structAn = SVFUtil::dyn_cast&lt;ConstantStruct&gt;(ca-&gt;getOperand(i));</div>
856
+ <div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; <span class="keywordflow">if</span> (structAn == <span class="keyword">nullptr</span> || structAn-&gt;getNumOperands() == 0)</div>
857
+ <div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; <span class="keywordflow">continue</span>;</div>
858
+ <div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; </div>
859
+ <div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; <span class="comment">// Check if the annotation is for a function</span></div>
860
+ <div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fun = <span class="keyword">nullptr</span>;</div>
861
+ <div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a> *annotateStr = <span class="keyword">nullptr</span>;</div>
862
+ <div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a> *expr = SVFUtil::dyn_cast&lt;ConstantExpr&gt;(structAn-&gt;getOperand(0)))</div>
863
+ <div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; {</div>
864
+ <div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; <span class="keywordflow">if</span> (expr-&gt;getOpcode() == Instruction::BitCast &amp;&amp; SVFUtil::isa&lt;Function&gt;(expr-&gt;getOperand(0)))</div>
865
+ <div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; fun = SVFUtil::cast&lt;Function&gt;(expr-&gt;getOperand(0));</div>
866
+ <div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; </div>
867
+ <div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a> *note = SVFUtil::cast&lt;ConstantExpr&gt;(structAn-&gt;getOperand(1));</div>
868
+ <div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; <span class="keywordflow">if</span> (note-&gt;getOpcode() != Instruction::GetElementPtr)</div>
869
+ <div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; <span class="keywordflow">continue</span>;</div>
870
+ <div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; </div>
871
+ <div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; annotateStr = SVFUtil::dyn_cast&lt;GlobalVariable&gt;(note-&gt;getOperand(0));</div>
872
+ <div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; }</div>
873
+ <div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; <span class="keywordflow">else</span></div>
874
+ <div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; {</div>
875
+ <div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; fun = SVFUtil::dyn_cast&lt;Function&gt;(structAn-&gt;getOperand(0));</div>
876
+ <div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; annotateStr = SVFUtil::dyn_cast&lt;GlobalVariable&gt;(structAn-&gt;getOperand(1));</div>
877
+ <div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; }</div>
878
+ <div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; </div>
879
+ <div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; <span class="keywordflow">if</span> (!fun || annotateStr == <span class="keyword">nullptr</span> || !annotateStr-&gt;hasInitializer())</div>
880
+ <div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; <span class="keywordflow">continue</span>;;</div>
881
+ <div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; </div>
882
+ <div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; <a class="code" href="namespaceSVF.html#a8ad3aa124fabddc2fdd07c50403d70a9">ConstantDataSequential</a> *data = SVFUtil::dyn_cast&lt;ConstantDataSequential&gt;(annotateStr-&gt;getInitializer());</div>
883
+ <div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; <span class="keywordflow">if</span> (data &amp;&amp; data-&gt;isString())</div>
884
+ <div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; {</div>
885
+ <div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> annotation = data-&gt;getAsString().str();</div>
886
+ <div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; <span class="keywordflow">if</span> (!annotation.empty())</div>
887
+ <div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a7968a00d41166d18acb684052ed1eed8">ExtFun2Annotations</a>[fun].push_back(annotation);</div>
888
+ <div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; }</div>
889
+ <div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; }</div>
890
+ <div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160;}</div>
891
+ <div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; </div>
892
+ <div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160;<span class="comment">/*</span></div>
893
+ <div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160;<span class="comment"> For a more detailed explanation of the Function declaration and definition mapping relationships and how External APIs are handled,</span></div>
894
+ <div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160;<span class="comment"> please refer to the SVF Wiki: https://github.com/SVF-tools/SVF/wiki/Handling-External-APIs-with-extapi.c</span></div>
895
+ <div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160;<span class="comment"></span> </div>
896
+ <div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160;<span class="comment"> Table 1</span></div>
897
+ <div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160;<span class="comment"> | ------- | ----------------- | --------------- | ----------------- | ----------- |</span></div>
898
+ <div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160;<span class="comment"> | | AppDef | AppDecl | ExtDef | ExtDecl |</span></div>
899
+ <div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160;<span class="comment"> | ------- | ----------------- | --------------- | ----------------- | ----------- |</span></div>
900
+ <div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160;<span class="comment"> | AppDef | X | FunDefToDeclsMap| FunDeclToDefMap | X |</span></div>
901
+ <div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160;<span class="comment"> | ------- | ----------------- | --------------- | ----------------- | ----------- |</span></div>
902
+ <div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160;<span class="comment"> | AppDecl | FunDeclToDefMap | X | FunDeclToDefMap | X |</span></div>
903
+ <div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160;<span class="comment"> | ------- | ----------------- | --------------- | ----------------- | ----------- |</span></div>
904
+ <div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160;<span class="comment"> | ExtDef | FunDefToDeclsMap | FunDefToDeclsMap| X | X |</span></div>
905
+ <div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160;<span class="comment"> | ------- | ----------------- | --------------- | ----------------- | ----------- |</span></div>
906
+ <div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160;<span class="comment"> | ExtDecl | FunDeclToDefMap | X | X | ExtFuncsVec |</span></div>
907
+ <div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160;<span class="comment"> | ------- | ----------------- | --------------- | ----------------- | ----------- |</span></div>
908
+ <div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160;<span class="comment"></span> </div>
909
+ <div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160;<span class="comment"> When a user wants to use functions in extapi.c to overwrite the functions defined in the app code, two relationships, &quot;AppDef -&gt; ExtDef&quot; and &quot;ExtDef -&gt; AppDef,&quot; are used.</span></div>
910
+ <div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160;<span class="comment"> Use Ext function definition to override the App function definition (Ext function with &quot;__attribute__((annotate(&quot;OVERWRITE&quot;)))&quot; in extapi.c).</span></div>
911
+ <div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160;<span class="comment"> The app function definition will be changed to an app function declaration.</span></div>
912
+ <div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160;<span class="comment"> Then, put the app function declaration and its corresponding Ext function definition into FunDeclToDefMap/FunDefToDeclsMap.</span></div>
913
+ <div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160;<span class="comment"> ------------------------------------------------------</span></div>
914
+ <div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160;<span class="comment"> AppDef -&gt; ExtDef (overwrite):</span></div>
915
+ <div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160;<span class="comment"> For example,</span></div>
916
+ <div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160;<span class="comment"> App function:</span></div>
917
+ <div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160;<span class="comment"> char* foo(char *a, char *b){return a;}</span></div>
918
+ <div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160;<span class="comment"> Ext function:</span></div>
919
+ <div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160;<span class="comment"> __attribute__((annotate(&quot;OVERWRITE&quot;)))</span></div>
920
+ <div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160;<span class="comment"> char* foo(char *a, char *b){return b;}</span></div>
921
+ <div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160;<span class="comment"></span> </div>
922
+ <div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160;<span class="comment"> When SVF handles the foo function in the App module,</span></div>
923
+ <div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160;<span class="comment"> the definition of</span></div>
924
+ <div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160;<span class="comment"> foo: char* foo(char *a, char *b){return a;}</span></div>
925
+ <div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160;<span class="comment"> will be changed to a declaration</span></div>
926
+ <div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160;<span class="comment"> foo: char* foo(char *a, char *b);</span></div>
927
+ <div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160;<span class="comment"> Then,</span></div>
928
+ <div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160;<span class="comment"> foo: char* foo(char *a, char *b);</span></div>
929
+ <div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160;<span class="comment"> and</span></div>
930
+ <div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160;<span class="comment"> __attribute__((annotate(&quot;OVERWRITE&quot;)))</span></div>
931
+ <div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160;<span class="comment"> char* foo(char *a, char *b){return b;}</span></div>
932
+ <div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160;<span class="comment"> will be put into FunDeclToDefMap</span></div>
933
+ <div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160;<span class="comment"> ------------------------------------------------------</span></div>
934
+ <div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160;<span class="comment"> ExtDef -&gt; AppDef (overwrite):</span></div>
935
+ <div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160;<span class="comment"> __attribute__((annotate(&quot;OVERWRITE&quot;)))</span></div>
936
+ <div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160;<span class="comment"> char* foo(char *a, char *b){return b;}</span></div>
937
+ <div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160;<span class="comment"> and</span></div>
938
+ <div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160;<span class="comment"> foo: char* foo(char *a, char *b);</span></div>
939
+ <div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160;<span class="comment"> are put into FunDefToDeclsMap;</span></div>
940
+ <div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160;<span class="comment"> ------------------------------------------------------</span></div>
941
+ <div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160;<span class="comment"> In principle, all functions in extapi.c have bodies (definitions), but some functions (those starting with &quot;sse_&quot;)</span></div>
942
+ <div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160;<span class="comment"> have only function declarations without definitions. ExtFuncsVec is used to record function declarations starting with &quot;sse_&quot; that are used.</span></div>
943
+ <div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160;<span class="comment"></span> </div>
944
+ <div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160;<span class="comment"> ExtDecl -&gt; ExtDecl:</span></div>
945
+ <div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160;<span class="comment"> For example,</span></div>
946
+ <div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160;<span class="comment"> App function:</span></div>
947
+ <div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160;<span class="comment"> foo(){call memcpy();}</span></div>
948
+ <div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160;<span class="comment"> Ext function:</span></div>
949
+ <div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160;<span class="comment"> declare sse_check_overflow();</span></div>
950
+ <div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160;<span class="comment"> memcpy(){sse_check_overflow();}</span></div>
951
+ <div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160;<span class="comment"></span> </div>
952
+ <div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160;<span class="comment"> sse_check_overflow() used in the Ext function but not in the App function.</span></div>
953
+ <div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160;<span class="comment"> sse_check_overflow should be kept in ExtFuncsVec.</span></div>
954
+ <div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160;<span class="comment">*/</span></div>
955
+ <div class="line"><a name="l00899"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#ac7c646a78c989807c52263fc35fb3628"> 899</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#ac7c646a78c989807c52263fc35fb3628">LLVMModuleSet::buildFunToFunMap</a>()</div>
956
+ <div class="line"><a name="l00900"></a><span class="lineno"> 900</span>&#160;{</div>
957
+ <div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const Function*&gt;</a> funDecls, funDefs, extFuncs, overwriteExtFuncs;</div>
958
+ <div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160; <a class="code" href="namespaceSVF.html#a4f21e91ff8eaea5207afe5c60dbd78d7">OrderedSet&lt;string&gt;</a> declNames, defNames, intersectNames;</div>
959
+ <div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;string, const Function*&gt;</a> NameToFunDefMapTy;</div>
960
+ <div class="line"><a name="l00904"></a><span class="lineno"> 904</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>
961
+ <div class="line"><a name="l00905"></a><span class="lineno"> 905</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>
962
+ <div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160; {</div>
963
+ <div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160; <span class="comment">// extapi.bc functions</span></div>
964
+ <div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160; <span class="keywordflow">if</span> (mod.getName().str() == <a class="code" href="classSVF_1_1ExtAPI.html#a58a764c27354d5f9b70995d30de65f1d">ExtAPI::getExtAPI</a>()-&gt;<a class="code" href="classSVF_1_1ExtAPI.html#a26bc352dbfd1b2fe34106a73f1f6d50c">getExtBcPath</a>())</div>
965
+ <div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160; {</div>
966
+ <div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#afb06c18fcf916e84dfacb139f644aa48">collectExtFunAnnotations</a>(&amp;mod);</div>
967
+ <div class="line"><a name="l00911"></a><span class="lineno"> 911</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>
968
+ <div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; {</div>
969
+ <div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160; <span class="comment">// there is main declaration in ext bc, it should be mapped to</span></div>
970
+ <div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160; <span class="comment">// main definition in app bc.</span></div>
971
+ <div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160; <span class="keywordflow">if</span> (fun.getName().str() == <span class="stringliteral">&quot;main&quot;</span>)</div>
972
+ <div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160; {</div>
973
+ <div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160; funDecls.insert(&amp;fun);</div>
974
+ <div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160; declNames.insert(fun.getName().str());</div>
975
+ <div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160; }</div>
976
+ <div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fun.getName().str() == <span class="stringliteral">&quot;svf__main&quot;</span>)</div>
977
+ <div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160; {</div>
978
+ <div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#ab932917041e1b1d8b461bfef464330fd">ExtFuncsVec</a>.push_back(&amp;fun);</div>
979
+ <div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160; <span class="comment">// Get all called functions in svf_main()</span></div>
980
+ <div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160; std::vector&lt;const Function*&gt; calledFunctions = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a47d2af43ff12d9e1014fa19256619466">LLVMUtil::getCalledFunctions</a>(&amp;fun);</div>
981
+ <div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#ab932917041e1b1d8b461bfef464330fd">ExtFuncsVec</a>.insert(<a class="code" href="classSVF_1_1LLVMModuleSet.html#ab932917041e1b1d8b461bfef464330fd">ExtFuncsVec</a>.end(), calledFunctions.begin(), calledFunctions.end());</div>
982
+ <div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; }</div>
983
+ <div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; <span class="keywordflow">else</span></div>
984
+ <div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160; {</div>
985
+ <div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160; extFuncs.insert(&amp;fun);</div>
986
+ <div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; <span class="comment">// Find overwrite functions in extapi.bc</span></div>
987
+ <div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1LLVMModuleSet.html#a7968a00d41166d18acb684052ed1eed8">ExtFun2Annotations</a>.find(&amp;fun) != <a class="code" href="classSVF_1_1LLVMModuleSet.html#a7968a00d41166d18acb684052ed1eed8">ExtFun2Annotations</a>.end())</div>
988
+ <div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160; {</div>
989
+ <div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160; std::vector&lt;std::string&gt; annotations = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a7968a00d41166d18acb684052ed1eed8">ExtFun2Annotations</a>[&amp;fun];</div>
990
+ <div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160; <span class="keyword">auto</span> it =</div>
991
+ <div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160; std::find_if(annotations.begin(), annotations.end(),</div>
992
+ <div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160; [&amp;](<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a>&amp; annotation)</div>
993
+ <div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160; {</div>
994
+ <div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160; return annotation.find(<span class="stringliteral">&quot;OVERWRITE&quot;</span>) !=</div>
995
+ <div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160; std::string::npos;</div>
996
+ <div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; });</div>
997
+ <div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; <span class="keywordflow">if</span> (it != annotations.end())</div>
998
998
  <div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160; {</div>
999
- <div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; return annotation.find(<span class="stringliteral">&quot;OVERWRITE&quot;</span>) !=</div>
1000
- <div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160; std::string::npos;</div>
1001
- <div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160; });</div>
1002
- <div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160; <span class="keywordflow">if</span> (it != annotations.end())</div>
1003
- <div class="line"><a name="l00948"></a><span class="lineno"> 948</span>&#160; {</div>
1004
- <div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160; overwriteExtFuncs.insert(&amp;fun);</div>
1005
- <div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160; }</div>
1006
- <div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160; }</div>
1007
- <div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160; }</div>
1008
- <div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160; }</div>
1009
- <div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160; }</div>
1010
- <div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160; <span class="keywordflow">else</span></div>
1011
- <div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; {</div>
1012
- <div class="line"><a name="l00958"></a><span class="lineno"> 958</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>
1013
- <div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160; {</div>
1014
- <div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; <span class="keywordflow">if</span> (fun.isDeclaration())</div>
999
+ <div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; overwriteExtFuncs.insert(&amp;fun);</div>
1000
+ <div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160; }</div>
1001
+ <div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160; }</div>
1002
+ <div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160; }</div>
1003
+ <div class="line"><a name="l00948"></a><span class="lineno"> 948</span>&#160; }</div>
1004
+ <div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160; }</div>
1005
+ <div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160; <span class="keywordflow">else</span></div>
1006
+ <div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160; {</div>
1007
+ <div class="line"><a name="l00953"></a><span class="lineno"> 953</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>
1008
+ <div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160; {</div>
1009
+ <div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160; <span class="keywordflow">if</span> (fun.isDeclaration())</div>
1010
+ <div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; {</div>
1011
+ <div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; funDecls.insert(&amp;fun);</div>
1012
+ <div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; declNames.insert(fun.getName().str());</div>
1013
+ <div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160; }</div>
1014
+ <div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; <span class="keywordflow">else</span></div>
1015
1015
  <div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160; {</div>
1016
- <div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160; funDecls.insert(&amp;fun);</div>
1017
- <div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160; declNames.insert(fun.getName().str());</div>
1016
+ <div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160; funDefs.insert(&amp;fun);</div>
1017
+ <div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160; defNames.insert(fun.getName().str());</div>
1018
1018
  <div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160; }</div>
1019
- <div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160; <span class="keywordflow">else</span></div>
1020
- <div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160; {</div>
1021
- <div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160; funDefs.insert(&amp;fun);</div>
1022
- <div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160; defNames.insert(fun.getName().str());</div>
1023
- <div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160; }</div>
1024
- <div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160; }</div>
1025
- <div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160; }</div>
1026
- <div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; }</div>
1027
- <div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160; <span class="comment">// Find the intersectNames</span></div>
1028
- <div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160; std::set_intersection(</div>
1029
- <div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160; declNames.begin(), declNames.end(), defNames.begin(), defNames.end(),</div>
1030
- <div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; std::inserter(intersectNames, intersectNames.end()));</div>
1031
- <div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; </div>
1032
- <div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; NameToFunDefMapTy nameToFunDefMap;</div>
1033
- <div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fdef : funDefs)</div>
1034
- <div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160; {</div>
1035
- <div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160; <span class="keywordtype">string</span> funName = fdef-&gt;getName().str();</div>
1036
- <div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160; <span class="keywordflow">if</span> (intersectNames.find(funName) != intersectNames.end())</div>
1037
- <div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160; {</div>
1038
- <div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160; nameToFunDefMap.emplace(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(funName), fdef);</div>
1039
- <div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160; }</div>
1040
- <div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; }</div>
1041
- <div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; </div>
1042
- <div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160; NameToFunDeclsMapTy nameToFunDeclsMap;</div>
1043
- <div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fdecl : funDecls)</div>
1044
- <div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160; {</div>
1045
- <div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160; <span class="keywordtype">string</span> funName = fdecl-&gt;getName().str();</div>
1046
- <div class="line"><a name="l00994"></a><span class="lineno"> 994</span>&#160; <span class="keywordflow">if</span> (intersectNames.find(funName) != intersectNames.end())</div>
1047
- <div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160; {</div>
1048
- <div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160; <span class="comment">// pair with key funName will be created automatically if it does</span></div>
1049
- <div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160; <span class="comment">// not exist</span></div>
1050
- <div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160; nameToFunDeclsMap[<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(funName)].insert(fdecl);</div>
1051
- <div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160; }</div>
1052
- <div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160; }</div>
1053
- <div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160; </div>
1054
- <div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fdecl : funDecls)</div>
1055
- <div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160; {</div>
1056
- <div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; <span class="keywordtype">string</span> funName = fdecl-&gt;getName().str();</div>
1057
- <div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160; NameToFunDefMapTy::iterator mit;</div>
1058
- <div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160; <span class="keywordflow">if</span> (intersectNames.find(funName) != intersectNames.end() &amp;&amp;</div>
1059
- <div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160; (mit = nameToFunDefMap.find(funName)) != nameToFunDefMap.end())</div>
1060
- <div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160; {</div>
1061
- <div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#aee80b29e5246e3eaa0e30e165346101f">FunDeclToDefMap</a>[fdecl] = mit-&gt;second;</div>
1062
- <div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160; }</div>
1063
- <div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160; }</div>
1064
- <div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; </div>
1065
- <div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fdef : funDefs)</div>
1066
- <div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; {</div>
1067
- <div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160; <span class="keywordtype">string</span> funName = fdef-&gt;getName().str();</div>
1068
- <div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; <span class="keywordflow">if</span> (intersectNames.find(funName) == intersectNames.end())</div>
1069
- <div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; <span class="keywordflow">continue</span>;</div>
1070
- <div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; NameToFunDeclsMapTy::iterator mit = nameToFunDeclsMap.find(funName);</div>
1071
- <div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160; <span class="keywordflow">if</span> (mit == nameToFunDeclsMap.end())</div>
1072
- <div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160; <span class="keywordflow">continue</span>;</div>
1019
+ <div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160; }</div>
1020
+ <div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160; }</div>
1021
+ <div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160; }</div>
1022
+ <div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160; <span class="comment">// Find the intersectNames</span></div>
1023
+ <div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160; std::set_intersection(</div>
1024
+ <div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160; declNames.begin(), declNames.end(), defNames.begin(), defNames.end(),</div>
1025
+ <div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160; std::inserter(intersectNames, intersectNames.end()));</div>
1026
+ <div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; </div>
1027
+ <div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160; NameToFunDefMapTy nameToFunDefMap;</div>
1028
+ <div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fdef : funDefs)</div>
1029
+ <div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; {</div>
1030
+ <div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; <span class="keywordtype">string</span> funName = fdef-&gt;getName().str();</div>
1031
+ <div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160; <span class="keywordflow">if</span> (intersectNames.find(funName) != intersectNames.end())</div>
1032
+ <div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; {</div>
1033
+ <div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160; nameToFunDefMap.emplace(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(funName), fdef);</div>
1034
+ <div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160; }</div>
1035
+ <div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160; }</div>
1036
+ <div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160; </div>
1037
+ <div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160; NameToFunDeclsMapTy nameToFunDeclsMap;</div>
1038
+ <div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fdecl : funDecls)</div>
1039
+ <div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; {</div>
1040
+ <div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; <span class="keywordtype">string</span> funName = fdecl-&gt;getName().str();</div>
1041
+ <div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160; <span class="keywordflow">if</span> (intersectNames.find(funName) != intersectNames.end())</div>
1042
+ <div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160; {</div>
1043
+ <div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160; <span class="comment">// pair with key funName will be created automatically if it does</span></div>
1044
+ <div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160; <span class="comment">// not exist</span></div>
1045
+ <div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160; nameToFunDeclsMap[<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(funName)].insert(fdecl);</div>
1046
+ <div class="line"><a name="l00994"></a><span class="lineno"> 994</span>&#160; }</div>
1047
+ <div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160; }</div>
1048
+ <div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160; </div>
1049
+ <div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fdecl : funDecls)</div>
1050
+ <div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160; {</div>
1051
+ <div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160; <span class="keywordtype">string</span> funName = fdecl-&gt;getName().str();</div>
1052
+ <div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160; NameToFunDefMapTy::iterator mit;</div>
1053
+ <div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160; <span class="keywordflow">if</span> (intersectNames.find(funName) != intersectNames.end() &amp;&amp;</div>
1054
+ <div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160; (mit = nameToFunDefMap.find(funName)) != nameToFunDefMap.end())</div>
1055
+ <div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160; {</div>
1056
+ <div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#aee80b29e5246e3eaa0e30e165346101f">FunDeclToDefMap</a>[fdecl] = mit-&gt;second;</div>
1057
+ <div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160; }</div>
1058
+ <div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160; }</div>
1059
+ <div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160; </div>
1060
+ <div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fdef : funDefs)</div>
1061
+ <div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160; {</div>
1062
+ <div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160; <span class="keywordtype">string</span> funName = fdef-&gt;getName().str();</div>
1063
+ <div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; <span class="keywordflow">if</span> (intersectNames.find(funName) == intersectNames.end())</div>
1064
+ <div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160; <span class="keywordflow">continue</span>;</div>
1065
+ <div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160; NameToFunDeclsMapTy::iterator mit = nameToFunDeclsMap.find(funName);</div>
1066
+ <div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; <span class="keywordflow">if</span> (mit == nameToFunDeclsMap.end())</div>
1067
+ <div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160; <span class="keywordflow">continue</span>;</div>
1068
+ <div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; </div>
1069
+ <div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; std::vector&lt;const Function*&gt;&amp; decls = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a377cefaad4b688ab6edf94ba4abe00ee">FunDefToDeclsMap</a>[fdef];</div>
1070
+ <div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span>&amp; declsSet = mit-&gt;second;</div>
1071
+ <div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160; <span class="comment">// Reserve space for decls to avoid more than 1 reallocation</span></div>
1072
+ <div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160; decls.reserve(decls.size() + declsSet.size());</div>
1073
1073
  <div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160; </div>
1074
- <div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160; std::vector&lt;const Function*&gt;&amp; decls = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a377cefaad4b688ab6edf94ba4abe00ee">FunDefToDeclsMap</a>[fdef];</div>
1075
- <div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span>&amp; declsSet = mit-&gt;second;</div>
1076
- <div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160; <span class="comment">// Reserve space for decls to avoid more than 1 reallocation</span></div>
1077
- <div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160; decls.reserve(decls.size() + declsSet.size());</div>
1078
- <div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160; </div>
1079
- <div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* decl : declsSet)</div>
1080
- <div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160; {</div>
1081
- <div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160; decls.push_back(decl);</div>
1082
- <div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160; }</div>
1083
- <div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160; }</div>
1084
- <div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160; </div>
1085
- <div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fdecl : funDecls)</div>
1086
- <div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; {</div>
1087
- <div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> declName = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#af4c9c5d445107b1816a4be93852ba612">LLVMUtil::restoreFuncName</a>(fdecl-&gt;getName().str());</div>
1088
- <div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* extfun : extFuncs)</div>
1089
- <div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; {</div>
1090
- <div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160; <span class="keywordflow">if</span> (extfun-&gt;getName().str().compare(declName) == 0)</div>
1091
- <div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; {</div>
1092
- <div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; <span class="comment">// AppDecl -&gt; ExtDef in Table 1</span></div>
1093
- <div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#aee80b29e5246e3eaa0e30e165346101f">FunDeclToDefMap</a>[fdecl] = extfun;</div>
1094
- <div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160; <span class="comment">// ExtDef -&gt; AppDecl in Table 1</span></div>
1095
- <div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160; std::vector&lt;const Function*&gt;&amp; decls = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a377cefaad4b688ab6edf94ba4abe00ee">FunDefToDeclsMap</a>[extfun];</div>
1096
- <div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160; decls.push_back(fdecl);</div>
1097
- <div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; <span class="comment">// Keep all called functions in extfun</span></div>
1098
- <div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160; <span class="comment">// ExtDecl -&gt; ExtDecl in Table 1</span></div>
1099
- <div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; std::vector&lt;const Function*&gt; calledFunctions = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a47d2af43ff12d9e1014fa19256619466">LLVMUtil::getCalledFunctions</a>(extfun);</div>
1100
- <div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#ab932917041e1b1d8b461bfef464330fd">ExtFuncsVec</a>.insert(<a class="code" href="classSVF_1_1LLVMModuleSet.html#ab932917041e1b1d8b461bfef464330fd">ExtFuncsVec</a>.end(), calledFunctions.begin(), calledFunctions.end());</div>
1101
- <div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160; <span class="keywordflow">break</span>;</div>
1102
- <div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160; }</div>
1103
- <div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160; }</div>
1104
- <div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160; }</div>
1105
- <div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160; </div>
1106
- <div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* appfunc : funDefs)</div>
1107
- <div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160; {</div>
1108
- <div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> appfuncName = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#af4c9c5d445107b1816a4be93852ba612">LLVMUtil::restoreFuncName</a>(appfunc-&gt;getName().str());</div>
1109
- <div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* owfunc : overwriteExtFuncs)</div>
1110
- <div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160; {</div>
1111
- <div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160; <span class="keywordflow">if</span> (appfuncName.compare(owfunc-&gt;getName().str()) == 0)</div>
1112
- <div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160; {</div>
1113
- <div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160; <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* returnType1 = appfunc-&gt;getReturnType();</div>
1114
- <div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160; <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* returnType2 = owfunc-&gt;getReturnType();</div>
1115
- <div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160; </div>
1116
- <div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160; <span class="comment">// Check if the return types are compatible:</span></div>
1117
- <div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160; <span class="comment">// (1) The types are exactly the same,</span></div>
1118
- <div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160; <span class="comment">// (2) Both are pointer types, and at least one of them is a void*.</span></div>
1119
- <div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160; <span class="comment">// Note that getPointerElementType() will be deprecated in the future versions of LLVM.</span></div>
1120
- <div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160; <span class="comment">// Considering compatibility, avoid using getPointerElementType()-&gt;isIntegerTy(8) to determine if it is a void * type.</span></div>
1121
- <div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160; <span class="keywordflow">if</span> (!(returnType1 == returnType2 || (returnType1-&gt;isPointerTy() &amp;&amp; returnType2-&gt;isPointerTy())))</div>
1122
- <div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160; {</div>
1123
- <div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160; <span class="keywordflow">continue</span>;</div>
1124
- <div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160; }</div>
1125
- <div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160; </div>
1126
- <div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160; <span class="keywordflow">if</span> (appfunc-&gt;arg_size() != owfunc-&gt;arg_size())</div>
1127
- <div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160; <span class="keywordflow">continue</span>;</div>
1128
- <div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160; </div>
1129
- <div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160; <span class="keywordtype">bool</span> argMismatch = <span class="keyword">false</span>;</div>
1130
- <div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160; Function::const_arg_iterator argIter1 = appfunc-&gt;arg_begin();</div>
1131
- <div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160; Function::const_arg_iterator argIter2 = owfunc-&gt;arg_begin();</div>
1132
- <div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160; <span class="keywordflow">while</span> (argIter1 != appfunc-&gt;arg_end() &amp;&amp; argIter2 != owfunc-&gt;arg_end())</div>
1133
- <div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160; {</div>
1134
- <div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160; <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* argType1 = argIter1-&gt;getType();</div>
1135
- <div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160; <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* argType2 = argIter2-&gt;getType();</div>
1136
- <div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160; </div>
1137
- <div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160; <span class="comment">// Check if the parameters types are compatible: (1) The types are exactly the same, (2) Both are pointer types, and at least one of them is a void*.</span></div>
1138
- <div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160; <span class="keywordflow">if</span> (!(argType1 == argType2 || (argType1-&gt;isPointerTy() &amp;&amp; argType2-&gt;isPointerTy())))</div>
1139
- <div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160; {</div>
1140
- <div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160; argMismatch = <span class="keyword">true</span>;</div>
1141
- <div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160; <span class="keywordflow">break</span>;</div>
1142
- <div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160; }</div>
1143
- <div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160; argIter1++;</div>
1144
- <div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160; argIter2++;</div>
1145
- <div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160; }</div>
1146
- <div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160; <span class="keywordflow">if</span> (argMismatch)</div>
1147
- <div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160; <span class="keywordflow">continue</span>;</div>
1148
- <div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160; </div>
1149
- <div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160; <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fun = <span class="keyword">const_cast&lt;</span><a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>*<span class="keyword">&gt;</span>(appfunc);</div>
1150
- <div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160; <a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a>* mod = fun-&gt;getParent();</div>
1151
- <div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160; <a class="code" href="namespaceSVF.html#a6ec0236303089a01fd9da36a8bb84e0a">FunctionType</a>* funType = fun-&gt;getFunctionType();</div>
1152
- <div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> funName = fun-&gt;getName().str();</div>
1153
- <div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160; <span class="comment">// Replace app function definition with declaration</span></div>
1154
- <div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160; <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* declaration = Function::Create(funType, GlobalValue::ExternalLinkage, funName, mod);</div>
1155
- <div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160; fun-&gt;replaceAllUsesWith(declaration);</div>
1156
- <div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160; fun-&gt;eraseFromParent();</div>
1157
- <div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160; declaration-&gt;setName(funName);</div>
1158
- <div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160; <span class="comment">// AppDef -&gt; ExtDef in Table 1, AppDef has been changed to AppDecl</span></div>
1159
- <div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#aee80b29e5246e3eaa0e30e165346101f">FunDeclToDefMap</a>[declaration] = owfunc;</div>
1160
- <div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160; <span class="comment">// ExtDef -&gt; AppDef in Table 1</span></div>
1161
- <div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160; std::vector&lt;const Function*&gt;&amp; decls = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a377cefaad4b688ab6edf94ba4abe00ee">FunDefToDeclsMap</a>[owfunc];</div>
1162
- <div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160; decls.push_back(declaration);</div>
1163
- <div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160; <span class="comment">// Keep all called functions in owfunc</span></div>
1164
- <div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160; <span class="comment">// ExtDecl -&gt; ExtDecl in Table 1</span></div>
1165
- <div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160; std::vector&lt;const Function*&gt; calledFunctions = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a47d2af43ff12d9e1014fa19256619466">LLVMUtil::getCalledFunctions</a>(owfunc);</div>
1166
- <div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#ab932917041e1b1d8b461bfef464330fd">ExtFuncsVec</a>.insert(<a class="code" href="classSVF_1_1LLVMModuleSet.html#ab932917041e1b1d8b461bfef464330fd">ExtFuncsVec</a>.end(), calledFunctions.begin(), calledFunctions.end());</div>
1167
- <div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160; <span class="keywordflow">break</span>;</div>
1168
- <div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160; }</div>
1169
- <div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160; }</div>
1170
- <div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160; }</div>
1171
- <div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160;}</div>
1172
- <div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160; </div>
1173
- <div class="line"><a name="l01126"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#aaab03cb6ff665bc008c67b866ba81e47"> 1126</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#aaab03cb6ff665bc008c67b866ba81e47">LLVMModuleSet::buildGlobalDefToRepMap</a>()</div>
1174
- <div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160;{</div>
1175
- <div class="line"><a name="l01128"></a><span class="lineno"> 1128</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>
1176
- <div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160; NameToGlobalsMapTy nameToGlobalsMap;</div>
1177
- <div class="line"><a name="l01130"></a><span class="lineno"> 1130</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>
1178
- <div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160; {</div>
1179
- <div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160; <span class="comment">// Collect ctor and dtor functions</span></div>
1180
- <div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>&amp; global : mod.globals())</div>
1181
- <div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160; {</div>
1182
- <div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160; <span class="keywordflow">if</span> (global.hasPrivateLinkage())</div>
1183
- <div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160; <span class="keywordflow">continue</span>;</div>
1184
- <div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160; <span class="keywordtype">string</span> <a class="code" href="cJSON_8h.html#a25d22ecc7e656d2c59332072684e8766">name</a> = global.getName().str();</div>
1185
- <div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8h.html#a25d22ecc7e656d2c59332072684e8766">name</a>.empty())</div>
1186
- <div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; <span class="keywordflow">continue</span>;</div>
1187
- <div class="line"><a name="l01140"></a><span class="lineno"> 1140</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>
1188
- <div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160; }</div>
1189
- <div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160; }</div>
1190
- <div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160; </div>
1191
- <div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; pair : nameToGlobalsMap)</div>
1192
- <div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160; {</div>
1193
- <div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;GlobalVariable*&gt;</a> &amp;globals = pair.second;</div>
1194
- <div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160; </div>
1195
- <div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> repIt =</div>
1196
- <div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160; std::find_if(globals.begin(), globals.end(),</div>
1197
- <div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160; [](<a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>* g)</div>
1198
- <div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160; {</div>
1199
- <div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160; return g-&gt;hasInitializer();</div>
1200
- <div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160; });</div>
1201
- <div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160; <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>* rep =</div>
1202
- <div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160; repIt != globals.end()</div>
1203
- <div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160; ? *repIt</div>
1204
- <div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160; <span class="comment">// When there is no initializer, just pick the first one.</span></div>
1205
- <div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160; : (assert(!globals.empty() &amp;&amp; <span class="stringliteral">&quot;Empty global set&quot;</span>),</div>
1206
- <div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160; *globals.begin());</div>
1207
- <div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160; </div>
1208
- <div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>* cur : globals)</div>
1209
- <div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160; {</div>
1210
- <div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#ae2a1fa0b908cf372c50af90e62c4bf2b">GlobalDefToRepMap</a>[cur] = rep;</div>
1211
- <div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160; }</div>
1212
- <div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160; }</div>
1213
- <div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160;}</div>
1214
- <div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160; </div>
1215
- <div class="line"><a name="l01168"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#aeaf96b0a6ee4b321a173374137ebe5e4"> 1168</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#aeaf96b0a6ee4b321a173374137ebe5e4">LLVMModuleSet::removeUnusedExtAPIs</a>()</div>
1216
- <div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160;{</div>
1217
- <div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;Function*&gt;</a> removedFuncList;</div>
1218
- <div class="line"><a name="l01171"></a><span class="lineno"> 1171</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>
1219
- <div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160; {</div>
1220
- <div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160; <span class="keywordflow">if</span> (mod.getName().str() != <a class="code" href="classSVF_1_1ExtAPI.html#a58a764c27354d5f9b70995d30de65f1d">ExtAPI::getExtAPI</a>()-&gt;<a class="code" href="classSVF_1_1ExtAPI.html#a26bc352dbfd1b2fe34106a73f1f6d50c">getExtBcPath</a>())</div>
1221
- <div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160; <span class="keywordflow">continue</span>;</div>
1222
- <div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>&amp; func : mod.functions())</div>
1223
- <div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160; {</div>
1224
- <div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1LLVMModuleSet.html#abbca1044dc59299224598ec2ba17fe7e">isCalledExtFunction</a>(&amp;func))</div>
1225
- <div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160; {</div>
1226
- <div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160; removedFuncList.insert(&amp;func);</div>
1227
- <div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a7968a00d41166d18acb684052ed1eed8">ExtFun2Annotations</a>.erase(&amp;func);</div>
1228
- <div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160; }</div>
1229
- <div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160; }</div>
1230
- <div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160; }</div>
1231
- <div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a484bbbc9713fc4be173943e6bc177fb5">LLVMUtil::removeUnusedFuncsAndAnnotationsAndGlobalVariables</a>(removedFuncList);</div>
1232
- <div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160;}</div>
1233
- <div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160; </div>
1234
- <div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160;<span class="comment">// Dump modules to files</span></div>
1235
- <div class="line"><a name="l01188"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#af37b9976b282c875cac7bb1777da635c"> 1188</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>
1236
- <div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160;{</div>
1237
- <div class="line"><a name="l01190"></a><span class="lineno"> 1190</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>
1238
- <div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160; {</div>
1239
- <div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> moduleName = mod.getName().str();</div>
1240
- <div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> OutputFilename;</div>
1241
- <div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160; std::size_t pos = moduleName.rfind(<span class="charliteral">&#39;.&#39;</span>);</div>
1242
- <div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160; <span class="keywordflow">if</span> (pos != std::string::npos)</div>
1243
- <div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160; OutputFilename = moduleName.substr(0, pos) + suffix;</div>
1244
- <div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160; <span class="keywordflow">else</span></div>
1245
- <div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160; OutputFilename = moduleName + suffix;</div>
1246
- <div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160; </div>
1247
- <div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160; std::error_code EC;</div>
1248
- <div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160; <a class="code" href="namespaceSVF.html#a1c7c7ac12791c0ae386283c0a4f127ba">raw_fd_ostream</a> OS(OutputFilename.c_str(), EC, llvm::sys::fs::OF_None);</div>
1249
- <div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160; </div>
1250
- <div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160;<span class="preprocessor">#if (LLVM_VERSION_MAJOR &gt;= 7)</span></div>
1251
- <div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160; WriteBitcodeToFile(mod, OS);</div>
1252
- <div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160;<span class="preprocessor">#else</span></div>
1253
- <div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160; WriteBitcodeToFile(&amp;mod, OS);</div>
1254
- <div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160;<span class="preprocessor">#endif</span></div>
1255
- <div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160; </div>
1256
- <div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160; OS.flush();</div>
1257
- <div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160; }</div>
1258
- <div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160;}</div>
1259
- <div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160; </div>
1260
- <div class="line"><a name="l01213"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a7d61f479f52e1dc71a4ae7a4d62f3b6a"> 1213</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>
1261
- <div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160;{</div>
1262
- <div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a7f8e61cf5d838d7a2e862bc6955f16be">SVFValue2LLVMValue</a>[svfvalue] = val;</div>
1263
- <div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160; </div>
1264
- <div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a07c785d931cef3c61e3dab4c615770be">LLVMUtil::isPtrInUncalledFunction</a>(val))</div>
1265
- <div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160; svfvalue-&gt;<a class="code" href="classSVF_1_1SVFValue.html#ac2e5c42d0ac92375c88ef5b3f1b65dc4">setPtrInUncalledFunction</a>();</div>
1266
- <div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a8a77403306e97ab4cb31a56d38bba5be">LLVMUtil::isConstDataOrAggData</a>(val))</div>
1267
- <div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160; svfvalue-&gt;<a class="code" href="classSVF_1_1SVFValue.html#afe1de41ca3215b325d0ca61814c6bd6b">setConstDataOrAggData</a>();</div>
1268
- <div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160; </div>
1269
- <div class="line"><a name="l01222"></a><span class="lineno"> 1222</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>
1270
- <div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160; {</div>
1271
- <div class="line"><a name="l01224"></a><span class="lineno"> 1224</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#a973ee05189ca5bbe832be00f2be9baa4">LLVMUtil::getGlobalRep</a>(val);</div>
1272
- <div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160; assert(SVFUtil::isa&lt;GlobalValue&gt;(llvmVal) &amp;&amp; <span class="stringliteral">&quot;not a GlobalValue?&quot;</span>);</div>
1273
- <div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160; glob-&gt;setDefGlobalForMultipleModule(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a3cbba2eb702a3481478b2590dfffa352">getSVFGlobalValue</a>(SVFUtil::cast&lt;GlobalValue&gt;(llvmVal)));</div>
1274
- <div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160; }</div>
1275
- <div class="line"><a name="l01228"></a><span class="lineno"> 1228</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>
1276
- <div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160; {</div>
1277
- <div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* func = SVFUtil::cast&lt;Function&gt;(val);</div>
1278
- <div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160; svffun-&gt;setIsNotRet(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a651b6a1cf3665277d2241220bb145aed">LLVMUtil::functionDoesNotRet</a>(func));</div>
1279
- <div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160; svffun-&gt;setIsUncalledFunction(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a2c61d741afbcfa853b505cd391f29f9b">LLVMUtil::isUncalledFunction</a>(func));</div>
1280
- <div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160; svffun-&gt;setDefFunForMultipleModule(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a50fc24901350df9db890ba16a9b87e33">getSVFFunction</a>(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a21636200f17c62034720c4287aa818b5">LLVMUtil::getDefFunForMultipleModule</a>(func)));</div>
1281
- <div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160; }</div>
1074
+ <div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* decl : declsSet)</div>
1075
+ <div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; {</div>
1076
+ <div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160; decls.push_back(decl);</div>
1077
+ <div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160; }</div>
1078
+ <div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160; }</div>
1079
+ <div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160; </div>
1080
+ <div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fdecl : funDecls)</div>
1081
+ <div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160; {</div>
1082
+ <div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> declName = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#af4c9c5d445107b1816a4be93852ba612">LLVMUtil::restoreFuncName</a>(fdecl-&gt;getName().str());</div>
1083
+ <div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* extfun : extFuncs)</div>
1084
+ <div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; {</div>
1085
+ <div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160; <span class="keywordflow">if</span> (extfun-&gt;getName().str().compare(declName) == 0)</div>
1086
+ <div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; {</div>
1087
+ <div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; <span class="comment">// AppDecl -&gt; ExtDef in Table 1</span></div>
1088
+ <div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#aee80b29e5246e3eaa0e30e165346101f">FunDeclToDefMap</a>[fdecl] = extfun;</div>
1089
+ <div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; <span class="comment">// ExtDef -&gt; AppDecl in Table 1</span></div>
1090
+ <div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160; std::vector&lt;const Function*&gt;&amp; decls = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a377cefaad4b688ab6edf94ba4abe00ee">FunDefToDeclsMap</a>[extfun];</div>
1091
+ <div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; decls.push_back(fdecl);</div>
1092
+ <div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; <span class="comment">// Keep all called functions in extfun</span></div>
1093
+ <div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160; <span class="comment">// ExtDecl -&gt; ExtDecl in Table 1</span></div>
1094
+ <div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160; std::vector&lt;const Function*&gt; calledFunctions = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a47d2af43ff12d9e1014fa19256619466">LLVMUtil::getCalledFunctions</a>(extfun);</div>
1095
+ <div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#ab932917041e1b1d8b461bfef464330fd">ExtFuncsVec</a>.insert(<a class="code" href="classSVF_1_1LLVMModuleSet.html#ab932917041e1b1d8b461bfef464330fd">ExtFuncsVec</a>.end(), calledFunctions.begin(), calledFunctions.end());</div>
1096
+ <div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160; <span class="keywordflow">break</span>;</div>
1097
+ <div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; }</div>
1098
+ <div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160; }</div>
1099
+ <div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; }</div>
1100
+ <div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160; </div>
1101
+ <div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* appfunc : funDefs)</div>
1102
+ <div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160; {</div>
1103
+ <div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> appfuncName = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#af4c9c5d445107b1816a4be93852ba612">LLVMUtil::restoreFuncName</a>(appfunc-&gt;getName().str());</div>
1104
+ <div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* owfunc : overwriteExtFuncs)</div>
1105
+ <div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160; {</div>
1106
+ <div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; <span class="keywordflow">if</span> (appfuncName.compare(owfunc-&gt;getName().str()) == 0)</div>
1107
+ <div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160; {</div>
1108
+ <div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160; <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* returnType1 = appfunc-&gt;getReturnType();</div>
1109
+ <div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160; <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* returnType2 = owfunc-&gt;getReturnType();</div>
1110
+ <div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160; </div>
1111
+ <div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160; <span class="comment">// Check if the return types are compatible:</span></div>
1112
+ <div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160; <span class="comment">// (1) The types are exactly the same,</span></div>
1113
+ <div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160; <span class="comment">// (2) Both are pointer types, and at least one of them is a void*.</span></div>
1114
+ <div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160; <span class="comment">// Note that getPointerElementType() will be deprecated in the future versions of LLVM.</span></div>
1115
+ <div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160; <span class="comment">// Considering compatibility, avoid using getPointerElementType()-&gt;isIntegerTy(8) to determine if it is a void * type.</span></div>
1116
+ <div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160; <span class="keywordflow">if</span> (!(returnType1 == returnType2 || (returnType1-&gt;isPointerTy() &amp;&amp; returnType2-&gt;isPointerTy())))</div>
1117
+ <div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160; {</div>
1118
+ <div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160; <span class="keywordflow">continue</span>;</div>
1119
+ <div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160; }</div>
1120
+ <div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160; </div>
1121
+ <div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160; <span class="keywordflow">if</span> (appfunc-&gt;arg_size() != owfunc-&gt;arg_size())</div>
1122
+ <div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160; <span class="keywordflow">continue</span>;</div>
1123
+ <div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160; </div>
1124
+ <div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160; <span class="keywordtype">bool</span> argMismatch = <span class="keyword">false</span>;</div>
1125
+ <div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160; Function::const_arg_iterator argIter1 = appfunc-&gt;arg_begin();</div>
1126
+ <div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160; Function::const_arg_iterator argIter2 = owfunc-&gt;arg_begin();</div>
1127
+ <div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160; <span class="keywordflow">while</span> (argIter1 != appfunc-&gt;arg_end() &amp;&amp; argIter2 != owfunc-&gt;arg_end())</div>
1128
+ <div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160; {</div>
1129
+ <div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160; <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* argType1 = argIter1-&gt;getType();</div>
1130
+ <div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160; <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* argType2 = argIter2-&gt;getType();</div>
1131
+ <div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160; </div>
1132
+ <div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160; <span class="comment">// Check if the parameters types are compatible: (1) The types are exactly the same, (2) Both are pointer types, and at least one of them is a void*.</span></div>
1133
+ <div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160; <span class="keywordflow">if</span> (!(argType1 == argType2 || (argType1-&gt;isPointerTy() &amp;&amp; argType2-&gt;isPointerTy())))</div>
1134
+ <div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160; {</div>
1135
+ <div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160; argMismatch = <span class="keyword">true</span>;</div>
1136
+ <div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160; <span class="keywordflow">break</span>;</div>
1137
+ <div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160; }</div>
1138
+ <div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160; argIter1++;</div>
1139
+ <div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160; argIter2++;</div>
1140
+ <div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160; }</div>
1141
+ <div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160; <span class="keywordflow">if</span> (argMismatch)</div>
1142
+ <div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160; <span class="keywordflow">continue</span>;</div>
1143
+ <div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160; </div>
1144
+ <div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160; <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fun = <span class="keyword">const_cast&lt;</span><a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>*<span class="keyword">&gt;</span>(appfunc);</div>
1145
+ <div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160; <a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a>* mod = fun-&gt;getParent();</div>
1146
+ <div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160; <a class="code" href="namespaceSVF.html#a6ec0236303089a01fd9da36a8bb84e0a">FunctionType</a>* funType = fun-&gt;getFunctionType();</div>
1147
+ <div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> funName = fun-&gt;getName().str();</div>
1148
+ <div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160; <span class="comment">// Replace app function definition with declaration</span></div>
1149
+ <div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160; <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* declaration = Function::Create(funType, GlobalValue::ExternalLinkage, funName, mod);</div>
1150
+ <div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160; fun-&gt;replaceAllUsesWith(declaration);</div>
1151
+ <div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160; fun-&gt;eraseFromParent();</div>
1152
+ <div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160; declaration-&gt;setName(funName);</div>
1153
+ <div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160; <span class="comment">// AppDef -&gt; ExtDef in Table 1, AppDef has been changed to AppDecl</span></div>
1154
+ <div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#aee80b29e5246e3eaa0e30e165346101f">FunDeclToDefMap</a>[declaration] = owfunc;</div>
1155
+ <div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160; <span class="comment">// ExtDef -&gt; AppDef in Table 1</span></div>
1156
+ <div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160; std::vector&lt;const Function*&gt;&amp; decls = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a377cefaad4b688ab6edf94ba4abe00ee">FunDefToDeclsMap</a>[owfunc];</div>
1157
+ <div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160; decls.push_back(declaration);</div>
1158
+ <div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160; <span class="comment">// Keep all called functions in owfunc</span></div>
1159
+ <div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; <span class="comment">// ExtDecl -&gt; ExtDecl in Table 1</span></div>
1160
+ <div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160; std::vector&lt;const Function*&gt; calledFunctions = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a47d2af43ff12d9e1014fa19256619466">LLVMUtil::getCalledFunctions</a>(owfunc);</div>
1161
+ <div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#ab932917041e1b1d8b461bfef464330fd">ExtFuncsVec</a>.insert(<a class="code" href="classSVF_1_1LLVMModuleSet.html#ab932917041e1b1d8b461bfef464330fd">ExtFuncsVec</a>.end(), calledFunctions.begin(), calledFunctions.end());</div>
1162
+ <div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160; <span class="keywordflow">break</span>;</div>
1163
+ <div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160; }</div>
1164
+ <div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160; }</div>
1165
+ <div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160; }</div>
1166
+ <div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160;}</div>
1167
+ <div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160; </div>
1168
+ <div class="line"><a name="l01121"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#aaab03cb6ff665bc008c67b866ba81e47"> 1121</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#aaab03cb6ff665bc008c67b866ba81e47">LLVMModuleSet::buildGlobalDefToRepMap</a>()</div>
1169
+ <div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160;{</div>
1170
+ <div class="line"><a name="l01123"></a><span class="lineno"> 1123</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>
1171
+ <div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160; NameToGlobalsMapTy nameToGlobalsMap;</div>
1172
+ <div class="line"><a name="l01125"></a><span class="lineno"> 1125</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>
1173
+ <div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160; {</div>
1174
+ <div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160; <span class="comment">// Collect ctor and dtor functions</span></div>
1175
+ <div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>&amp; global : mod.globals())</div>
1176
+ <div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160; {</div>
1177
+ <div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160; <span class="keywordflow">if</span> (global.hasPrivateLinkage())</div>
1178
+ <div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160; <span class="keywordflow">continue</span>;</div>
1179
+ <div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160; <span class="keywordtype">string</span> <a class="code" href="cJSON_8h.html#a25d22ecc7e656d2c59332072684e8766">name</a> = global.getName().str();</div>
1180
+ <div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8h.html#a25d22ecc7e656d2c59332072684e8766">name</a>.empty())</div>
1181
+ <div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160; <span class="keywordflow">continue</span>;</div>
1182
+ <div class="line"><a name="l01135"></a><span class="lineno"> 1135</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>
1183
+ <div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160; }</div>
1184
+ <div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160; }</div>
1185
+ <div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160; </div>
1186
+ <div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; pair : nameToGlobalsMap)</div>
1187
+ <div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160; {</div>
1188
+ <div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;GlobalVariable*&gt;</a> &amp;globals = pair.second;</div>
1189
+ <div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160; </div>
1190
+ <div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> repIt =</div>
1191
+ <div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160; std::find_if(globals.begin(), globals.end(),</div>
1192
+ <div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160; [](<a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>* g)</div>
1193
+ <div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160; {</div>
1194
+ <div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160; return g-&gt;hasInitializer();</div>
1195
+ <div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160; });</div>
1196
+ <div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160; <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>* rep =</div>
1197
+ <div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160; repIt != globals.end()</div>
1198
+ <div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160; ? *repIt</div>
1199
+ <div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160; <span class="comment">// When there is no initializer, just pick the first one.</span></div>
1200
+ <div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160; : (assert(!globals.empty() &amp;&amp; <span class="stringliteral">&quot;Empty global set&quot;</span>),</div>
1201
+ <div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160; *globals.begin());</div>
1202
+ <div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160; </div>
1203
+ <div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>* cur : globals)</div>
1204
+ <div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160; {</div>
1205
+ <div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#ae2a1fa0b908cf372c50af90e62c4bf2b">GlobalDefToRepMap</a>[cur] = rep;</div>
1206
+ <div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160; }</div>
1207
+ <div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160; }</div>
1208
+ <div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160;}</div>
1209
+ <div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160; </div>
1210
+ <div class="line"><a name="l01163"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#aeaf96b0a6ee4b321a173374137ebe5e4"> 1163</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#aeaf96b0a6ee4b321a173374137ebe5e4">LLVMModuleSet::removeUnusedExtAPIs</a>()</div>
1211
+ <div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160;{</div>
1212
+ <div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;Function*&gt;</a> removedFuncList;</div>
1213
+ <div class="line"><a name="l01166"></a><span class="lineno"> 1166</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>
1214
+ <div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160; {</div>
1215
+ <div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160; <span class="keywordflow">if</span> (mod.getName().str() != <a class="code" href="classSVF_1_1ExtAPI.html#a58a764c27354d5f9b70995d30de65f1d">ExtAPI::getExtAPI</a>()-&gt;<a class="code" href="classSVF_1_1ExtAPI.html#a26bc352dbfd1b2fe34106a73f1f6d50c">getExtBcPath</a>())</div>
1216
+ <div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160; <span class="keywordflow">continue</span>;</div>
1217
+ <div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>&amp; func : mod.functions())</div>
1218
+ <div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160; {</div>
1219
+ <div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1LLVMModuleSet.html#abbca1044dc59299224598ec2ba17fe7e">isCalledExtFunction</a>(&amp;func))</div>
1220
+ <div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160; {</div>
1221
+ <div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160; removedFuncList.insert(&amp;func);</div>
1222
+ <div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a7968a00d41166d18acb684052ed1eed8">ExtFun2Annotations</a>.erase(&amp;func);</div>
1223
+ <div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160; }</div>
1224
+ <div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160; }</div>
1225
+ <div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160; }</div>
1226
+ <div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a484bbbc9713fc4be173943e6bc177fb5">LLVMUtil::removeUnusedFuncsAndAnnotationsAndGlobalVariables</a>(removedFuncList);</div>
1227
+ <div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160;}</div>
1228
+ <div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160; </div>
1229
+ <div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160;<span class="comment">// Dump modules to files</span></div>
1230
+ <div class="line"><a name="l01183"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#af37b9976b282c875cac7bb1777da635c"> 1183</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>
1231
+ <div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160;{</div>
1232
+ <div class="line"><a name="l01185"></a><span class="lineno"> 1185</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>
1233
+ <div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160; {</div>
1234
+ <div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> moduleName = mod.getName().str();</div>
1235
+ <div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> OutputFilename;</div>
1236
+ <div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160; std::size_t pos = moduleName.rfind(<span class="charliteral">&#39;.&#39;</span>);</div>
1237
+ <div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160; <span class="keywordflow">if</span> (pos != std::string::npos)</div>
1238
+ <div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160; OutputFilename = moduleName.substr(0, pos) + suffix;</div>
1239
+ <div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160; <span class="keywordflow">else</span></div>
1240
+ <div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160; OutputFilename = moduleName + suffix;</div>
1241
+ <div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160; </div>
1242
+ <div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160; std::error_code EC;</div>
1243
+ <div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160; <a class="code" href="namespaceSVF.html#a1c7c7ac12791c0ae386283c0a4f127ba">raw_fd_ostream</a> OS(OutputFilename.c_str(), EC, llvm::sys::fs::OF_None);</div>
1244
+ <div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160; </div>
1245
+ <div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160;<span class="preprocessor">#if (LLVM_VERSION_MAJOR &gt;= 7)</span></div>
1246
+ <div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160; WriteBitcodeToFile(mod, OS);</div>
1247
+ <div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160;<span class="preprocessor">#else</span></div>
1248
+ <div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160; WriteBitcodeToFile(&amp;mod, OS);</div>
1249
+ <div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160;<span class="preprocessor">#endif</span></div>
1250
+ <div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160; </div>
1251
+ <div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160; OS.flush();</div>
1252
+ <div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160; }</div>
1253
+ <div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160;}</div>
1254
+ <div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160; </div>
1255
+ <div class="line"><a name="l01208"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a7d61f479f52e1dc71a4ae7a4d62f3b6a"> 1208</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>
1256
+ <div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160;{</div>
1257
+ <div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a7f8e61cf5d838d7a2e862bc6955f16be">SVFValue2LLVMValue</a>[svfvalue] = val;</div>
1258
+ <div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160; </div>
1259
+ <div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160; <span class="keywordflow">if</span>(val-&gt;hasName())</div>
1260
+ <div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160; svfvalue-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a8325774df9d65d78ef6a66fef59b9a97">setName</a>(val-&gt;getName().str());</div>
1261
+ <div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a07c785d931cef3c61e3dab4c615770be">LLVMUtil::isPtrInUncalledFunction</a>(val))</div>
1262
+ <div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160; svfvalue-&gt;<a class="code" href="classSVF_1_1SVFValue.html#ac2e5c42d0ac92375c88ef5b3f1b65dc4">setPtrInUncalledFunction</a>();</div>
1263
+ <div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a8a77403306e97ab4cb31a56d38bba5be">LLVMUtil::isConstDataOrAggData</a>(val))</div>
1264
+ <div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160; svfvalue-&gt;<a class="code" href="classSVF_1_1SVFValue.html#afe1de41ca3215b325d0ca61814c6bd6b">setConstDataOrAggData</a>();</div>
1265
+ <div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160; </div>
1266
+ <div class="line"><a name="l01219"></a><span class="lineno"> 1219</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>
1267
+ <div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160; {</div>
1268
+ <div class="line"><a name="l01221"></a><span class="lineno"> 1221</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#a973ee05189ca5bbe832be00f2be9baa4">LLVMUtil::getGlobalRep</a>(val);</div>
1269
+ <div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160; assert(SVFUtil::isa&lt;GlobalValue&gt;(llvmVal) &amp;&amp; <span class="stringliteral">&quot;not a GlobalValue?&quot;</span>);</div>
1270
+ <div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160; glob-&gt;setDefGlobalForMultipleModule(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a3cbba2eb702a3481478b2590dfffa352">getSVFGlobalValue</a>(SVFUtil::cast&lt;GlobalValue&gt;(llvmVal)));</div>
1271
+ <div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160; }</div>
1272
+ <div class="line"><a name="l01225"></a><span class="lineno"> 1225</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>
1273
+ <div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160; {</div>
1274
+ <div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* func = SVFUtil::cast&lt;Function&gt;(val);</div>
1275
+ <div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160; svffun-&gt;setIsNotRet(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a651b6a1cf3665277d2241220bb145aed">LLVMUtil::functionDoesNotRet</a>(func));</div>
1276
+ <div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160; svffun-&gt;setIsUncalledFunction(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a2c61d741afbcfa853b505cd391f29f9b">LLVMUtil::isUncalledFunction</a>(func));</div>
1277
+ <div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160; svffun-&gt;setDefFunForMultipleModule(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a50fc24901350df9db890ba16a9b87e33">getSVFFunction</a>(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a21636200f17c62034720c4287aa818b5">LLVMUtil::getDefFunForMultipleModule</a>(func)));</div>
1278
+ <div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160; }</div>
1279
+ <div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160; </div>
1280
+ <div class="line"><a name="l01233"></a><span class="lineno"> 1233</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>
1281
+ <div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160;}</div>
1282
1282
  <div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160; </div>
1283
- <div class="line"><a name="l01236"></a><span class="lineno"> 1236</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>
1284
- <div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160;}</div>
1285
- <div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160; </div>
1286
- <div class="line"><a name="l01239"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a25821b0feeb3b08e00ec9d444520b727"> 1239</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>
1287
- <div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160;{</div>
1288
- <div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160; LLVMConst2SVFConstMap::const_iterator it = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a4b94c96898dbbc71bc1cee04786cf3dc">LLVMConst2SVFConst</a>.find(cd);</div>
1289
- <div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160; <span class="keywordflow">if</span>(it!=<a class="code" href="classSVF_1_1LLVMModuleSet.html#a4b94c96898dbbc71bc1cee04786cf3dc">LLVMConst2SVFConst</a>.end())</div>
1290
- <div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160; {</div>
1291
- <div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160; assert(SVFUtil::isa&lt;SVFConstantData&gt;(it-&gt;second) &amp;&amp; <span class="stringliteral">&quot;not a SVFConstantData type!&quot;</span>);</div>
1292
- <div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160; <span class="keywordflow">return</span> SVFUtil::cast&lt;SVFConstantData&gt;(it-&gt;second);</div>
1293
- <div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160; }</div>
1294
- <div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160; <span class="keywordflow">else</span></div>
1295
- <div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160; {</div>
1296
- <div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160; <a class="code" href="classSVF_1_1SVFConstantData.html">SVFConstantData</a>* svfcd = <span class="keyword">nullptr</span>;</div>
1297
- <div class="line"><a name="l01250"></a><span class="lineno"> 1250</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>
1298
- <div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160; {</div>
1299
- <div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160; <span class="keywordflow">if</span>(cint-&gt;getBitWidth() == 1)</div>
1300
- <div class="line"><a name="l01256"></a><span class="lineno"> 1256</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>
1301
- <div class="line"><a name="l01257"></a><span class="lineno"> 1257</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>
1302
- <div class="line"><a name="l01258"></a><span class="lineno"> 1258</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>
1303
- <div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160; <span class="keywordflow">else</span></div>
1304
- <div class="line"><a name="l01260"></a><span class="lineno"> 1260</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>
1305
- <div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160; }</div>
1306
- <div class="line"><a name="l01262"></a><span class="lineno"> 1262</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>
1307
- <div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160; {</div>
1308
- <div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160; <span class="keywordtype">double</span> dval = 0;</div>
1309
- <div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160; <span class="comment">// TODO: Why only double is considered? What about float?</span></div>
1310
- <div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160; <span class="keywordflow">if</span> (cfp-&gt;isNormalFP())</div>
1311
- <div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160; {</div>
1312
- <div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160; <span class="keywordflow">if</span> (&amp;cfp-&gt;getValueAPF().getSemantics()== &amp;llvm::APFloatBase::IEEEsingle())</div>
1313
- <div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160; {</div>
1314
- <div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160; dval = cfp-&gt;getValueAPF().convertToFloat();</div>
1315
- <div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160; }</div>
1316
- <div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (&amp;cfp-&gt;getValueAPF().getSemantics()== &amp;llvm::APFloatBase::IEEEdouble())</div>
1317
- <div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160; {</div>
1318
- <div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160; dval = cfp-&gt;getValueAPF().convertToDouble();</div>
1319
- <div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160; }</div>
1320
- <div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160; <span class="keywordflow">else</span></div>
1321
- <div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160; {</div>
1322
- <div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160; assert (<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;Unsupported floating point type&quot;</span>);</div>
1323
- <div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160; abort();</div>
1324
- <div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160; }</div>
1325
- <div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160; }</div>
1326
- <div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160; <span class="keywordflow">else</span></div>
1327
- <div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160; {</div>
1328
- <div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160; <span class="comment">// other cfp type, like isZero(), isInfinity(), isNegative(), etc.</span></div>
1329
- <div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160; <span class="comment">// do nothing</span></div>
1330
- <div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160; }</div>
1331
- <div class="line"><a name="l01287"></a><span class="lineno"> 1287</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>
1332
- <div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160; }</div>
1333
- <div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa&lt;ConstantPointerNull&gt;(cd))</div>
1334
- <div class="line"><a name="l01290"></a><span class="lineno"> 1290</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>
1335
- <div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;UndefValue&gt;(cd))</div>
1336
- <div class="line"><a name="l01292"></a><span class="lineno"> 1292</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>
1337
- <div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160; <span class="keywordflow">else</span></div>
1338
- <div class="line"><a name="l01294"></a><span class="lineno"> 1294</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>
1339
- <div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160; </div>
1340
- <div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160; <span class="keywordflow">if</span> (cd-&gt;hasName())</div>
1341
- <div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160; svfcd-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a8325774df9d65d78ef6a66fef59b9a97">setName</a>(cd-&gt;getName().str());</div>
1342
- <div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160; </div>
1343
- <div class="line"><a name="l01299"></a><span class="lineno"> 1299</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>
1344
- <div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#af4bd487b3b6efe55bf869b869f5e8a80">addConstantDataMap</a>(cd,svfcd);</div>
1345
- <div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160; <span class="keywordflow">return</span> svfcd;</div>
1346
- <div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160; }</div>
1347
- <div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160;}</div>
1348
- <div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160; </div>
1349
- <div class="line"><a name="l01305"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a74256f36f0fdc242df9729906c34efbc"> 1305</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>
1350
- <div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160;{</div>
1351
- <div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160; LLVMConst2SVFConstMap::const_iterator it = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a4b94c96898dbbc71bc1cee04786cf3dc">LLVMConst2SVFConst</a>.find(oc);</div>
1352
- <div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160; <span class="keywordflow">if</span>(it!=<a class="code" href="classSVF_1_1LLVMModuleSet.html#a4b94c96898dbbc71bc1cee04786cf3dc">LLVMConst2SVFConst</a>.end())</div>
1353
- <div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160; {</div>
1354
- <div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div>
1355
- <div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160; }</div>
1356
- <div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160; <span class="keywordflow">else</span></div>
1357
- <div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160; {</div>
1358
- <div class="line"><a name="l01314"></a><span class="lineno"> 1314</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>
1359
- <div class="line"><a name="l01315"></a><span class="lineno"> 1315</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>
1360
- <div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5badf03aeb1ebda02bc186bbb58a892a">addOtherConstantMap</a>(oc,svfoc);</div>
1361
- <div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160; <span class="keywordflow">return</span> svfoc;</div>
1362
- <div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160; }</div>
1363
- <div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160;}</div>
1364
- <div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160; </div>
1365
- <div class="line"><a name="l01321"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a0ef17c1d5e6a95c597d2334ea577a965"> 1321</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>
1366
- <div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>&#160;{</div>
1367
- <div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160; LLVMValue2SVFOtherValueMap::const_iterator it = <a class="code" href="classSVF_1_1LLVMModuleSet.html#ac3e70bd338be3a54330be5dc10321eb3">LLVMValue2SVFOtherValue</a>.find(ov);</div>
1368
- <div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160; <span class="keywordflow">if</span>(it!=<a class="code" href="classSVF_1_1LLVMModuleSet.html#ac3e70bd338be3a54330be5dc10321eb3">LLVMValue2SVFOtherValue</a>.end())</div>
1369
- <div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160; {</div>
1370
- <div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div>
1371
- <div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160; }</div>
1372
- <div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160; <span class="keywordflow">else</span></div>
1373
- <div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160; {</div>
1374
- <div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160; <a class="code" href="classSVF_1_1SVFOtherValue.html">SVFOtherValue</a>* svfov =</div>
1375
- <div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160; SVFUtil::isa&lt;MetadataAsValue&gt;(ov)</div>
1376
- <div class="line"><a name="l01332"></a><span class="lineno"> 1332</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>
1377
- <div class="line"><a name="l01333"></a><span class="lineno"> 1333</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>
1378
- <div class="line"><a name="l01334"></a><span class="lineno"> 1334</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>
1379
- <div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a023ea6f179433fa4d007c98ddc38e3c5">addOtherValueMap</a>(ov,svfov);</div>
1380
- <div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160; <span class="keywordflow">return</span> svfov;</div>
1381
- <div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160; }</div>
1382
- <div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160;}</div>
1383
- <div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160; </div>
1384
- <div class="line"><a name="l01340"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#afdd77bc1fca91f70b2ec362f1dacd392"> 1340</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>
1385
- <div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160;{</div>
1386
- <div class="line"><a name="l01342"></a><span class="lineno"> 1342</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>
1387
- <div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a50fc24901350df9db890ba16a9b87e33">getSVFFunction</a>(fun);</div>
1388
- <div class="line"><a name="l01344"></a><span class="lineno"> 1344</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>
1389
- <div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#ab0c0f321b6bfbfab2e4ff06d81920ab9">getSVFBasicBlock</a>(bb);</div>
1390
- <div class="line"><a name="l01346"></a><span class="lineno"> 1346</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>
1391
- <div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#ae74f307b6f96950ceedb2c375ef1c3a3">getSVFInstruction</a>(inst);</div>
1392
- <div class="line"><a name="l01348"></a><span class="lineno"> 1348</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>
1393
- <div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#ad3f66b40ad360003845253f452d6a711">getSVFArgument</a>(arg);</div>
1394
- <div class="line"><a name="l01350"></a><span class="lineno"> 1350</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>
1395
- <div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>&#160; {</div>
1396
- <div class="line"><a name="l01352"></a><span class="lineno"> 1352</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>
1397
- <div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a25821b0feeb3b08e00ec9d444520b727">getSVFConstantData</a>(cd);</div>
1398
- <div class="line"><a name="l01354"></a><span class="lineno"> 1354</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>
1399
- <div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a3cbba2eb702a3481478b2590dfffa352">getSVFGlobalValue</a>(glob);</div>
1400
- <div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160; <span class="keywordflow">else</span></div>
1401
- <div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a74256f36f0fdc242df9729906c34efbc">getOtherSVFConstant</a>(cons);</div>
1402
- <div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>&#160; }</div>
1403
- <div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>&#160; <span class="keywordflow">else</span></div>
1404
- <div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a0ef17c1d5e6a95c597d2334ea577a965">getSVFOtherValue</a>(value);</div>
1405
- <div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160;}</div>
1406
- <div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160; </div>
1407
- <div class="line"><a name="l01363"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a610a7777a48132caadec167c8109f044"> 1363</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>
1408
- <div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>&#160;<span class="keyword"></span>{</div>
1409
- <div class="line"><a name="l01365"></a><span class="lineno"> 1365</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>
1410
- <div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160; {</div>
1411
- <div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160; <span class="keywordflow">if</span> (it-&gt;second == T)</div>
1412
- <div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160; <span class="keywordflow">return</span> it-&gt;first;</div>
1413
- <div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>&#160; }</div>
1414
- <div class="line"><a name="l01370"></a><span class="lineno"> 1370</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>
1415
- <div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>&#160; abort();</div>
1416
- <div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>&#160;}</div>
1417
- <div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>&#160; </div>
1418
- <div class="line"><a name="l01377"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99"> 1377</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>
1419
- <div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160;{</div>
1420
- <div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160; assert(T &amp;&amp; <span class="stringliteral">&quot;SVFType should not be null&quot;</span>);</div>
1421
- <div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160; LLVMType2SVFTypeMap::const_iterator it = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a067661e0049314779a44c9600420820f">LLVMType2SVFType</a>.find(T);</div>
1422
- <div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160; <span class="keywordflow">if</span> (it != <a class="code" href="classSVF_1_1LLVMModuleSet.html#a067661e0049314779a44c9600420820f">LLVMType2SVFType</a>.end())</div>
1423
- <div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div>
1424
- <div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160; </div>
1425
- <div class="line"><a name="l01384"></a><span class="lineno"> 1384</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>
1426
- <div class="line"><a name="l01385"></a><span class="lineno"> 1385</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>
1427
- <div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160; svfType-&gt;<a class="code" href="classSVF_1_1SVFType.html#aef5999ada62dac3cc946d832ac66948c">setTypeInfo</a>(stinfo);</div>
1428
- <div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160; <span class="keywordflow">return</span> svfType;</div>
1429
- <div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160;}</div>
1430
- <div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160; </div>
1431
- <div class="line"><a name="l01390"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a1f6cc76c996a0577b20b8cedd83fff92"> 1390</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>
1432
- <div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160;{</div>
1433
- <div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>&#160; Type2TypeInfoMap::iterator tit = <a class="code" href="classSVF_1_1LLVMModuleSet.html#af2c555af91679d9e6d3009547ee11486">Type2TypeInfo</a>.find(T);</div>
1434
- <div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>&#160; <span class="keywordflow">if</span> (tit != <a class="code" href="classSVF_1_1LLVMModuleSet.html#af2c555af91679d9e6d3009547ee11486">Type2TypeInfo</a>.end())</div>
1435
- <div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160; {</div>
1436
- <div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160; <span class="keywordflow">return</span> tit-&gt;second;</div>
1437
- <div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160; }</div>
1438
- <div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160; <span class="comment">// No such StInfo for T, create it now.</span></div>
1439
- <div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160; <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* stInfo;</div>
1440
- <div class="line"><a name="l01399"></a><span class="lineno"> 1399</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>
1441
- <div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160; {</div>
1442
- <div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>&#160; stInfo = <a class="code" href="classSVF_1_1LLVMModuleSet.html#aa8de934358332505d4805db137d8ec29">collectArrayInfo</a>(aty);</div>
1443
- <div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160; }</div>
1444
- <div class="line"><a name="l01403"></a><span class="lineno"> 1403</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>
1445
- <div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160; {</div>
1446
- <div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> nf;</div>
1447
- <div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160; stInfo = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a946d1251501c7e0e33a9210838951258">collectStructInfo</a>(sty, nf);</div>
1448
- <div class="line"><a name="l01407"></a><span class="lineno"> 1407</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>
1449
- <div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160; {</div>
1450
- <div class="line"><a name="l01409"></a><span class="lineno"> 1409</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>
1451
- <div class="line"><a name="l01410"></a><span class="lineno"> 1410</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>
1452
- <div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160; }</div>
1453
- <div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160; }</div>
1454
- <div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>&#160; <span class="keywordflow">else</span></div>
1455
- <div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>&#160; {</div>
1456
- <div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160; stInfo = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a52853bd34a394882c6fd0fc73739c9f2">collectSimpleTypeInfo</a>(T);</div>
1457
- <div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>&#160; }</div>
1458
- <div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#af2c555af91679d9e6d3009547ee11486">Type2TypeInfo</a>.emplace(T, stInfo);</div>
1459
- <div class="line"><a name="l01418"></a><span class="lineno"> 1418</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>
1460
- <div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160; <span class="keywordflow">return</span> stInfo;</div>
1461
- <div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160;}</div>
1283
+ <div class="line"><a name="l01236"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a25821b0feeb3b08e00ec9d444520b727"> 1236</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>
1284
+ <div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160;{</div>
1285
+ <div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160; LLVMConst2SVFConstMap::const_iterator it = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a4b94c96898dbbc71bc1cee04786cf3dc">LLVMConst2SVFConst</a>.find(cd);</div>
1286
+ <div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160; <span class="keywordflow">if</span>(it!=<a class="code" href="classSVF_1_1LLVMModuleSet.html#a4b94c96898dbbc71bc1cee04786cf3dc">LLVMConst2SVFConst</a>.end())</div>
1287
+ <div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160; {</div>
1288
+ <div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160; assert(SVFUtil::isa&lt;SVFConstantData&gt;(it-&gt;second) &amp;&amp; <span class="stringliteral">&quot;not a SVFConstantData type!&quot;</span>);</div>
1289
+ <div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160; <span class="keywordflow">return</span> SVFUtil::cast&lt;SVFConstantData&gt;(it-&gt;second);</div>
1290
+ <div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160; }</div>
1291
+ <div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160; <span class="keywordflow">else</span></div>
1292
+ <div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160; {</div>
1293
+ <div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160; <a class="code" href="classSVF_1_1SVFConstantData.html">SVFConstantData</a>* svfcd = <span class="keyword">nullptr</span>;</div>
1294
+ <div class="line"><a name="l01247"></a><span class="lineno"> 1247</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>
1295
+ <div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160; {</div>
1296
+ <div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160; <span class="keywordflow">if</span>(cint-&gt;getBitWidth() == 1)</div>
1297
+ <div class="line"><a name="l01253"></a><span class="lineno"> 1253</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>
1298
+ <div class="line"><a name="l01254"></a><span class="lineno"> 1254</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>
1299
+ <div class="line"><a name="l01255"></a><span class="lineno"> 1255</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>
1300
+ <div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160; <span class="keywordflow">else</span></div>
1301
+ <div class="line"><a name="l01257"></a><span class="lineno"> 1257</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>
1302
+ <div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160; }</div>
1303
+ <div class="line"><a name="l01259"></a><span class="lineno"> 1259</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>
1304
+ <div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160; {</div>
1305
+ <div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160; <span class="keywordtype">double</span> dval = 0;</div>
1306
+ <div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160; <span class="comment">// TODO: Why only double is considered? What about float?</span></div>
1307
+ <div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160; <span class="keywordflow">if</span> (cfp-&gt;isNormalFP())</div>
1308
+ <div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160; {</div>
1309
+ <div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160; <span class="keywordflow">if</span> (&amp;cfp-&gt;getValueAPF().getSemantics()== &amp;llvm::APFloatBase::IEEEsingle())</div>
1310
+ <div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160; {</div>
1311
+ <div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160; dval = cfp-&gt;getValueAPF().convertToFloat();</div>
1312
+ <div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160; }</div>
1313
+ <div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (&amp;cfp-&gt;getValueAPF().getSemantics()== &amp;llvm::APFloatBase::IEEEdouble())</div>
1314
+ <div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160; {</div>
1315
+ <div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160; dval = cfp-&gt;getValueAPF().convertToDouble();</div>
1316
+ <div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160; }</div>
1317
+ <div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160; <span class="keywordflow">else</span></div>
1318
+ <div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160; {</div>
1319
+ <div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160; assert (<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;Unsupported floating point type&quot;</span>);</div>
1320
+ <div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160; abort();</div>
1321
+ <div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160; }</div>
1322
+ <div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160; }</div>
1323
+ <div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160; <span class="keywordflow">else</span></div>
1324
+ <div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160; {</div>
1325
+ <div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160; <span class="comment">// other cfp type, like isZero(), isInfinity(), isNegative(), etc.</span></div>
1326
+ <div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160; <span class="comment">// do nothing</span></div>
1327
+ <div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160; }</div>
1328
+ <div class="line"><a name="l01284"></a><span class="lineno"> 1284</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>
1329
+ <div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160; }</div>
1330
+ <div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa&lt;ConstantPointerNull&gt;(cd))</div>
1331
+ <div class="line"><a name="l01287"></a><span class="lineno"> 1287</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>
1332
+ <div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;UndefValue&gt;(cd))</div>
1333
+ <div class="line"><a name="l01289"></a><span class="lineno"> 1289</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>
1334
+ <div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160; <span class="keywordflow">else</span></div>
1335
+ <div class="line"><a name="l01291"></a><span class="lineno"> 1291</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>
1336
+ <div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160; </div>
1337
+ <div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160; </div>
1338
+ <div class="line"><a name="l01294"></a><span class="lineno"> 1294</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>
1339
+ <div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#af4bd487b3b6efe55bf869b869f5e8a80">addConstantDataMap</a>(cd,svfcd);</div>
1340
+ <div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160; <span class="keywordflow">return</span> svfcd;</div>
1341
+ <div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160; }</div>
1342
+ <div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160;}</div>
1343
+ <div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160; </div>
1344
+ <div class="line"><a name="l01300"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a74256f36f0fdc242df9729906c34efbc"> 1300</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>
1345
+ <div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160;{</div>
1346
+ <div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160; LLVMConst2SVFConstMap::const_iterator it = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a4b94c96898dbbc71bc1cee04786cf3dc">LLVMConst2SVFConst</a>.find(oc);</div>
1347
+ <div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160; <span class="keywordflow">if</span>(it!=<a class="code" href="classSVF_1_1LLVMModuleSet.html#a4b94c96898dbbc71bc1cee04786cf3dc">LLVMConst2SVFConst</a>.end())</div>
1348
+ <div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160; {</div>
1349
+ <div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div>
1350
+ <div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160; }</div>
1351
+ <div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160; <span class="keywordflow">else</span></div>
1352
+ <div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160; {</div>
1353
+ <div class="line"><a name="l01309"></a><span class="lineno"> 1309</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>
1354
+ <div class="line"><a name="l01310"></a><span class="lineno"> 1310</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>
1355
+ <div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a5badf03aeb1ebda02bc186bbb58a892a">addOtherConstantMap</a>(oc,svfoc);</div>
1356
+ <div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160; <span class="keywordflow">return</span> svfoc;</div>
1357
+ <div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160; }</div>
1358
+ <div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160;}</div>
1359
+ <div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160; </div>
1360
+ <div class="line"><a name="l01316"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a0ef17c1d5e6a95c597d2334ea577a965"> 1316</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>
1361
+ <div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160;{</div>
1362
+ <div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160; LLVMValue2SVFOtherValueMap::const_iterator it = <a class="code" href="classSVF_1_1LLVMModuleSet.html#ac3e70bd338be3a54330be5dc10321eb3">LLVMValue2SVFOtherValue</a>.find(ov);</div>
1363
+ <div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160; <span class="keywordflow">if</span>(it!=<a class="code" href="classSVF_1_1LLVMModuleSet.html#ac3e70bd338be3a54330be5dc10321eb3">LLVMValue2SVFOtherValue</a>.end())</div>
1364
+ <div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160; {</div>
1365
+ <div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div>
1366
+ <div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>&#160; }</div>
1367
+ <div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160; <span class="keywordflow">else</span></div>
1368
+ <div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160; {</div>
1369
+ <div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160; <a class="code" href="classSVF_1_1SVFOtherValue.html">SVFOtherValue</a>* svfov =</div>
1370
+ <div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160; SVFUtil::isa&lt;MetadataAsValue&gt;(ov)</div>
1371
+ <div class="line"><a name="l01327"></a><span class="lineno"> 1327</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>
1372
+ <div class="line"><a name="l01328"></a><span class="lineno"> 1328</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>
1373
+ <div class="line"><a name="l01329"></a><span class="lineno"> 1329</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>
1374
+ <div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a023ea6f179433fa4d007c98ddc38e3c5">addOtherValueMap</a>(ov,svfov);</div>
1375
+ <div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160; <span class="keywordflow">return</span> svfov;</div>
1376
+ <div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160; }</div>
1377
+ <div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160;}</div>
1378
+ <div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160; </div>
1379
+ <div class="line"><a name="l01335"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#afdd77bc1fca91f70b2ec362f1dacd392"> 1335</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>
1380
+ <div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160;{</div>
1381
+ <div class="line"><a name="l01337"></a><span class="lineno"> 1337</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>
1382
+ <div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a50fc24901350df9db890ba16a9b87e33">getSVFFunction</a>(fun);</div>
1383
+ <div class="line"><a name="l01339"></a><span class="lineno"> 1339</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>
1384
+ <div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#ab0c0f321b6bfbfab2e4ff06d81920ab9">getSVFBasicBlock</a>(bb);</div>
1385
+ <div class="line"><a name="l01341"></a><span class="lineno"> 1341</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>
1386
+ <div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#ae74f307b6f96950ceedb2c375ef1c3a3">getSVFInstruction</a>(inst);</div>
1387
+ <div class="line"><a name="l01343"></a><span class="lineno"> 1343</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>
1388
+ <div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#ad3f66b40ad360003845253f452d6a711">getSVFArgument</a>(arg);</div>
1389
+ <div class="line"><a name="l01345"></a><span class="lineno"> 1345</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>
1390
+ <div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160; {</div>
1391
+ <div class="line"><a name="l01347"></a><span class="lineno"> 1347</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>
1392
+ <div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a25821b0feeb3b08e00ec9d444520b727">getSVFConstantData</a>(cd);</div>
1393
+ <div class="line"><a name="l01349"></a><span class="lineno"> 1349</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>
1394
+ <div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a3cbba2eb702a3481478b2590dfffa352">getSVFGlobalValue</a>(glob);</div>
1395
+ <div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>&#160; <span class="keywordflow">else</span></div>
1396
+ <div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a74256f36f0fdc242df9729906c34efbc">getOtherSVFConstant</a>(cons);</div>
1397
+ <div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160; }</div>
1398
+ <div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160; <span class="keywordflow">else</span></div>
1399
+ <div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1LLVMModuleSet.html#a0ef17c1d5e6a95c597d2334ea577a965">getSVFOtherValue</a>(value);</div>
1400
+ <div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160;}</div>
1401
+ <div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160; </div>
1402
+ <div class="line"><a name="l01358"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a610a7777a48132caadec167c8109f044"> 1358</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>
1403
+ <div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>&#160;<span class="keyword"></span>{</div>
1404
+ <div class="line"><a name="l01360"></a><span class="lineno"> 1360</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>
1405
+ <div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160; {</div>
1406
+ <div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160; <span class="keywordflow">if</span> (it-&gt;second == T)</div>
1407
+ <div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160; <span class="keywordflow">return</span> it-&gt;first;</div>
1408
+ <div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>&#160; }</div>
1409
+ <div class="line"><a name="l01365"></a><span class="lineno"> 1365</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>
1410
+ <div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160; abort();</div>
1411
+ <div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160;}</div>
1412
+ <div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160; </div>
1413
+ <div class="line"><a name="l01372"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99"> 1372</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>
1414
+ <div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>&#160;{</div>
1415
+ <div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160; assert(T &amp;&amp; <span class="stringliteral">&quot;SVFType should not be null&quot;</span>);</div>
1416
+ <div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>&#160; LLVMType2SVFTypeMap::const_iterator it = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a067661e0049314779a44c9600420820f">LLVMType2SVFType</a>.find(T);</div>
1417
+ <div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>&#160; <span class="keywordflow">if</span> (it != <a class="code" href="classSVF_1_1LLVMModuleSet.html#a067661e0049314779a44c9600420820f">LLVMType2SVFType</a>.end())</div>
1418
+ <div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div>
1419
+ <div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160; </div>
1420
+ <div class="line"><a name="l01379"></a><span class="lineno"> 1379</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>
1421
+ <div class="line"><a name="l01380"></a><span class="lineno"> 1380</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>
1422
+ <div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160; svfType-&gt;<a class="code" href="classSVF_1_1SVFType.html#aef5999ada62dac3cc946d832ac66948c">setTypeInfo</a>(stinfo);</div>
1423
+ <div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160; <span class="keywordflow">return</span> svfType;</div>
1424
+ <div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160;}</div>
1425
+ <div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160; </div>
1426
+ <div class="line"><a name="l01385"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a1f6cc76c996a0577b20b8cedd83fff92"> 1385</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>
1427
+ <div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160;{</div>
1428
+ <div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160; Type2TypeInfoMap::iterator tit = <a class="code" href="classSVF_1_1LLVMModuleSet.html#af2c555af91679d9e6d3009547ee11486">Type2TypeInfo</a>.find(T);</div>
1429
+ <div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160; <span class="keywordflow">if</span> (tit != <a class="code" href="classSVF_1_1LLVMModuleSet.html#af2c555af91679d9e6d3009547ee11486">Type2TypeInfo</a>.end())</div>
1430
+ <div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160; {</div>
1431
+ <div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>&#160; <span class="keywordflow">return</span> tit-&gt;second;</div>
1432
+ <div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160; }</div>
1433
+ <div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>&#160; <span class="comment">// No such StInfo for T, create it now.</span></div>
1434
+ <div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>&#160; <a class="code" href="classSVF_1_1StInfo.html">StInfo</a>* stInfo;</div>
1435
+ <div class="line"><a name="l01394"></a><span class="lineno"> 1394</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>
1436
+ <div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160; {</div>
1437
+ <div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160; stInfo = <a class="code" href="classSVF_1_1LLVMModuleSet.html#aa8de934358332505d4805db137d8ec29">collectArrayInfo</a>(aty);</div>
1438
+ <div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160; }</div>
1439
+ <div class="line"><a name="l01398"></a><span class="lineno"> 1398</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>
1440
+ <div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>&#160; {</div>
1441
+ <div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> nf;</div>
1442
+ <div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>&#160; stInfo = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a946d1251501c7e0e33a9210838951258">collectStructInfo</a>(sty, nf);</div>
1443
+ <div class="line"><a name="l01402"></a><span class="lineno"> 1402</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>
1444
+ <div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>&#160; {</div>
1445
+ <div class="line"><a name="l01404"></a><span class="lineno"> 1404</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>
1446
+ <div class="line"><a name="l01405"></a><span class="lineno"> 1405</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>
1447
+ <div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160; }</div>
1448
+ <div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>&#160; }</div>
1449
+ <div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160; <span class="keywordflow">else</span></div>
1450
+ <div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160; {</div>
1451
+ <div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160; stInfo = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a52853bd34a394882c6fd0fc73739c9f2">collectSimpleTypeInfo</a>(T);</div>
1452
+ <div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160; }</div>
1453
+ <div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#af2c555af91679d9e6d3009547ee11486">Type2TypeInfo</a>.emplace(T, stInfo);</div>
1454
+ <div class="line"><a name="l01413"></a><span class="lineno"> 1413</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>
1455
+ <div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>&#160; <span class="keywordflow">return</span> stInfo;</div>
1456
+ <div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160;}</div>
1457
+ <div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>&#160; </div>
1458
+ <div class="line"><a name="l01417"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#aab7b08db9252ef7e21e54d019f44b073"> 1417</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>
1459
+ <div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160;{</div>
1460
+ <div class="line"><a name="l01419"></a><span class="lineno"> 1419</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>
1461
+ <div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160; <span class="stringliteral">&quot;SVFType has been added before&quot;</span>);</div>
1462
1462
  <div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160; </div>
1463
- <div class="line"><a name="l01422"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#aab7b08db9252ef7e21e54d019f44b073"> 1422</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>
1464
- <div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160;{</div>
1465
- <div class="line"><a name="l01424"></a><span class="lineno"> 1424</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>
1466
- <div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160; <span class="stringliteral">&quot;SVFType has been added before&quot;</span>);</div>
1467
- <div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160; </div>
1468
- <div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160; <span class="comment">// add SVFType&#39;s LLVM byte size iff T isSized(), otherwise byteSize is 1 (default value)</span></div>
1469
- <div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> byteSize = 1;</div>
1470
- <div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>&#160; <span class="keywordflow">if</span> (T-&gt;isSized())</div>
1471
- <div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>&#160; {</div>
1472
- <div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a03db82b8a7914367024723dba4d6ca3c">llvm::DataLayout</a> &amp;DL = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;</div>
1473
- <div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a9fe3fa15a6a0ec25864cb8439a45596e">getMainLLVMModule</a>()-&gt;getDataLayout();</div>
1474
- <div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>&#160; <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *mut_T = <span class="keyword">const_cast&lt;</span><a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *<span class="keyword">&gt;</span>(T);</div>
1475
- <div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>&#160; byteSize = DL.getTypeAllocSize(mut_T);</div>
1476
- <div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>&#160; }</div>
1477
- <div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>&#160; </div>
1478
- <div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>&#160; <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* svftype;</div>
1479
- <div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;PointerType&gt;(T))</div>
1480
- <div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>&#160; {</div>
1481
- <div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>&#160; svftype = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFPointerType.html">SVFPointerType</a>(byteSize);</div>
1482
- <div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>&#160; }</div>
1483
- <div class="line"><a name="l01442"></a><span class="lineno"> 1442</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>
1484
- <div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>&#160; {</div>
1485
- <div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>&#160; <span class="keyword">auto</span> svfIntT = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFIntegerType.html">SVFIntegerType</a>(byteSize);</div>
1486
- <div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160; <span class="keywordtype">unsigned</span> signWidth = intT-&gt;getBitWidth();</div>
1487
- <div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>&#160; assert(signWidth &lt; INT16_MAX &amp;&amp; <span class="stringliteral">&quot;Integer width too big&quot;</span>);</div>
1488
- <div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>&#160; svfIntT-&gt;setSignAndWidth(intT-&gt;getSignBit() ? -signWidth : signWidth);</div>
1489
- <div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>&#160; svftype = svfIntT;</div>
1490
- <div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160; }</div>
1491
- <div class="line"><a name="l01450"></a><span class="lineno"> 1450</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>
1492
- <div class="line"><a name="l01451"></a><span class="lineno"> 1451</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>
1493
- <div class="line"><a name="l01452"></a><span class="lineno"> 1452</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>
1494
- <div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>&#160; {</div>
1495
- <div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160; <span class="keyword">auto</span> svfst = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFStructType.html">SVFStructType</a>(byteSize);</div>
1496
- <div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>&#160; <span class="keywordflow">if</span> (st-&gt;hasName())</div>
1497
- <div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160; svfst-&gt;setName(st-&gt;getName().str());</div>
1498
- <div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160; svftype = svfst;</div>
1499
- <div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160; }</div>
1500
- <div class="line"><a name="l01459"></a><span class="lineno"> 1459</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>
1501
- <div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>&#160; {</div>
1502
- <div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>&#160; <span class="keyword">auto</span> svfat = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFArrayType.html">SVFArrayType</a>(byteSize);</div>
1503
- <div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160; svfat-&gt;setNumOfElement(at-&gt;getNumElements());</div>
1504
- <div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160; svfat-&gt;setTypeOfElement(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(at-&gt;getElementType()));</div>
1505
- <div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160; svftype = svfat;</div>
1506
- <div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160; }</div>
1507
- <div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>&#160; <span class="keywordflow">else</span></div>
1508
- <div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160; {</div>
1509
- <div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="cJSON_8h.html#a503753140aa27b00f99a3501280b2746">buffer</a>;</div>
1510
- <div class="line"><a name="l01469"></a><span class="lineno"> 1469</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(), byteSize);</div>
1511
- <div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>&#160; llvm::raw_string_ostream(<a class="code" href="cJSON_8h.html#a503753140aa27b00f99a3501280b2746">buffer</a>) &lt;&lt; *T;</div>
1512
- <div class="line"><a name="l01471"></a><span class="lineno"> 1471</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>
1513
- <div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160; svftype = ot;</div>
1514
- <div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>&#160; }</div>
1515
- <div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160; </div>
1516
- <div class="line"><a name="l01475"></a><span class="lineno"> 1475</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>
1517
- <div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a067661e0049314779a44c9600420820f">LLVMType2SVFType</a>[T] = svftype;</div>
1518
- <div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>&#160; </div>
1519
- <div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160; <span class="keywordflow">return</span> svftype;</div>
1520
- <div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160;}</div>
1521
- <div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160; </div>
1522
- <div class="line"><a name="l01484"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#aa8de934358332505d4805db137d8ec29"> 1484</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>
1523
- <div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160;{</div>
1524
- <div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160; <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> totalElemNum = ty-&gt;getNumElements();</div>
1525
- <div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* elemTy = ty-&gt;getElementType();</div>
1526
- <div class="line"><a name="l01488"></a><span class="lineno"> 1488</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>
1527
- <div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>&#160; {</div>
1528
- <div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>&#160; totalElemNum *= aty-&gt;getNumElements();</div>
1529
- <div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160; elemTy = aty-&gt;getElementType();</div>
1530
- <div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160; }</div>
1531
- <div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>&#160; </div>
1532
- <div class="line"><a name="l01494"></a><span class="lineno"> 1494</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>
1533
- <div class="line"><a name="l01495"></a><span class="lineno"> 1495</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>
1534
- <div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>&#160; </div>
1535
- <div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>&#160; <span class="keywordflow">if</span> (totalElemNum == 0)</div>
1536
- <div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>&#160; {</div>
1537
- <div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a00339d1d7074e9222776801ce8689f6b">addFldWithType</a>(0, elemSvfType, 0);</div>
1538
- <div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a1a07c2b1415c29d7d70791c6dfe602a3">setNumOfFieldsAndElems</a>(1, 1);</div>
1539
- <div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ac0a9f85f90524abfd519d3cd2ac95a56">getFlattenFieldTypes</a>().push_back(elemSvfType);</div>
1540
- <div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a03bfeee0406c7e54557e74f3a8e848b7">getFlattenElementTypes</a>().push_back(elemSvfType);</div>
1541
- <div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>&#160; <span class="keywordflow">return</span> stInfo;</div>
1542
- <div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>&#160; }</div>
1543
- <div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>&#160; </div>
1544
- <div class="line"><a name="l01509"></a><span class="lineno"> 1509</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>
1545
- <div class="line"><a name="l01510"></a><span class="lineno"> 1510</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>
1546
- <div class="line"><a name="l01511"></a><span class="lineno"> 1511</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>
1547
- <div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> j = 0; j &lt; nfF; j++)</div>
1548
- <div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>&#160; {</div>
1549
- <div class="line"><a name="l01514"></a><span class="lineno"> 1514</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>
1550
- <div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ac0a9f85f90524abfd519d3cd2ac95a56">getFlattenFieldTypes</a>().push_back(fieldTy);</div>
1551
- <div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>&#160; }</div>
1552
- <div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>&#160; </div>
1553
- <div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> outArrayElemNum = ty-&gt;getNumElements();</div>
1554
- <div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; outArrayElemNum; ++i)</div>
1555
- <div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>&#160; {</div>
1556
- <div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>&#160; <span class="keyword">auto</span> idx = (i * nfE * totalElemNum) / outArrayElemNum;</div>
1557
- <div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a00339d1d7074e9222776801ce8689f6b">addFldWithType</a>(0, elemSvfType, idx);</div>
1558
- <div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>&#160; }</div>
1559
- <div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>&#160; </div>
1560
- <div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; totalElemNum; ++i)</div>
1561
- <div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>&#160; {</div>
1562
- <div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> j = 0; j &lt; nfE; ++j)</div>
1563
- <div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160; {</div>
1564
- <div class="line"><a name="l01531"></a><span class="lineno"> 1531</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>
1565
- <div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a03bfeee0406c7e54557e74f3a8e848b7">getFlattenElementTypes</a>().push_back(et);</div>
1566
- <div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>&#160; }</div>
1567
- <div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160; }</div>
1568
- <div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>&#160; </div>
1569
- <div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>&#160; assert(stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a03bfeee0406c7e54557e74f3a8e848b7">getFlattenElementTypes</a>().size() == nfE * totalElemNum &amp;&amp;</div>
1570
- <div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>&#160; <span class="stringliteral">&quot;typeForArray size incorrect!!!&quot;</span>);</div>
1571
- <div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a1a07c2b1415c29d7d70791c6dfe602a3">setNumOfFieldsAndElems</a>(nfF, nfE * totalElemNum);</div>
1572
- <div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>&#160; </div>
1573
- <div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>&#160; <span class="keywordflow">return</span> stInfo;</div>
1574
- <div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>&#160;}</div>
1575
- <div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>&#160; </div>
1576
- <div class="line"><a name="l01547"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a946d1251501c7e0e33a9210838951258"> 1547</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>
1577
- <div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>&amp; numFields)</div>
1578
- <div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>&#160;{</div>
1579
- <div class="line"><a name="l01551"></a><span class="lineno"> 1551</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>
1580
- <div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>&#160; </div>
1581
- <div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>&#160; <span class="comment">// Number of fields after flattening the struct</span></div>
1582
- <div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>&#160; numFields = 0;</div>
1583
- <div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>&#160; <span class="comment">// The offset when considering array stride info</span></div>
1584
- <div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> strideOffset = 0;</div>
1585
- <div class="line"><a name="l01557"></a><span class="lineno"> 1557</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>
1586
- <div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>&#160; {</div>
1587
- <div class="line"><a name="l01559"></a><span class="lineno"> 1559</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>
1588
- <div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>&#160; <span class="comment">// offset with int_32 (s32_t) is large enough and won&#39;t overflow</span></div>
1589
- <div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a00339d1d7074e9222776801ce8689f6b">addFldWithType</a>(numFields, elemSvfTy, strideOffset);</div>
1590
- <div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>&#160; </div>
1591
- <div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;StructType, ArrayType&gt;(elemTy))</div>
1592
- <div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>&#160; {</div>
1593
- <div class="line"><a name="l01565"></a><span class="lineno"> 1565</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>
1594
- <div class="line"><a name="l01566"></a><span class="lineno"> 1566</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>
1595
- <div class="line"><a name="l01567"></a><span class="lineno"> 1567</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>
1596
- <div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>&#160; <span class="comment">// Copy ST&#39;s info, whose element 0 is the size of ST itself.</span></div>
1597
- <div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> j = 0; j &lt; nfF; ++j)</div>
1598
- <div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>&#160; {</div>
1599
- <div class="line"><a name="l01571"></a><span class="lineno"> 1571</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>
1600
- <div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ac0a9f85f90524abfd519d3cd2ac95a56">getFlattenFieldTypes</a>().push_back(elemTy);</div>
1601
- <div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>&#160; }</div>
1602
- <div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>&#160; numFields += nfF;</div>
1603
- <div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>&#160; strideOffset += nfE;</div>
1604
- <div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> tpj = 0; tpj &lt; nfE; ++tpj)</div>
1605
- <div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>&#160; {</div>
1606
- <div class="line"><a name="l01578"></a><span class="lineno"> 1578</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>
1607
- <div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a03bfeee0406c7e54557e74f3a8e848b7">getFlattenElementTypes</a>().push_back(ty);</div>
1608
- <div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>&#160; }</div>
1609
- <div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160; </div>
1610
- <div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>&#160; }</div>
1611
- <div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160; <span class="keywordflow">else</span></div>
1612
- <div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>&#160; {</div>
1613
- <div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>&#160; <span class="comment">// Simple type</span></div>
1614
- <div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>&#160; numFields += 1;</div>
1615
- <div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>&#160; strideOffset += 1;</div>
1616
- <div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ac0a9f85f90524abfd519d3cd2ac95a56">getFlattenFieldTypes</a>().push_back(elemSvfTy);</div>
1617
- <div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a03bfeee0406c7e54557e74f3a8e848b7">getFlattenElementTypes</a>().push_back(elemSvfTy);</div>
1618
- <div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>&#160; }</div>
1619
- <div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>&#160; }</div>
1620
- <div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>&#160; </div>
1621
- <div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>&#160; assert(stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a03bfeee0406c7e54557e74f3a8e848b7">getFlattenElementTypes</a>().size() == strideOffset &amp;&amp;</div>
1622
- <div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>&#160; <span class="stringliteral">&quot;typeForStruct size incorrect!&quot;</span>);</div>
1623
- <div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a1a07c2b1415c29d7d70791c6dfe602a3">setNumOfFieldsAndElems</a>(numFields,strideOffset);</div>
1624
- <div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>&#160; </div>
1625
- <div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>&#160; <span class="keywordflow">return</span> stInfo;</div>
1626
- <div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>&#160;}</div>
1627
- <div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>&#160; </div>
1628
- <div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>&#160; </div>
1629
- <div class="line"><a name="l01604"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a52853bd34a394882c6fd0fc73739c9f2"> 1604</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>
1630
- <div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>&#160;{</div>
1631
- <div class="line"><a name="l01607"></a><span class="lineno"> 1607</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>
1632
- <div class="line"><a name="l01608"></a><span class="lineno"> 1608</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>
1633
- <div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a00339d1d7074e9222776801ce8689f6b">addFldWithType</a>(0, svfType, 0);</div>
1634
- <div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>&#160; </div>
1635
- <div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ac0a9f85f90524abfd519d3cd2ac95a56">getFlattenFieldTypes</a>().push_back(svfType);</div>
1636
- <div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a03bfeee0406c7e54557e74f3a8e848b7">getFlattenElementTypes</a>().push_back(svfType);</div>
1637
- <div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a1a07c2b1415c29d7d70791c6dfe602a3">setNumOfFieldsAndElems</a>(1,1);</div>
1638
- <div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>&#160; </div>
1639
- <div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>&#160; <span class="keywordflow">return</span> stInfo;</div>
1640
- <div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>&#160;}</div>
1463
+ <div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>&#160; <span class="comment">// add SVFType&#39;s LLVM byte size iff T isSized(), otherwise byteSize is 1 (default value)</span></div>
1464
+ <div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> byteSize = 1;</div>
1465
+ <div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160; <span class="keywordflow">if</span> (T-&gt;isSized())</div>
1466
+ <div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160; {</div>
1467
+ <div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a03db82b8a7914367024723dba4d6ca3c">llvm::DataLayout</a> &amp;DL = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;</div>
1468
+ <div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a9fe3fa15a6a0ec25864cb8439a45596e">getMainLLVMModule</a>()-&gt;getDataLayout();</div>
1469
+ <div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>&#160; <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *mut_T = <span class="keyword">const_cast&lt;</span><a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *<span class="keyword">&gt;</span>(T);</div>
1470
+ <div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>&#160; byteSize = DL.getTypeAllocSize(mut_T);</div>
1471
+ <div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>&#160; }</div>
1472
+ <div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>&#160; </div>
1473
+ <div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>&#160; <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* svftype;</div>
1474
+ <div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;PointerType&gt;(T))</div>
1475
+ <div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>&#160; {</div>
1476
+ <div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>&#160; svftype = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFPointerType.html">SVFPointerType</a>(byteSize);</div>
1477
+ <div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>&#160; }</div>
1478
+ <div class="line"><a name="l01437"></a><span class="lineno"> 1437</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>
1479
+ <div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>&#160; {</div>
1480
+ <div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>&#160; <span class="keyword">auto</span> svfIntT = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFIntegerType.html">SVFIntegerType</a>(byteSize);</div>
1481
+ <div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>&#160; <span class="keywordtype">unsigned</span> signWidth = intT-&gt;getBitWidth();</div>
1482
+ <div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>&#160; assert(signWidth &lt; INT16_MAX &amp;&amp; <span class="stringliteral">&quot;Integer width too big&quot;</span>);</div>
1483
+ <div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160; svfIntT-&gt;setSignAndWidth(intT-&gt;getSignBit() ? -signWidth : signWidth);</div>
1484
+ <div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>&#160; svftype = svfIntT;</div>
1485
+ <div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>&#160; }</div>
1486
+ <div class="line"><a name="l01445"></a><span class="lineno"> 1445</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>
1487
+ <div class="line"><a name="l01446"></a><span class="lineno"> 1446</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>
1488
+ <div class="line"><a name="l01447"></a><span class="lineno"> 1447</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>
1489
+ <div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>&#160; {</div>
1490
+ <div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160; <span class="keyword">auto</span> svfst = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFStructType.html">SVFStructType</a>(byteSize);</div>
1491
+ <div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>&#160; <span class="keywordflow">if</span> (st-&gt;hasName())</div>
1492
+ <div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>&#160; svfst-&gt;setName(st-&gt;getName().str());</div>
1493
+ <div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>&#160; svftype = svfst;</div>
1494
+ <div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>&#160; }</div>
1495
+ <div class="line"><a name="l01454"></a><span class="lineno"> 1454</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>
1496
+ <div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>&#160; {</div>
1497
+ <div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160; <span class="keyword">auto</span> svfat = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFArrayType.html">SVFArrayType</a>(byteSize);</div>
1498
+ <div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160; svfat-&gt;setNumOfElement(at-&gt;getNumElements());</div>
1499
+ <div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160; svfat-&gt;setTypeOfElement(<a class="code" href="classSVF_1_1LLVMModuleSet.html#a5f0bd932f3129a9c565f3a09711f7b99">getSVFType</a>(at-&gt;getElementType()));</div>
1500
+ <div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>&#160; svftype = svfat;</div>
1501
+ <div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>&#160; }</div>
1502
+ <div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>&#160; <span class="keywordflow">else</span></div>
1503
+ <div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160; {</div>
1504
+ <div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="cJSON_8h.html#a503753140aa27b00f99a3501280b2746">buffer</a>;</div>
1505
+ <div class="line"><a name="l01464"></a><span class="lineno"> 1464</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(), byteSize);</div>
1506
+ <div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160; llvm::raw_string_ostream(<a class="code" href="cJSON_8h.html#a503753140aa27b00f99a3501280b2746">buffer</a>) &lt;&lt; *T;</div>
1507
+ <div class="line"><a name="l01466"></a><span class="lineno"> 1466</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>
1508
+ <div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160; svftype = ot;</div>
1509
+ <div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160; }</div>
1510
+ <div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>&#160; </div>
1511
+ <div class="line"><a name="l01470"></a><span class="lineno"> 1470</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>
1512
+ <div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html#a067661e0049314779a44c9600420820f">LLVMType2SVFType</a>[T] = svftype;</div>
1513
+ <div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160; </div>
1514
+ <div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>&#160; <span class="keywordflow">return</span> svftype;</div>
1515
+ <div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160;}</div>
1516
+ <div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>&#160; </div>
1517
+ <div class="line"><a name="l01479"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#aa8de934358332505d4805db137d8ec29"> 1479</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>
1518
+ <div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160;{</div>
1519
+ <div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>&#160; <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> totalElemNum = ty-&gt;getNumElements();</div>
1520
+ <div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* elemTy = ty-&gt;getElementType();</div>
1521
+ <div class="line"><a name="l01483"></a><span class="lineno"> 1483</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>
1522
+ <div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>&#160; {</div>
1523
+ <div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160; totalElemNum *= aty-&gt;getNumElements();</div>
1524
+ <div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160; elemTy = aty-&gt;getElementType();</div>
1525
+ <div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160; }</div>
1526
+ <div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>&#160; </div>
1527
+ <div class="line"><a name="l01489"></a><span class="lineno"> 1489</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>
1528
+ <div class="line"><a name="l01490"></a><span class="lineno"> 1490</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>
1529
+ <div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160; </div>
1530
+ <div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>&#160; <span class="keywordflow">if</span> (totalElemNum == 0)</div>
1531
+ <div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>&#160; {</div>
1532
+ <div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a00339d1d7074e9222776801ce8689f6b">addFldWithType</a>(0, elemSvfType, 0);</div>
1533
+ <div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a1a07c2b1415c29d7d70791c6dfe602a3">setNumOfFieldsAndElems</a>(1, 1);</div>
1534
+ <div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ac0a9f85f90524abfd519d3cd2ac95a56">getFlattenFieldTypes</a>().push_back(elemSvfType);</div>
1535
+ <div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a03bfeee0406c7e54557e74f3a8e848b7">getFlattenElementTypes</a>().push_back(elemSvfType);</div>
1536
+ <div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>&#160; <span class="keywordflow">return</span> stInfo;</div>
1537
+ <div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>&#160; }</div>
1538
+ <div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>&#160; </div>
1539
+ <div class="line"><a name="l01504"></a><span class="lineno"> 1504</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>
1540
+ <div class="line"><a name="l01505"></a><span class="lineno"> 1505</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>
1541
+ <div class="line"><a name="l01506"></a><span class="lineno"> 1506</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>
1542
+ <div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> j = 0; j &lt; nfF; j++)</div>
1543
+ <div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>&#160; {</div>
1544
+ <div class="line"><a name="l01509"></a><span class="lineno"> 1509</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>
1545
+ <div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ac0a9f85f90524abfd519d3cd2ac95a56">getFlattenFieldTypes</a>().push_back(fieldTy);</div>
1546
+ <div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>&#160; }</div>
1547
+ <div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>&#160; </div>
1548
+ <div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> outArrayElemNum = ty-&gt;getNumElements();</div>
1549
+ <div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; outArrayElemNum; ++i)</div>
1550
+ <div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>&#160; {</div>
1551
+ <div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>&#160; <span class="keyword">auto</span> idx = (i * nfE * totalElemNum) / outArrayElemNum;</div>
1552
+ <div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a00339d1d7074e9222776801ce8689f6b">addFldWithType</a>(0, elemSvfType, idx);</div>
1553
+ <div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160; }</div>
1554
+ <div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>&#160; </div>
1555
+ <div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; totalElemNum; ++i)</div>
1556
+ <div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>&#160; {</div>
1557
+ <div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> j = 0; j &lt; nfE; ++j)</div>
1558
+ <div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>&#160; {</div>
1559
+ <div class="line"><a name="l01526"></a><span class="lineno"> 1526</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>
1560
+ <div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a03bfeee0406c7e54557e74f3a8e848b7">getFlattenElementTypes</a>().push_back(et);</div>
1561
+ <div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>&#160; }</div>
1562
+ <div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>&#160; }</div>
1563
+ <div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160; </div>
1564
+ <div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>&#160; assert(stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a03bfeee0406c7e54557e74f3a8e848b7">getFlattenElementTypes</a>().size() == nfE * totalElemNum &amp;&amp;</div>
1565
+ <div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>&#160; <span class="stringliteral">&quot;typeForArray size incorrect!!!&quot;</span>);</div>
1566
+ <div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a1a07c2b1415c29d7d70791c6dfe602a3">setNumOfFieldsAndElems</a>(nfF, nfE * totalElemNum);</div>
1567
+ <div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160; </div>
1568
+ <div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>&#160; <span class="keywordflow">return</span> stInfo;</div>
1569
+ <div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>&#160;}</div>
1570
+ <div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>&#160; </div>
1571
+ <div class="line"><a name="l01542"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a946d1251501c7e0e33a9210838951258"> 1542</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>
1572
+ <div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>&amp; numFields)</div>
1573
+ <div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160;{</div>
1574
+ <div class="line"><a name="l01546"></a><span class="lineno"> 1546</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>
1575
+ <div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160; </div>
1576
+ <div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>&#160; <span class="comment">// Number of fields after flattening the struct</span></div>
1577
+ <div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>&#160; numFields = 0;</div>
1578
+ <div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>&#160; <span class="comment">// The offset when considering array stride info</span></div>
1579
+ <div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> strideOffset = 0;</div>
1580
+ <div class="line"><a name="l01552"></a><span class="lineno"> 1552</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>
1581
+ <div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>&#160; {</div>
1582
+ <div class="line"><a name="l01554"></a><span class="lineno"> 1554</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>
1583
+ <div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>&#160; <span class="comment">// offset with int_32 (s32_t) is large enough and won&#39;t overflow</span></div>
1584
+ <div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a00339d1d7074e9222776801ce8689f6b">addFldWithType</a>(numFields, elemSvfTy, strideOffset);</div>
1585
+ <div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>&#160; </div>
1586
+ <div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;StructType, ArrayType&gt;(elemTy))</div>
1587
+ <div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>&#160; {</div>
1588
+ <div class="line"><a name="l01560"></a><span class="lineno"> 1560</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>
1589
+ <div class="line"><a name="l01561"></a><span class="lineno"> 1561</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>
1590
+ <div class="line"><a name="l01562"></a><span class="lineno"> 1562</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>
1591
+ <div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>&#160; <span class="comment">// Copy ST&#39;s info, whose element 0 is the size of ST itself.</span></div>
1592
+ <div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> j = 0; j &lt; nfF; ++j)</div>
1593
+ <div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>&#160; {</div>
1594
+ <div class="line"><a name="l01566"></a><span class="lineno"> 1566</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>
1595
+ <div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ac0a9f85f90524abfd519d3cd2ac95a56">getFlattenFieldTypes</a>().push_back(elemTy);</div>
1596
+ <div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>&#160; }</div>
1597
+ <div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>&#160; numFields += nfF;</div>
1598
+ <div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>&#160; strideOffset += nfE;</div>
1599
+ <div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> tpj = 0; tpj &lt; nfE; ++tpj)</div>
1600
+ <div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>&#160; {</div>
1601
+ <div class="line"><a name="l01573"></a><span class="lineno"> 1573</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>
1602
+ <div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a03bfeee0406c7e54557e74f3a8e848b7">getFlattenElementTypes</a>().push_back(ty);</div>
1603
+ <div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>&#160; }</div>
1604
+ <div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>&#160; </div>
1605
+ <div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>&#160; }</div>
1606
+ <div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>&#160; <span class="keywordflow">else</span></div>
1607
+ <div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>&#160; {</div>
1608
+ <div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>&#160; <span class="comment">// Simple type</span></div>
1609
+ <div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160; numFields += 1;</div>
1610
+ <div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>&#160; strideOffset += 1;</div>
1611
+ <div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ac0a9f85f90524abfd519d3cd2ac95a56">getFlattenFieldTypes</a>().push_back(elemSvfTy);</div>
1612
+ <div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a03bfeee0406c7e54557e74f3a8e848b7">getFlattenElementTypes</a>().push_back(elemSvfTy);</div>
1613
+ <div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>&#160; }</div>
1614
+ <div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>&#160; }</div>
1615
+ <div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>&#160; </div>
1616
+ <div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>&#160; assert(stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a03bfeee0406c7e54557e74f3a8e848b7">getFlattenElementTypes</a>().size() == strideOffset &amp;&amp;</div>
1617
+ <div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>&#160; <span class="stringliteral">&quot;typeForStruct size incorrect!&quot;</span>);</div>
1618
+ <div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a1a07c2b1415c29d7d70791c6dfe602a3">setNumOfFieldsAndElems</a>(numFields,strideOffset);</div>
1619
+ <div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>&#160; </div>
1620
+ <div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>&#160; <span class="keywordflow">return</span> stInfo;</div>
1621
+ <div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>&#160;}</div>
1622
+ <div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>&#160; </div>
1623
+ <div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160; </div>
1624
+ <div class="line"><a name="l01599"></a><span class="lineno"><a class="line" href="classSVF_1_1LLVMModuleSet.html#a52853bd34a394882c6fd0fc73739c9f2"> 1599</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>
1625
+ <div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>&#160;{</div>
1626
+ <div class="line"><a name="l01602"></a><span class="lineno"> 1602</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>
1627
+ <div class="line"><a name="l01603"></a><span class="lineno"> 1603</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>
1628
+ <div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a00339d1d7074e9222776801ce8689f6b">addFldWithType</a>(0, svfType, 0);</div>
1629
+ <div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>&#160; </div>
1630
+ <div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#ac0a9f85f90524abfd519d3cd2ac95a56">getFlattenFieldTypes</a>().push_back(svfType);</div>
1631
+ <div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a03bfeee0406c7e54557e74f3a8e848b7">getFlattenElementTypes</a>().push_back(svfType);</div>
1632
+ <div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>&#160; stInfo-&gt;<a class="code" href="classSVF_1_1StInfo.html#a1a07c2b1415c29d7d70791c6dfe602a3">setNumOfFieldsAndElems</a>(1,1);</div>
1633
+ <div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>&#160; </div>
1634
+ <div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>&#160; <span class="keywordflow">return</span> stInfo;</div>
1635
+ <div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>&#160;}</div>
1641
1636
  </div><!-- fragment --></div><!-- contents -->
1642
1637
  <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>
1643
1638
  <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#l00134">BasicTypes.h:134</a></div></div>
1644
1639
  <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#l00094">LLVMModule.h:94</a></div></div>
1645
1640
  <div class="ttc" id="anamespaceSVF_1_1cppUtil_html_a374e7c0b161a77f4d693e13b99ed6283"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#a374e7c0b161a77f4d693e13b99ed6283">SVF::cppUtil::getVCallVtblPtr</a></div><div class="ttdeci">const Value * getVCallVtblPtr(const CallBase *cs)</div><div class="ttdef"><b>Definition:</b> <a href="CppUtil_8cpp_source.html#l00472">CppUtil.cpp:472</a></div></div>
1646
1641
  <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#l00131">LLVMModule.h:131</a></div></div>
1647
- <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#l01126">LLVMModule.cpp:1126</a></div></div>
1642
+ <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#l01121">LLVMModule.cpp:1121</a></div></div>
1648
1643
  <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#l00678">LLVMUtil.cpp:678</a></div></div>
1649
1644
  <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a484bbbc9713fc4be173943e6bc177fb5"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a484bbbc9713fc4be173943e6bc177fb5">SVF::LLVMUtil::removeUnusedFuncsAndAnnotationsAndGlobalVariables</a></div><div class="ttdeci">void removeUnusedFuncsAndAnnotationsAndGlobalVariables(Set&lt; Function * &gt; removedFuncList)</div><div class="ttdoc">Delete unused functions, annotations and global variables in extapi.bc.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00564">LLVMUtil.cpp:564</a></div></div>
1650
1645
  <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#l00071">LLVMModule.cpp:71</a></div></div>
@@ -1655,7 +1650,7 @@ $(function() {
1655
1650
  <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#l00133">BasicTypes.h:133</a></div></div>
1656
1651
  <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>
1657
1652
  <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#l00093">LLVMModule.cpp:93</a></div></div>
1658
- <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#l01422">LLVMModule.cpp:1422</a></div></div>
1653
+ <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#l01417">LLVMModule.cpp:1417</a></div></div>
1659
1654
  <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#l00546">SVFValue.h:546</a></div></div>
1660
1655
  <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#l00136">LLVMModule.h:136</a></div></div>
1661
1656
  <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_af4c9c5d445107b1816a4be93852ba612"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#af4c9c5d445107b1816a4be93852ba612">SVF::LLVMUtil::restoreFuncName</a></div><div class="ttdeci">std::string restoreFuncName(std::string funcName)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00612">LLVMUtil.cpp:612</a></div></div>
@@ -1664,7 +1659,7 @@ $(function() {
1664
1659
  <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#l00699">SVFValue.h:699</a></div></div>
1665
1660
  <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#l00175">LLVMModule.h:175</a></div></div>
1666
1661
  <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#l00098">BasicTypes.h:98</a></div></div>
1667
- <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#l00904">LLVMModule.cpp:904</a></div></div>
1662
+ <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#l00899">LLVMModule.cpp:899</a></div></div>
1668
1663
  <div class="ttc" id="anamespaceSVF_1_1cppUtil_html_a120e9fc3aa1dc2db3e0c2ea9a85b38b6"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#a120e9fc3aa1dc2db3e0c2ea9a85b38b6">SVF::cppUtil::getFunNameOfVCallSite</a></div><div class="ttdeci">std::string getFunNameOfVCallSite(const CallBase *cs)</div><div class="ttdef"><b>Definition:</b> <a href="CppUtil_8cpp_source.html#l00570">CppUtil.cpp:570</a></div></div>
1669
1664
  <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#l00717">SVFValue.h:717</a></div></div>
1670
1665
  <div class="ttc" id="aclassSVF_1_1SVFType_html_a6474965ec2cbc5173e313449c4868f81"><div class="ttname"><a href="classSVF_1_1SVFType.html#a6474965ec2cbc5173e313449c4868f81">SVF::SVFType::svfPtrTy</a></div><div class="ttdeci">static SVFType * svfPtrTy</div><div class="ttdoc">ptr type</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00192">SVFType.h:192</a></div></div>
@@ -1677,7 +1672,7 @@ $(function() {
1677
1672
  <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#l00086">BasicTypes.h:86</a></div></div>
1678
1673
  <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_ab932917041e1b1d8b461bfef464330fd"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#ab932917041e1b1d8b461bfef464330fd">SVF::LLVMModuleSet::ExtFuncsVec</a></div><div class="ttdeci">FunctionSetType ExtFuncsVec</div><div class="ttdoc">Record some &quot;sse_&quot; function declarations used in other ext function definition, e....</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00080">LLVMModule.h:80</a></div></div>
1679
1674
  <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#l00067">BasicTypes.h:67</a></div></div>
1680
- <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#l01188">LLVMModule.cpp:1188</a></div></div>
1675
+ <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#l01183">LLVMModule.cpp:1183</a></div></div>
1681
1676
  <div class="ttc" id="aSVFGBuilder_8h_html"><div class="ttname"><a href="SVFGBuilder_8h.html">SVFGBuilder.h</a></div></div>
1682
1677
  <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#l00226">LLVMModule.h:226</a></div></div>
1683
1678
  <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#l00247">SVFValue.h:247</a></div></div>
@@ -1689,17 +1684,17 @@ $(function() {
1689
1684
  <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a21636200f17c62034720c4287aa818b5"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a21636200f17c62034720c4287aa818b5">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_8cpp_source.html#l00039">LLVMUtil.cpp:39</a></div></div>
1690
1685
  <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#l00512">SVFType.h:512</a></div></div>
1691
1686
  <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#l00160">LLVMModule.h:160</a></div></div>
1692
- <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#l01321">LLVMModule.cpp:1321</a></div></div>
1687
+ <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#l01316">LLVMModule.cpp:1316</a></div></div>
1693
1688
  <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 flattening (including array elements)</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00139">SVFType.h:139</a></div></div>
1694
1689
  <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#l00169">LLVMUtil.cpp:169</a></div></div>
1695
1690
  <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#l00937">SVFValue.h:937</a></div></div>
1696
- <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#l01377">LLVMModule.cpp:1377</a></div></div>
1691
+ <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#l01372">LLVMModule.cpp:1372</a></div></div>
1697
1692
  <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#l00110">SVFModule.h:110</a></div></div>
1698
1693
  <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#l01091">SVFValue.h:1091</a></div></div>
1699
1694
  <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#l00090">LLVMModule.h:90</a></div></div>
1700
1695
  <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#l00112">LLVMModule.h:112</a></div></div>
1701
1696
  <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#l00205">LLVMModule.h:205</a></div></div>
1702
- <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#l01547">LLVMModule.cpp:1547</a></div></div>
1697
+ <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#l01542">LLVMModule.cpp:1542</a></div></div>
1703
1698
  <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#l00082">BasicTypes.h:82</a></div></div>
1704
1699
  <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#l00120">SVFModule.h:120</a></div></div>
1705
1700
  <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#l01049">SVFValue.h:1049</a></div></div>
@@ -1723,7 +1718,7 @@ $(function() {
1723
1718
  <div class="ttc" id="anamespaceSVF_html_ab44d20f806be99699895260b14a942d7"><div class="ttname"><a href="namespaceSVF.html#ab44d20f806be99699895260b14a942d7">SVF::DominanceFrontier</a></div><div class="ttdeci">llvm::DominanceFrontier DominanceFrontier</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00135">BasicTypes.h:135</a></div></div>
1724
1719
  <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#l00212">LLVMModule.h:212</a></div></div>
1725
1720
  <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#l00130">BasicTypes.h:130</a></div></div>
1726
- <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#l00607">LLVMModule.cpp:607</a></div></div>
1721
+ <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#l00602">LLVMModule.cpp:602</a></div></div>
1727
1722
  <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#l00093">SVFStat.h:93</a></div></div>
1728
1723
  <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#l00128">BasicTypes.h:128</a></div></div>
1729
1724
  <div class="ttc" id="aObjTypeInference_8h_html"><div class="ttname"><a href="ObjTypeInference_8h.html">ObjTypeInference.h</a></div></div>
@@ -1749,7 +1744,7 @@ $(function() {
1749
1744
  <div class="ttc" id="aclassSVF_1_1SVFLoopAndDomInfo_html_ac285502846c993f149b6bcc3e04f767e"><div class="ttname"><a href="classSVF_1_1SVFLoopAndDomInfo.html#ac285502846c993f149b6bcc3e04f767e">SVF::SVFLoopAndDomInfo::getBBPDomLevel</a></div><div class="ttdeci">const Map&lt; const SVFBasicBlock *, u32_t &gt; &amp; getBBPDomLevel() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00118">SVFValue.h:118</a></div></div>
1750
1745
  <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#l00069">LLVMModule.cpp:69</a></div></div>
1751
1746
  <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#l00363">SVFValue.h:363</a></div></div>
1752
- <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#l00568">LLVMModule.cpp:568</a></div></div>
1747
+ <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#l00563">LLVMModule.cpp:563</a></div></div>
1753
1748
  <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#l00228">SVFValue.h:228</a></div></div>
1754
1749
  <div class="ttc" id="aBreakConstantExpr_8h_html"><div class="ttname"><a href="BreakConstantExpr_8h.html">BreakConstantExpr.h</a></div></div>
1755
1750
  <div class="ttc" id="anamespaceSVF_1_1cppUtil_html_a279fa78f7a2e45b458a0358de9c061b8"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#a279fa78f7a2e45b458a0358de9c061b8">SVF::cppUtil::getVCallIdx</a></div><div class="ttdeci">s32_t getVCallIdx(const CallBase *cs)</div><div class="ttdef"><b>Definition:</b> <a href="CppUtil_8cpp_source.html#l00581">CppUtil.cpp:581</a></div></div>
@@ -1760,7 +1755,7 @@ $(function() {
1760
1755
  <div class="ttc" id="aclassSVF_1_1SVFStructType_html"><div class="ttname"><a href="classSVF_1_1SVFStructType.html">SVF::SVFStructType</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00344">SVFType.h:344</a></div></div>
1761
1756
  <div class="ttc" id="aclassSVF_1_1SVFConstant_html"><div class="ttname"><a href="classSVF_1_1SVFConstant.html">SVF::SVFConstant</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00833">SVFValue.h:833</a></div></div>
1762
1757
  <div class="ttc" id="anamespaceSVF_html_a7875172ff434b2210eea7cecfbbd959e"><div class="ttname"><a href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">SVF::Instruction</a></div><div class="ttdeci">llvm::Instruction Instruction</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00087">BasicTypes.h:87</a></div></div>
1763
- <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_aeaf96b0a6ee4b321a173374137ebe5e4"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#aeaf96b0a6ee4b321a173374137ebe5e4">SVF::LLVMModuleSet::removeUnusedExtAPIs</a></div><div class="ttdeci">void removeUnusedExtAPIs()</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l01168">LLVMModule.cpp:1168</a></div></div>
1758
+ <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_aeaf96b0a6ee4b321a173374137ebe5e4"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#aeaf96b0a6ee4b321a173374137ebe5e4">SVF::LLVMModuleSet::removeUnusedExtAPIs</a></div><div class="ttdeci">void removeUnusedExtAPIs()</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l01163">LLVMModule.cpp:1163</a></div></div>
1764
1759
  <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a8a77403306e97ab4cb31a56d38bba5be"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a8a77403306e97ab4cb31a56d38bba5be">SVF::LLVMUtil::isConstDataOrAggData</a></div><div class="ttdeci">bool isConstDataOrAggData(const Value *val)</div><div class="ttdoc">Return true if the value refers to constant data, e.g., i32 0.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00342">LLVMUtil.h:342</a></div></div>
1765
1760
  <div class="ttc" id="anamespaceSVF_html_a2bf58575ac7d068e0f1a4cf953b9e6cb"><div class="ttname"><a href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">SVF::StructType</a></div><div class="ttdeci">llvm::StructType StructType</div><div class="ttdoc">LLVM types.</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00094">BasicTypes.h:94</a></div></div>
1766
1761
  <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_afcde3a8e7d5eff76d017bd5c4b84cd1c"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#afcde3a8e7d5eff76d017bd5c4b84cd1c">SVF::LLVMModuleSet::getTypeInference</a></div><div class="ttdeci">ObjTypeInference * getTypeInference()</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00088">LLVMModule.cpp:88</a></div></div>
@@ -1774,11 +1769,11 @@ $(function() {
1774
1769
  <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a9fe3fa15a6a0ec25864cb8439a45596e"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a9fe3fa15a6a0ec25864cb8439a45596e">SVF::LLVMModuleSet::getMainLLVMModule</a></div><div class="ttdeci">Module * getMainLLVMModule() const</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00329">LLVMModule.h:329</a></div></div>
1775
1770
  <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#l00966">SVFValue.h:966</a></div></div>
1776
1771
  <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#l01000">SVFValue.h:1000</a></div></div>
1777
- <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#l00503">LLVMModule.cpp:503</a></div></div>
1772
+ <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#l00498">LLVMModule.cpp:498</a></div></div>
1778
1773
  <div class="ttc" id="aclassSVF_1_1SVFFunction_html_abd458bb5a035d3f7db32fac5f01b57f3"><div class="ttname"><a href="classSVF_1_1SVFFunction.html#abd458bb5a035d3f7db32fac5f01b57f3">SVF::SVFFunction::setExitBlock</a></div><div class="ttdeci">void setExitBlock(SVFBasicBlock *bb)</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8cpp_source.html#l00200">SVFValue.cpp:200</a></div></div>
1779
1774
  <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#l00856">SVFValue.h:856</a></div></div>
1780
1775
  <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#l00098">SVFModule.h:98</a></div></div>
1781
- <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#l01604">LLVMModule.cpp:1604</a></div></div>
1776
+ <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#l01599">LLVMModule.cpp:1599</a></div></div>
1782
1777
  <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#l00072">LLVMModule.h:72</a></div></div>
1783
1778
  <div class="ttc" id="aclassSVF_1_1SVFBasicBlock_html_a66f51cd41e93ad055c4a0c2874e73fae"><div class="ttname"><a href="classSVF_1_1SVFBasicBlock.html#a66f51cd41e93ad055c4a0c2874e73fae">SVF::SVFBasicBlock::getSuccessors</a></div><div class="ttdeci">const std::vector&lt; const SVFBasicBlock * &gt; &amp; getSuccessors() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00612">SVFValue.h:612</a></div></div>
1784
1779
  <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#l00070">LLVMModule.h:70</a></div></div>
@@ -1786,25 +1781,25 @@ $(function() {
1786
1781
  <div class="ttc" id="aSVFModule_8h_html"><div class="ttname"><a href="SVFModule_8h.html">SVFModule.h</a></div></div>
1787
1782
  <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 aggregate.</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00132">SVFType.h:132</a></div></div>
1788
1783
  <div class="ttc" id="aclassSVF_1_1ExtAPI_html_a58a764c27354d5f9b70995d30de65f1d"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a58a764c27354d5f9b70995d30de65f1d">SVF::ExtAPI::getExtAPI</a></div><div class="ttdeci">static ExtAPI * getExtAPI()</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00042">ExtAPI.cpp:42</a></div></div>
1789
- <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#l00696">LLVMModule.cpp:696</a></div></div>
1784
+ <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#l00691">LLVMModule.cpp:691</a></div></div>
1790
1785
  <div class="ttc" id="anamespaceSVF_1_1cppUtil_html_aab1dce633f9a03796c208b6fba2bd2b4"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#aab1dce633f9a03796c208b6fba2bd2b4">SVF::cppUtil::isVirtualCallSite</a></div><div class="ttdeci">bool isVirtualCallSite(const CallBase *cs)</div><div class="ttdef"><b>Definition:</b> <a href="CppUtil_8cpp_source.html#l00287">CppUtil.cpp:287</a></div></div>
1791
- <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#l00385">LLVMModule.cpp:385</a></div></div>
1786
+ <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#l00380">LLVMModule.cpp:380</a></div></div>
1792
1787
  <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#l00084">BasicTypes.h:84</a></div></div>
1793
1788
  <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#l00090">BasicTypes.h:90</a></div></div>
1794
1789
  <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#l00350">LLVMModule.h:350</a></div></div>
1795
1790
  <div class="ttc" id="aclassSVF_1_1SVFFunction_html_a60797e9e8b9cbd6b32cc71fa5d00d80c"><div class="ttname"><a href="classSVF_1_1SVFFunction.html#a60797e9e8b9cbd6b32cc71fa5d00d80c">SVF::SVFFunction::back</a></div><div class="ttdeci">const SVFBasicBlock * back() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00427">SVFValue.h:427</a></div></div>
1796
1791
  <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>
1797
- <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#l00482">LLVMModule.cpp:482</a></div></div>
1792
+ <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#l00477">LLVMModule.cpp:477</a></div></div>
1798
1793
  <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#l00154">LLVMUtil.h:154</a></div></div>
1799
1794
  <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#l00713">SVFValue.h:713</a></div></div>
1800
1795
  <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#l00136">BasicTypes.h:136</a></div></div>
1801
- <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#l01484">LLVMModule.cpp:1484</a></div></div>
1796
+ <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#l01479">LLVMModule.cpp:1479</a></div></div>
1802
1797
  <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>
1803
1798
  <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#l00092">LLVMModule.h:92</a></div></div>
1804
1799
  <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#l00621">SVFUtil.h:621</a></div></div>
1805
1800
  <div class="ttc" id="anamespaceSVF_html_a8ad3aa124fabddc2fdd07c50403d70a9"><div class="ttname"><a href="namespaceSVF.html#a8ad3aa124fabddc2fdd07c50403d70a9">SVF::ConstantDataSequential</a></div><div class="ttdeci">llvm::ConstantDataSequential ConstantDataSequential</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00119">BasicTypes.h:119</a></div></div>
1806
1801
  <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#l00264">BasicTypes.h:264</a></div></div>
1807
- <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#l01363">LLVMModule.cpp:1363</a></div></div>
1802
+ <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#l01358">LLVMModule.cpp:1358</a></div></div>
1808
1803
  <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#l00075">SVFValue.h:75</a></div></div>
1809
1804
  <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#l00102">SVFType.h:102</a></div></div>
1810
1805
  <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#l00124">BasicTypes.h:124</a></div></div>
@@ -1818,16 +1813,16 @@ $(function() {
1818
1813
  <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="GeneralType_8h_source.html#l00105">GeneralType.h:105</a></div></div>
1819
1814
  <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#l00201">Options.h:201</a></div></div>
1820
1815
  <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#l00155">LLVMModule.h:155</a></div></div>
1821
- <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#l00299">LLVMModule.cpp:299</a></div></div>
1816
+ <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#l00294">LLVMModule.cpp:294</a></div></div>
1822
1817
  <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#l00276">BasicTypes.h:276</a></div></div>
1823
1818
  <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#l00040">SVFModule.h:40</a></div></div>
1824
1819
  <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#l00044">SymbolTableBuilder.h:44</a></div></div>
1825
- <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#l01239">LLVMModule.cpp:1239</a></div></div>
1820
+ <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#l01236">LLVMModule.cpp:1236</a></div></div>
1826
1821
  <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>
1827
1822
  <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>
1828
1823
  <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#l00291">SVFType.h:291</a></div></div>
1829
1824
  <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#l00094">SVFStat.h:94</a></div></div>
1830
- <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#l01305">LLVMModule.cpp:1305</a></div></div>
1825
+ <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#l01300">LLVMModule.cpp:1300</a></div></div>
1831
1826
  <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#l00044">LLVMModule.h:44</a></div></div>
1832
1827
  <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">a 'single' basic block having no successors and containing return instruction in a function</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00327">SVFValue.h:327</a></div></div>
1833
1828
  <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#l00219">LLVMModule.h:219</a></div></div>
@@ -1844,17 +1839,17 @@ $(function() {
1844
1839
  <div class="ttc" id="anamespaceSVF_html_a911dbaab38cb42deb9c195c7f687853d"><div class="ttname"><a href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">SVF::ConstantExpr</a></div><div class="ttdeci">llvm::ConstantExpr ConstantExpr</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00120">BasicTypes.h:120</a></div></div>
1845
1840
  <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_a4b678ce8642fcdab0582cd626b7ac7c5"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a4b678ce8642fcdab0582cd626b7ac7c5">SVF::LLVMModuleSet::owned_ctx</a></div><div class="ttdeci">std::unique_ptr&lt; LLVMContext &gt; owned_ctx</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00071">LLVMModule.h:71</a></div></div>
1846
1841
  <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#l00108">SVFValue.h:108</a></div></div>
1847
- <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#l01213">LLVMModule.cpp:1213</a></div></div>
1842
+ <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#l01208">LLVMModule.cpp:1208</a></div></div>
1848
1843
  <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>
1849
- <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_afb06c18fcf916e84dfacb139f644aa48"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#afb06c18fcf916e84dfacb139f644aa48">SVF::LLVMModuleSet::collectExtFunAnnotations</a></div><div class="ttdeci">void collectExtFunAnnotations(const Module *mod)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00790">LLVMModule.cpp:790</a></div></div>
1844
+ <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_afb06c18fcf916e84dfacb139f644aa48"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#afb06c18fcf916e84dfacb139f644aa48">SVF::LLVMModuleSet::collectExtFunAnnotations</a></div><div class="ttdeci">void collectExtFunAnnotations(const Module *mod)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00785">LLVMModule.cpp:785</a></div></div>
1850
1845
  <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#l00331">LLVMUtil.cpp:331</a></div></div>
1851
1846
  <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>
1852
1847
  <div class="ttc" id="aclassSVF_1_1SVFFunction_html_a374cbaa780f540cb4b4ccac562a82632"><div class="ttname"><a href="classSVF_1_1SVFFunction.html#a374cbaa780f540cb4b4ccac562a82632">SVF::SVFFunction::exitBlock</a></div><div class="ttdeci">SVFBasicBlock * exitBlock</div><div class="ttdoc">annotations of this function</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00323">SVFValue.h:323</a></div></div>
1853
- <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#l01340">LLVMModule.cpp:1340</a></div></div>
1854
- <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#l01390">LLVMModule.cpp:1390</a></div></div>
1848
+ <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#l01335">LLVMModule.cpp:1335</a></div></div>
1849
+ <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#l01385">LLVMModule.cpp:1385</a></div></div>
1855
1850
  <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#l00093">LLVMModule.h:93</a></div></div>
1856
1851
  <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#l00217">LLVMUtil.cpp:217</a></div></div>
1857
- <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#l00458">LLVMModule.cpp:458</a></div></div>
1852
+ <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#l00453">LLVMModule.cpp:453</a></div></div>
1858
1853
  <div class="ttc" id="aclassSVF_1_1ExtAPI_html_a26bc352dbfd1b2fe34106a73f1f6d50c"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a26bc352dbfd1b2fe34106a73f1f6d50c">SVF::ExtAPI::getExtBcPath</a></div><div class="ttdeci">std::string getExtBcPath()</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00127">ExtAPI.cpp:127</a></div></div>
1859
1854
  <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#l00897">SVFValue.h:897</a></div></div>
1860
1855
  <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#l00126">BasicTypes.h:126</a></div></div>
@@ -1884,7 +1879,7 @@ $(function() {
1884
1879
  <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#l00129">BasicTypes.h:129</a></div></div>
1885
1880
  <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#l00088">SVFModule.h:88</a></div></div>
1886
1881
  <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#l00070">LLVMModule.cpp:70</a></div></div>
1887
- <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#l00317">LLVMModule.cpp:317</a></div></div>
1882
+ <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#l00312">LLVMModule.cpp:312</a></div></div>
1888
1883
  <!-- start footer part -->
1889
1884
  <hr class="footer"/><address class="footer"><small>
1890
1885
  Generated by &#160;<a href="http://www.doxygen.org/index.html">