[GSoC 2016] Introduction & Feedback - Better Alias Analysis

Dear LLVM community,

I am a GSoC student this year working on the project of improving alias analysis in LLVM.

The proposal initially came from a discussion I had with various devs on the mailing list some time ago [1]. The general goal of this project is to make alias analysis (in particular, cfl-aa) “better”, and to be more concrete here is a list of objectives I had in mind:

  • Evaluating the current state of cfl-aa, and fix all known bugs.
  • Improving the precision of cfl-aa. Although flow sensitivity may not be very helpful for LLVM in its current form, field sensitivity should be something important and I’ll definitely try to add it to cfl-aa. Given the complexity LLVM’s memory model has, my guess is that I may need to spend most of my summer on this task.
  • Improving the performance of cfl-aa. (It is fairly efficient in its current form, IMO. Further performance tuning may be needed if more features such as field sensitivity were added.)
  • Understanding how various clients interacts with cfl-aa, and exploring various ways to minimize precision/performance losses caused by the interaction.
  • If time permits, maybe I can look at scev-aa and try to bring it back to the compilation pipeline.

I know these objectives are not as clear cut as other GSoC projects people used to have, and it is hard to come up with a clear schedule as well as a success metric. Nevertheless even if my contributions may seem fragmented and incremental, I felt that as long as the work is useful to the community, it is going to be the most valuable summer I’ve ever had as a student.

** Current Status **

I’ve submitted a simple patch last week (D19776) to fix a subtle bug in cfl-aa. After applying the patch on r267335 and bootstrap LLVM/clang with cfl-aa enabled on its own as well as behind basic-aa on an x86 machine, I ran test-suite with lit and saw no failed test cases. I didn’t time the tests in any rigorous way, but it didn’t look like cfl-aa add very noticable performance overhead. It may be a good time, I think, to call for people’s help to test cfl-aa on their internal codebase. If everything goes well, we should be able to safely turn on cfl-aa by default soon.

Let me conclude this introduction by saying thank you for accepting my proposal, and in particular I want to thank my mentors George and Hal for the providing me with so much support and guidance. Please let me know if you have any comments or suggestions.


After applying the patch on r267335 and bootstrap LLVM/clang with cfl-aa enabled on its own as well as behind basic-aa on an x86 machine, I ran test-suite with lit and saw no failed test cases

Woohoo! This is great news. :smiley:

I’m not sure how closely everyone is reading the intro emails, so we may get more help if we also send a slightly more targeted “Hey, CFLAA isn’t obviously broken anymore. Please help us find any other problems/please report performance numbers to us,” email. Whether we do that this very second, or when GSoC actually starts, is up to you.

Awesome! Once this lands in tree, I’ll do a run on our codebase to see if I see anything obvious. I suspect others can do the same. Philip

Yep, same. What’s the magic rune to enable cfl-aa?


(Just to note: the other issue i remember with CFL-AA is that it currently causes performance loss. This is quite common when you increase precision, because things move/change things they couldn’t before, and often do so without the natural bounds imprecision provided before :P)

What’s the magic rune to enable cfl-aa?

We have two magical opt flags: -use-cfl-aa and -use-cfl-aa-in-codegen :slight_smile:

IIRC, both of them should cause CFLAA to be enabled as a last resort.

Hi Jia-

What apps/benchmarks do you plan to use to test the performance of cfl-aa ?


Hi Dibyendu,

All I have at this point is llvm test-suite. I also have access to SPEC’06, which may be helpful as well. My hope is that the applications in those benchmarks are complex enough to put enough pressure on cfl-aa.

That being said, I’m not an expert in performance testing, and I am open to suggestions on this topic.