<div dir="ltr">Given you basically want to reuse the graph, you should refactor that out too.<div><br></div><div>The only difference between the steens and inclusion based ones should be how they walk the graph and what preprocessing they do, if any.</div><div><br></div><div><br></div><div>(This also lets you layer them without having to rebuild the entire graph.</div><div><br></div><div><br></div><div>As we discussed offline, in a perfect world, you want to do something like quickly ask the steens if they are no-alias. If it says "no-alias", you return that, otherwise, you do inclusion based walking)</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jun 30, 2016 at 2:58 PM, Jia Chen via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">grievejia created this revision.<br>
grievejia added reviewers: george.burgess.iv, hfinkel.<br>
grievejia added a subscriber: llvm-commits.<br>
Herald added a subscriber: mehdi_amini.<br>
<br>
This patch renames the existing CFLAliasAnalysis pass to CFLSteensAliasAnalysis, and introduces a new pass CFLAndersAliasAnalysis. The pass name "cfl-aa" gets replaced by "cfl-steens-aa" and "cfl-anders-aa". The "use-cfl-aa" and "use-cfl-aa-in-codegen" flags gets changed from a boolean flags to enum flags (none/steens/anders).<br>
<br>
Precision enhancements are getting more and more difficult to add to the existing CFLAliasAnalysis pass due to its unification-based nature. Since extending CFL-AA with features like field sensitivity and inclusion-based semantics won't share too much of the existing codes anyway, it's much cleaner to start anew (and perhaps factor out certain parts of the original codes that can be shared by all CFL-based alias analysis) than to keep increasing the code complexity in CFLAliasAnalysis.cpp.<br>
<br>
The newly added pass contains only a stub implementation of alias() currently. Its body will be gradually filled out in subsequent patches.<br>
<br>
<a href="http://reviews.llvm.org/D21910" rel="noreferrer" target="_blank">http://reviews.llvm.org/D21910</a><br>
<br>
Files:<br>
  include/llvm/Analysis/CFLAliasAnalysis.h<br>
  include/llvm/Analysis/CFLAndersAliasAnalysis.h<br>
  include/llvm/Analysis/CFLSteensAliasAnalysis.h<br>
  include/llvm/InitializePasses.h<br>
  include/llvm/LinkAllPasses.h<br>
  lib/Analysis/AliasAnalysis.cpp<br>
  lib/Analysis/Analysis.cpp<br>
  lib/Analysis/CFLAliasAnalysis.cpp<br>
  lib/Analysis/CFLAndersAliasAnalysis.cpp<br>
  lib/Analysis/CFLSteensAliasAnalysis.cpp<br>
  lib/Analysis/CMakeLists.txt<br>
  lib/CodeGen/TargetPassConfig.cpp<br>
  lib/Passes/PassBuilder.cpp<br>
  lib/Passes/PassRegistry.def<br>
  lib/Transforms/IPO/PassManagerBuilder.cpp<br>
  test/Analysis/CFLAliasAnalysis/Steensgaard/arguments-globals.ll<br>
  test/Analysis/CFLAliasAnalysis/Steensgaard/arguments.ll<br>
  test/Analysis/CFLAliasAnalysis/Steensgaard/asm-global-bugfix.ll<br>
  test/Analysis/CFLAliasAnalysis/Steensgaard/attr-escape.ll<br>
  test/Analysis/CFLAliasAnalysis/Steensgaard/basic-interproc.ll<br>
  test/Analysis/CFLAliasAnalysis/Steensgaard/branch-alias.ll<br>
  test/Analysis/CFLAliasAnalysis/Steensgaard/const-expr-gep.ll<br>
  test/Analysis/CFLAliasAnalysis/Steensgaard/constant-over-index.ll<br>
  test/Analysis/CFLAliasAnalysis/Steensgaard/empty.ll<br>
  test/Analysis/CFLAliasAnalysis/Steensgaard/full-store-partial-alias.ll<br>
  test/Analysis/CFLAliasAnalysis/Steensgaard/gep-index-no-alias.ll<br>
  test/Analysis/CFLAliasAnalysis/Steensgaard/gep-signed-arithmetic.ll<br>
  test/Analysis/CFLAliasAnalysis/Steensgaard/interproc-arg-deref-escape.ll<br>
  test/Analysis/CFLAliasAnalysis/Steensgaard/interproc-arg-escape.ll<br>
  test/Analysis/CFLAliasAnalysis/Steensgaard/interproc-ret-arg.ll<br>
  test/Analysis/CFLAliasAnalysis/Steensgaard/interproc-ret-deref-arg-multilevel.ll<br>
  test/Analysis/CFLAliasAnalysis/Steensgaard/interproc-ret-deref-arg.ll<br>
  test/Analysis/CFLAliasAnalysis/Steensgaard/interproc-ret-escape.ll<br>
  test/Analysis/CFLAliasAnalysis/Steensgaard/interproc-ret-ref-arg-multilevel.ll<br>
  test/Analysis/CFLAliasAnalysis/Steensgaard/interproc-ret-ref-arg.ll<br>
  test/Analysis/CFLAliasAnalysis/Steensgaard/interproc-ret-unknown.ll<br>
  test/Analysis/CFLAliasAnalysis/Steensgaard/interproc-store-arg-multilevel.ll<br>
  test/Analysis/CFLAliasAnalysis/Steensgaard/interproc-store-arg-unknown.ll<br>
  test/Analysis/CFLAliasAnalysis/Steensgaard/interproc-store-arg.ll<br>
  test/Analysis/CFLAliasAnalysis/Steensgaard/malloc-and-free.ll<br>
  test/Analysis/CFLAliasAnalysis/Steensgaard/multilevel-combine.ll<br>
  test/Analysis/CFLAliasAnalysis/Steensgaard/multilevel.ll<br>
  test/Analysis/CFLAliasAnalysis/Steensgaard/must-and-partial.ll<br>
  test/Analysis/CFLAliasAnalysis/Steensgaard/opaque-call-alias.ll<br>
  test/Analysis/CFLAliasAnalysis/Steensgaard/phi-and-select.ll<br>
  test/Analysis/CFLAliasAnalysis/Steensgaard/pr27213.ll<br>
  test/Analysis/CFLAliasAnalysis/Steensgaard/simple.ll<br>
  test/Analysis/CFLAliasAnalysis/Steensgaard/stratified-attrs-indexing.ll<br>
  test/Analysis/CFLAliasAnalysis/Steensgaard/va.ll<br>
  test/Analysis/CFLAliasAnalysis/arguments-globals.ll<br>
  test/Analysis/CFLAliasAnalysis/arguments.ll<br>
  test/Analysis/CFLAliasAnalysis/asm-global-bugfix.ll<br>
  test/Analysis/CFLAliasAnalysis/attr-escape.ll<br>
  test/Analysis/CFLAliasAnalysis/basic-interproc.ll<br>
  test/Analysis/CFLAliasAnalysis/branch-alias.ll<br>
  test/Analysis/CFLAliasAnalysis/const-expr-gep.ll<br>
  test/Analysis/CFLAliasAnalysis/constant-over-index.ll<br>
  test/Analysis/CFLAliasAnalysis/empty.ll<br>
  test/Analysis/CFLAliasAnalysis/full-store-partial-alias.ll<br>
  test/Analysis/CFLAliasAnalysis/gep-index-no-alias.ll<br>
  test/Analysis/CFLAliasAnalysis/gep-signed-arithmetic.ll<br>
  test/Analysis/CFLAliasAnalysis/interproc-arg-deref-escape.ll<br>
  test/Analysis/CFLAliasAnalysis/interproc-arg-escape.ll<br>
  test/Analysis/CFLAliasAnalysis/interproc-ret-arg.ll<br>
  test/Analysis/CFLAliasAnalysis/interproc-ret-deref-arg-multilevel.ll<br>
  test/Analysis/CFLAliasAnalysis/interproc-ret-deref-arg.ll<br>
  test/Analysis/CFLAliasAnalysis/interproc-ret-escape.ll<br>
  test/Analysis/CFLAliasAnalysis/interproc-ret-ref-arg-multilevel.ll<br>
  test/Analysis/CFLAliasAnalysis/interproc-ret-ref-arg.ll<br>
  test/Analysis/CFLAliasAnalysis/interproc-ret-unknown.ll<br>
  test/Analysis/CFLAliasAnalysis/interproc-store-arg-multilevel.ll<br>
  test/Analysis/CFLAliasAnalysis/interproc-store-arg-unknown.ll<br>
  test/Analysis/CFLAliasAnalysis/interproc-store-arg.ll<br>
  test/Analysis/CFLAliasAnalysis/malloc-and-free.ll<br>
  test/Analysis/CFLAliasAnalysis/multilevel-combine.ll<br>
  test/Analysis/CFLAliasAnalysis/multilevel.ll<br>
  test/Analysis/CFLAliasAnalysis/must-and-partial.ll<br>
  test/Analysis/CFLAliasAnalysis/opaque-call-alias.ll<br>
  test/Analysis/CFLAliasAnalysis/phi-and-select.ll<br>
  test/Analysis/CFLAliasAnalysis/pr27213.ll<br>
  test/Analysis/CFLAliasAnalysis/simple.ll<br>
  test/Analysis/CFLAliasAnalysis/stratified-attrs-indexing.ll<br>
  test/Analysis/CFLAliasAnalysis/va.ll<br>
<br>
<br>_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
<br></blockquote></div><br></div>