This is an archive of the discontinued LLVM Phabricator instance.

[BasicAA] Always strip single-argument phi nodes
ClosedPublic

Authored by nikic on Feb 14 2021, 1:33 PM.

Details

Summary

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.

Diff Detail

Event Timeline

nikic created this revision.Feb 14 2021, 1:33 PM
nikic requested review of this revision.Feb 14 2021, 1:33 PM
Herald added a project: Restricted Project. · View Herald TranscriptFeb 14 2021, 1:33 PM
jdoerfert added inline comments.Feb 15 2021, 2:13 PM
llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
399

we don't want to look through phi with one input?

nikic added inline comments.Feb 18 2021, 11:55 AM
llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
399

It's okay to drop them (and InstCombine will do so independently). The reason why I changed this to not call stripPointerCastsForAliasAnalysis() is that on an abstract level, it's not obvious that the set of things that are legal to strip here, and legal to strip in alias analysis are always the same. So I wanted to limit this only to the transform described in the comment.

This revision is now accepted and ready to land.Feb 18 2021, 12:30 PM
This revision was landed with ongoing or failed builds.Feb 18 2021, 2:08 PM
This revision was automatically updated to reflect the committed changes.