[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