diff options
| author | Justin Lebar <jlebar@google.com> | 2016-11-05 16:47:25 +0000 |
|---|---|---|
| committer | Justin Lebar <jlebar@google.com> | 2016-11-05 16:47:25 +0000 |
| commit | 54b0be048e3e449aadf7206efa991ee3419188ac (patch) | |
| tree | 97b913f7630436a86dfe534c5982f375993becd3 /llvm/lib/Transforms | |
| parent | 1af0fc1103591c35cca8048dae9776a6c329ecd1 (diff) | |
| download | bcm5719-llvm-54b0be048e3e449aadf7206efa991ee3419188ac.tar.gz bcm5719-llvm-54b0be048e3e449aadf7206efa991ee3419188ac.zip | |
[LoopStrengthReduce] Don't use a DenseSet<int64_t> when we might add any valid int64_t to the set.
Summary:
SmallSetVector uses DenseSet, but that means we need to reserve some
values for the empty and tombstone keys.
It seems to me we should have a general way to let us store full-range
ints inside of DenseSets, and furthermore that we probably shouldn't
silently let you add ints into DenseSets without explicitly promising
that they're in range. But that's a battle for another day; for now,
just fix this code, since we currently do something Very Bad when
compiling ffmpeg.
Fixes PR30914.
Reviewers: jeremyhu
Subscribers: llvm-commits, mzolotukhin
Differential Revision: https://reviews.llvm.org/D26323
llvm-svn: 286038
Diffstat (limited to 'llvm/lib/Transforms')
| -rw-r--r-- | llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp b/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp index 9354d40b98c..e28c374549c 100644 --- a/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp +++ b/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp @@ -1646,7 +1646,12 @@ class LSRInstance { Instruction *IVIncInsertPos; /// Interesting factors between use strides. - SmallSetVector<int64_t, 8> Factors; + /// + /// We explicitly use a SetVector which contains a SmallSet, instead of the + /// default, a SmallDenseSet, because we need to use the full range of + /// int64_ts, and there's currently no good way of doing that with + /// SmallDenseSet. + SetVector<int64_t, SmallVector<int64_t, 8>, SmallSet<int64_t, 8>> Factors; /// Interesting use types, to facilitate truncation reuse. SmallSetVector<Type *, 4> Types; |

