<div dir="ltr">Hi,<div><br></div><div>This came up in <a href="https://reviews.llvm.org/D38569" target="_blank">https://reviews.llvm.org/<wbr>D38569</a>, and I'd like some input on what's the best way to get alias and mod-ref info without having two alias calls.</div><div><br></div><div>A couple of ideas:</div><div>(a) Extend the getModRefInfo interface (+getModRefBehavior, +gerArgModRefInfo) to return a pair {ModRefInfo, AliasResult}. </div><div><br></div><div>The AliasResult can be optional based on an argument</div><div>     e.g.:</div><div>    struct MRI_AR { ModRefInfo MRI, AliasResult AR };</div><div>    MRI_AR getModRefInfoAlias (LoadInst *LI, MemoryLocation Loc, bool SetAliasResultField);</div><div><br></div><div>Add wrapper APIs to preserve current calls.<br>    e.g.:<br>     ModRefInfo getModRefInfo (LoadInst *LI, MemoryLocation Loc) {<br>          return getModRefInfoAlias (LI, Loc, false).MRI;<br>      }</div><div><br>(b) From talking offline with George, introducing a MRI_MustMod in ModRefInfo.</div><div><br></div><div><br></div><div>Open question: How to handle callsites.</div><div><br></div><div><br></div><div>In terms of whether this is worth doing, as a preliminary timing test I timed the llvm bootstrap build with 1 vs 2 alias calls in D38569: <span style="background-color:rgba(151,234,151,0.6);color:rgb(0,0,0);font-family:Menlo,Consolas,Monaco,monospace;font-size:11px;white-space:pre-wrap">instructionClobbersQue<wbr>ry:296</span>, and got the following:</div><div><div>2 alias calls:</div>real    62m52.627s<br>user    2769m46.964s<br>sys     17m48.072s<div>1 alias call:</div>real    62m56.659s<br>user    2766m40.452s<br>sys     17m46.312s</div><div><br></div><div>Thoughts?</div><div><br></div><div><br></div><div>Thanks,</div><div>Alina</div><div><br></div><div><br></div><div><br></div></div>