diff options
author | Michael Zolotukhin <mzolotukhin@apple.com> | 2018-03-12 20:36:25 +0000 |
---|---|---|
committer | Michael Zolotukhin <mzolotukhin@apple.com> | 2018-03-12 20:36:25 +0000 |
commit | a3d8ef0f0821f674a24587f0a477cf33e15ae06e (patch) | |
tree | 02e4ed064021baa610395981d121c1285d1f134e /llvm/lib/Transforms/ObjCARC/ProvenanceAnalysis.h | |
parent | d1faa56f3ddfb104aad9a7b6000eca869c42d8c4 (diff) | |
download | bcm5719-llvm-a3d8ef0f0821f674a24587f0a477cf33e15ae06e.tar.gz bcm5719-llvm-a3d8ef0f0821f674a24587f0a477cf33e15ae06e.zip |
Improve caching scheme in ProvenanceAnalysis.
Summary:
ProvenanceAnalysis::related(A, B) currently memoizes its results, and on big
tests the cache grows too large, and we're spending most of the time
growing/looking through DenseMap.
This patch reduces the size of the cache by normalizing keys first: we do that
by calling GetUnderlyingObjCPtr on the input values. The results of
GetUnderlyingObjCPtr are also memoized in a separate cache.
The patch doesn't bring noticable changes to compile time on CTMark, however
significantly helps one of our internal tests.
Reviewers: gottesmm
Subscribers: hiraditya, llvm-commits
Differential Revision: https://reviews.llvm.org/D44270
llvm-svn: 327328
Diffstat (limited to 'llvm/lib/Transforms/ObjCARC/ProvenanceAnalysis.h')
-rw-r--r-- | llvm/lib/Transforms/ObjCARC/ProvenanceAnalysis.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/ObjCARC/ProvenanceAnalysis.h b/llvm/lib/Transforms/ObjCARC/ProvenanceAnalysis.h index 5e676167a6a..f21ea3666b1 100644 --- a/llvm/lib/Transforms/ObjCARC/ProvenanceAnalysis.h +++ b/llvm/lib/Transforms/ObjCARC/ProvenanceAnalysis.h @@ -56,6 +56,8 @@ class ProvenanceAnalysis { CachedResultsTy CachedResults; + DenseMap<const Value *, const Value *> UnderlyingObjCPtrCache; + bool relatedCheck(const Value *A, const Value *B, const DataLayout &DL); bool relatedSelect(const SelectInst *A, const Value *B); bool relatedPHI(const PHINode *A, const Value *B); @@ -73,6 +75,7 @@ public: void clear() { CachedResults.clear(); + UnderlyingObjCPtrCache.clear(); } }; |