<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">Hi Armin,<br><br>For demand-driven pointer analysis, there's cfl-steens-aa and cfl-anders-aa already in LLVM [1]. Last I've heard, the implementation was good enough to be used for optimization, but I don't know if it has bit-rotten or not since then.<br><br></div><div dir="ltr">For global analysis, you can take a look at the SVF framework [2]. They have nice documentation that explains how the analysis works.<br>As for the original DSA, we maintain a port for fairly recent llvm 5.0 as a part of the SeaHorn verification framework [3]. There's also our custom flavor of DSA, SeaDsa [4].<br><br>But taking a step back, it really depends on what you want to do with it. If you want to optimize programs, perhaps it'd be best if you relied on Basic/TB AA and inlined in all the interprocedural contexts you care about. If that's not feasible, if you don't intend to do many AA queries, try CFL from LLVM. If you need precise interprocedural AA for whole programs, and your programs are small, try SVF. To my knowledge, no publicly-available Andersen-style pointer analysis scales to large programs (say > 500MB bitcode), and you may have more luck with DSA. The best approach is probably to take existing implementations, see which one is scalable enough for the problem you are interested in, and tweak it to gain more precision. If you are interested in AA, there is a nice overview of the field here [5].<br><br>Best,<br>Kuba<br><br>[1] <a href="https://github.com/grievejia/GSoC2016/blob/master/writeup.pdf" target="_blank">https://github.com/grievejia/GSoC2016/blob/master/writeup.pdf</a><br>[2] <a href="https://github.com/SVF-tools/SVF">https://github.com/SVF-tools/SVF</a><br>[3] <a href="https://github.com/seahorn/llvm-dsa/tree/llvm-5.0">https://github.com/seahorn/llvm-dsa/tree/llvm-5.0</a><br>[4] <a href="https://github.com/seahorn/sea-dsa">https://github.com/seahorn/sea-dsa</a><br>[5] <a href="https://yanniss.github.io/points-to-tutorial15.pdf">https://yanniss.github.io/points-to-tutorial15.pdf</a></div></div></div></div></div></div><br><div class="gmail_quote"><div dir="ltr">On Tue, Dec 18, 2018 at 11:21 AM via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi,<br>
<br>
I'm looking for interprocedural AAs and have, of course, found<br>
<a href="https://llvm.org/docs/AliasAnalysis.html" rel="noreferrer" target="_blank">https://llvm.org/docs/AliasAnalysis.html</a>.  However, the AAs that come<br>
bundled with LLVM do not work interprocedurally in a way that I need it<br>
(on/with stack variables).  The two interesting looking AAs come with the<br>
optional `poolalloc' module that hasn't been updated in years (I guess<br>
<a href="http://lists.llvm.org/pipermail/llvm-dev/2015-February/082054.html" rel="noreferrer" target="_blank">http://lists.llvm.org/pipermail/llvm-dev/2015-February/082054.html</a> never<br>
happened).  My question:  is there currently some interprocedural AA that<br>
LLVM suggests (and/or even uses internally) that can cope with something<br>
like this (without the need to inline everything for analysis' sake):<br>
<br>
void foo(int* x) {<br>
  *x = 22; // <-- same value<br>
}<br>
<br>
int main(void) {<br>
  int x; // <-- same value<br>
  (void) foo(&x);<br>
  return 0;<br>
}<br>
<br>
Thanks a lot for your thoughts :)<br>
<br>
Armin<br>
<br>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail-m_-3142866953010534893gmail_signature"><div>Jakub Kuderski</div></div>