From 54b0be048e3e449aadf7206efa991ee3419188ac Mon Sep 17 00:00:00 2001 From: Justin Lebar Date: Sat, 5 Nov 2016 16:47:25 +0000 Subject: [LoopStrengthReduce] Don't use a DenseSet 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 --- llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'llvm/lib/Transforms') 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 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, SmallSet> Factors; /// Interesting use types, to facilitate truncation reuse. SmallSetVector Types; -- cgit v1.2.3