<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Hi all,</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
 I am working on a project about pointer analysis based on LLVM IR, and I not very familar with LLVM Development.</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Now, I want to compare the original LLVM alias analysis pass with my tool. I use AAResultsWrapperPass to do this thing, just as below:</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<div style="color:#bbbbbb;background-color:#002b36;font-family:'Droid Sans Mono', 'monospace', monospace, 'Droid Sans Fallback';font-weight:normal;font-size:14px;line-height:19px">
<br>
</div>
<div style="color:#bbbbbb;background-color:#002b36;font-family:'Droid Sans Mono', 'monospace', monospace, 'Droid Sans Fallback';font-weight:normal;font-size:14px;line-height:19px">
<span><span>
<div style="color:#bbbbbb;background-color:#002b36;font-family:'Droid Sans Mono', 'monospace', monospace, 'Droid Sans Fallback';font-weight:normal">
<span><span style="color:#93a1a1;font-weight:bold">virtual</span><span> </span><span style="color:#93a1a1;font-weight:bold">bool</span><span> </span><span style="color:#268bd2">runOnFunction</span><span>(</span><span style="color:#cb4b16">Function</span><span> </span><span style="color:#93a1a1;font-weight:bold">&</span><span>F)</span></span>
<div><span>    {</span></div>
<div><span>      </span><span style="color:#cb4b16">AliasAnalysis</span><span> </span><span style="color:#859900">*</span><span style="color:#268bd2">AA</span><span> </span><span style="color:#859900">=</span><span> </span><span style="color:#859900">&</span><span style="color:#268bd2">getAnalysis</span><span><</span><span style="color:#cb4b16">AAResultsWrapperPass</span><span>>().</span><span style="color:#268bd2">getAAResults</span><span>();</span></div>
<div><span>      </span><span style="color:#859900">for</span><span> (</span><span style="color:#93a1a1;font-weight:bold">auto</span><span> </span><span style="color:#859900">&</span><span style="color:#268bd2">B</span><span> : F)</span></div>
<div><span>      {</span></div>
<div><span>        </span><span style="color:#859900">for</span><span> (</span><span style="color:#93a1a1;font-weight:bold">auto</span><span> </span><span style="color:#859900">&</span><span style="color:#268bd2">I</span><span> :
</span><span style="color:#268bd2">B</span><span>)</span></div>
<div><span>        {</span></div>
<div><span>          </span><span style="color:#859900">if</span><span> (</span><span style="color:#93a1a1;font-weight:bold">auto</span><span> </span><span style="color:#859900">*</span><span style="color:#268bd2">call</span><span> </span><span style="color:#859900">=</span><span> </span><span style="color:#268bd2">dyn_cast</span><span><</span><span style="color:#cb4b16">CallInst</span><span>>(</span><span style="color:#859900">&</span><span style="color:#268bd2">I</span><span>))</span></div>
<div><span>          {</span></div>
<div><span>            </span><span style="color:#859900">if</span><span> (</span><span style="color:#268bd2">call</span><span>-></span><span style="color:#268bd2">getCalledFunction</span><span>()</span><span style="color:#859900">!=</span><span> </span><span style="color:#268bd2">NULL</span><span>)</span></div>
<div><span>            {</span></div>
<div><span>              </span><span style="color:#859900">if</span><span>(</span><span style="color:#268bd2">call</span><span>-></span><span style="color:#268bd2">getNumArgOperands</span><span>()
</span><span style="color:#859900">!=</span><span style="color:#d33682">2</span><span>)</span></div>
<div><span>                </span><span style="color:#859900">continue</span><span>;</span></div>
<div><span>              </span><span style="color:#cb4b16">Value</span><span> </span><span style="color:#859900">*</span><span style="color:#268bd2">V1</span><span> </span><span style="color:#859900">=</span><span> </span><span style="color:#268bd2">call</span><span>-></span><span style="color:#268bd2">getArgOperand</span><span>(</span><span style="color:#d33682">0</span><span>);</span></div>
<div><span>              </span><span style="color:#cb4b16">Value</span><span> </span><span style="color:#859900">*</span><span style="color:#268bd2">V2</span><span> </span><span style="color:#859900">=</span><span> </span><span style="color:#268bd2">call</span><span>-></span><span style="color:#268bd2">getArgOperand</span><span>(</span><span style="color:#d33682">1</span><span>);</span></div>
<div>              //Get LLVM alias analysi result</div>
<span><span>              </span><span style="color:#cb4b16">AliasResult</span><span> </span><span style="color:#268bd2">aares</span><span> </span><span style="color:#859900">=</span><span> </span><span style="color:#268bd2">AA</span><span>-></span><span style="color:#268bd2">alias</span><span>(</span><span style="color:#268bd2">V1</span><span>,
</span><span style="color:#268bd2">V2</span><span>);</span></span></div>
<div style="color:#bbbbbb;background-color:#002b36;font-family:'Droid Sans Mono', 'monospace', monospace, 'Droid Sans Fallback';font-weight:normal">
<span><span>              .......................</span></span></div>
</span></span></div>
<div style="color:#bbbbbb;background-color:#002b36;font-family:'Droid Sans Mono', 'monospace', monospace, 'Droid Sans Fallback';font-weight:normal;font-size:14px;line-height:19px">
<span><span><br>
</span></span></div>
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
I have doubt that wether the AliasResults are analysied by<a href="https://llvm.org/docs/AliasAnalysis.html#available-aliasanalysis-implementations" title="https://llvm.org/docs/AliasAnalysis.html#available-aliasanalysis-implementations"> all LLVM alias pass</a>,
 such as -basic-aa, -globalsmodref-aa, -stens-aa. I find the implement of <span style="background-color:rgb(255, 255, 255);display:inline !important">AAResultsWrapperPass contains some code like below:</span></div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span style="background-color:rgb(255, 255, 255);display:inline !important">
<div style="color:#bbbbbb;background-color:#002b36;font-family:'Droid Sans Mono', 'monospace', monospace, 'Droid Sans Fallback';font-weight:normal;font-size:14px;line-height:19px">
<span><span>void AAResultsWrapperPass::getAnalysisUsage(AnalysisUsage </span><span style="color:#859900">&</span><span style="color:#cb4b16">AU</span><span>) const {</span></span>
<div><span>  </span><span style="color:#cb4b16">AU</span><span>.setPreservesAll();</span></div>
<div><span>  </span><span style="color:#cb4b16">AU</span><span>.addRequiredTransitive</span><span style="color:#859900"><</span><span>BasicAAWrapperPass</span><span style="color:#859900">></span><span>();</span></div>
<div><span>  </span><span style="color:#cb4b16">AU</span><span>.addRequiredTransitive</span><span style="color:#859900"><</span><span>TargetLibraryInfoWrapperPass</span><span style="color:#859900">></span><span>();</span></div>
<br>
<div><span>  </span><span style="color:#859900">//</span><span> We also need to mark
</span><span style="color:#268bd2">all</span><span> the alias analysis passes we will potentially</span></div>
<div><span>  </span><span style="color:#859900">//</span><span> probe </span><span style="color:#859900">in</span><span> runOnFunction
</span><span style="color:#859900">as</span><span> used here to ensure the legacy
</span><span style="color:#859900">pass</span><span> manager</span></div>
<div><span>  </span><span style="color:#859900">//</span><span> preserves them. This hard coding of lists of alias analyses
</span><span style="color:#859900">is</span><span> specific to</span></div>
<div><span>  </span><span style="color:#859900">//</span><span> the legacy </span>
<span style="color:#859900">pass</span><span> manager.</span></div>
<div><span>  </span><span style="color:#cb4b16">AU</span><span>.addUsedIfAvailable</span><span style="color:#859900"><</span><span>ScopedNoAliasAAWrapperPass</span><span style="color:#859900">></span><span>();</span></div>
<div><span>  </span><span style="color:#cb4b16">AU</span><span>.addUsedIfAvailable</span><span style="color:#859900"><</span><span>TypeBasedAAWrapperPass</span><span style="color:#859900">></span><span>();</span></div>
<div><span>  </span><span style="color:#cb4b16">AU</span><span>.addUsedIfAvailable</span><span style="color:#859900"><</span><span>objcarc::ObjCARCAAWrapperPass</span><span style="color:#859900">></span><span>();</span></div>
<div><span>  </span><span style="color:#cb4b16">AU</span><span>.addUsedIfAvailable</span><span style="color:#859900"><</span><span>GlobalsAAWrapperPass</span><span style="color:#859900">></span><span>();</span></div>
<div><span>  </span><span style="color:#cb4b16">AU</span><span>.addUsedIfAvailable</span><span style="color:#859900"><</span><span>SCEVAAWrapperPass</span><span style="color:#859900">></span><span>();</span></div>
<div><span>  </span><span style="color:#cb4b16">AU</span><span>.addUsedIfAvailable</span><span style="color:#859900"><</span><span>CFLAndersAAWrapperPass</span><span style="color:#859900">></span><span>();</span></div>
<div><span>  </span><span style="color:#cb4b16">AU</span><span>.addUsedIfAvailable</span><span style="color:#859900"><</span><span>CFLSteensAAWrapperPass</span><span style="color:#859900">></span><span>();</span></div>
<div><span>  </span><span style="color:#cb4b16">AU</span><span>.addUsedIfAvailable</span><span style="color:#859900"><</span><span>ExternalAAWrapperPass</span><span style="color:#859900">></span><span>();</span></div>
<span><span>}</span></span></div>
<table class="highlight tab-size js-file-line-container" data-tab-size="8" data-paste-markdown-skip="" style="box-sizing:border-box;border-spacing:0px;border-collapse:collapse;tab-size:8;color:rgb(36, 41, 46);font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";font-size:14px;background-color:rgb(255, 255, 255)">
<tbody>
<tr style="box-sizing:border-box">
<td class="blob-num js-line-number" data-line-number="902" style="box-sizing:border-box;padding:0px 10px;width:50px;min-width:50px;font-family:SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace;font-size:12px;line-height:20px;color:var(--color-diff-blob-num-text);text-align:right;vertical-align:top;cursor:pointer;user-select:none">
</td>
</tr>
</tbody>
</table>
Does it mean the <span style="background-color:rgb(255, 255, 255);display:inline !important">AAResultsWrapperPass contains all the alias analysis pass result?</span></span></div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span style="background-color:rgb(255, 255, 255);display:inline !important"><span style="background-color:rgb(255, 255, 255);display:inline !important">By the way, is there a better implement to get the LLVM alias analysis result. Thank you for telling me about
 that.</span></span></div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span style="background-color:rgb(255, 255, 255);display:inline !important"><span style="background-color:rgb(255, 255, 255);display:inline !important"><br>
</span></span></div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Thanks for you reading. Wishing you have a good day.</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Regards,</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Kunpeng</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
</body>
</html>