[PATCH] D96668: [BasicAA] Always strip single-argument phi nodes

Nikita Popov via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Sun Feb 14 13:33:24 PST 2021


nikic created this revision.
nikic added reviewers: jdoerfert, asbirlea.
Herald added subscribers: dexonsmith, kerbowa, hiraditya, nhaehnle, jvesely, arsenm.
nikic requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

We can always look through single-argument (LCSSA) phi nodes when performing alias analysis. getUnderlyingObject() already does this, but stripPointerCastsAndInvariantGroups() does not. We still look through these phi nodes with the usual aliasPhi() logic, but sometimes get sub-optimal results due to the restrictions on value equivalence when looking through arbitrary phi nodes. I think it's generally beneficial to keep the underlying object logic and the pointer cast stripping logic in sync, insofar as it is possible.

With this patch we get marginally better results:

  aa.NumMayAlias | 5010069 | 5009861
  aa.NumMustAlias | 347518 | 347674
  aa.NumNoAlias | 27201336 | 27201528
  ...
  licm.NumPromoted | 1293 | 1296

I've renamed the relevant strip method to `stripPointerCastsForAliasAnalysis()`, as we're past the point where we can explicitly spell out everything that's stripped.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D96668

Files:
  llvm/include/llvm/IR/Value.h
  llvm/lib/Analysis/BasicAliasAnalysis.cpp
  llvm/lib/Analysis/GlobalsModRef.cpp
  llvm/lib/IR/Value.cpp
  llvm/lib/Target/AMDGPU/AMDGPUAliasAnalysis.cpp
  llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
  llvm/test/Analysis/BasicAA/phi-aa.ll

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D96668.323631.patch
Type: text/x-patch
Size: 7000 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210214/2800e2a2/attachment.bin>


More information about the llvm-commits mailing list