[PATCH] D44748: Track whether the size of a MemoryLocation is precise
Nuno Lopes via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Jun 12 01:29:57 PDT 2018
nlopes added inline comments.
================
Comment at: lib/Analysis/MemoryDependenceAnalysis.cpp:1115
if (!Pair.second) {
- if (CacheInfo->Size < Loc.Size) {
- // The query's Size is greater than the cached one. Throw out the
- // cached data and proceed with the query at the greater size.
- CacheInfo->Pair = BBSkipFirstBlockPair();
- CacheInfo->Size = Loc.Size;
- for (auto &Entry : CacheInfo->NonLocalDeps)
- if (Instruction *Inst = Entry.getResult().getInst())
- RemoveFromReverseMap(ReverseNonLocalPtrDeps, Inst, CacheKey);
- CacheInfo->NonLocalDeps.clear();
- } else if (CacheInfo->Size > Loc.Size) {
- // This query's Size is less than the cached one. Conservatively restart
- // the query using the greater size.
- return getNonLocalPointerDepFromBB(
- QueryInst, Pointer, Loc.getWithNewSize(CacheInfo->Size), isLoad,
- StartBB, Result, Visited, SkipFirstBlock);
+ if (!CacheInfo->Size.equalsIgnoringPrecision(Loc.Size)) {
+ // For our purposes, unknown size > all others.
----------------
Why is it ok to ignore precision here?
If we did an alias query before with precise size, and the new one is with upper-bound, the results don't seem reusable.
(I have no clue how this function works; so I don't know if the above case can happen)
https://reviews.llvm.org/D44748
More information about the llvm-commits
mailing list