Allow recursive base-object analysis for some GEPs. The new version
still retains some bail-outs to avoid some redundant work.
This has a notable impact across a large IR corpus (32k modules from
large set of C/C++ workloads).
Some of the highlights include:
aa.NumNoAlias +1.52%
aa.NumMayAlias −0.10%
licm.NumMovedLoads +20.47%
licm.NumHoisted +2.03%
early-cse.NumCSELoad +1.59%
SLP.NumVectorInstructions +0.86%
loop-vectorize.LoopsVectorized +0.21%
instcount.TotalInsts −0.05%
instcount.NumLoadInst −0.10%
basicaa.SearchTimes +0.98%
basicaa.SearchLimitReached +14.39%
LV runtime alias check −1.3%
Compile-time has 2 notable changes
stage1-ReleaseThinLTO: +0.04%
stage1-ReleaseLTO-g: +0.18%
https://llvm-compile-time-tracker.com/compare.php?from=26ed0c17c0de84add0513a0e9699479f8c88b8fe&to=476e7466c5f543ac74c86bad728d79892f668f73&stat=instructions:u
The stage1-ReleaseLTO-g regression in particular is almost exclusively
due to tramp3d-v4, for which we also generate +1.18% more code, so the
majority of the increase is coming from additional transforms/codegen,
not the analysis itself.
PR: https://github.com/llvm/llvm-project/pull/205010