[PATCH] D14981: [LoopVectorize] Use std::map rather than DenseMap for MinBWs.
Charlie Turner via llvm-commits
llvm-commits at lists.llvm.org
Wed Nov 25 03:39:02 PST 2015
chatur01 created this revision.
chatur01 added reviewers: jmolloy, mcrosier.
chatur01 added a subscriber: llvm-commits.
chatur01 set the repository for this revision to rL LLVM.
The order in which instructions are truncated in `truncateToMinimalBitwidths`
effects code generation. Switch to an ordered map implementation, since the
iteration order over a DenseMap is not defined.
This code is not hot, so the difference in container performance isn't
interesting.
Fixes PR25490.
Repository:
rL LLVM
http://reviews.llvm.org/D14981
Files:
include/llvm/Analysis/VectorUtils.h
lib/Analysis/VectorUtils.cpp
lib/Transforms/Vectorize/LoopVectorize.cpp
Index: lib/Transforms/Vectorize/LoopVectorize.cpp
===================================================================
--- lib/Transforms/Vectorize/LoopVectorize.cpp
+++ lib/Transforms/Vectorize/LoopVectorize.cpp
@@ -325,7 +325,7 @@
// can be validly truncated to. The cost model has assumed this truncation
// will happen when vectorizing.
void vectorize(LoopVectorizationLegality *L,
- DenseMap<Instruction*,uint64_t> MinimumBitWidths) {
+ std::map<Instruction*,uint64_t> MinimumBitWidths) {
MinBWs = MinimumBitWidths;
Legal = L;
// Create a new empty loop. Unlink the old loop and connect the new one.
@@ -546,7 +546,7 @@
/// Map of scalar integer values to the smallest bitwidth they can be legally
/// represented as. The vector equivalents of these values should be truncated
/// to this type.
- DenseMap<Instruction*,uint64_t> MinBWs;
+ std::map<Instruction*,uint64_t> MinBWs;
LoopVectorizationLegality *Legal;
// Record whether runtime check is added.
@@ -1501,7 +1501,7 @@
/// Map of scalar integer values to the smallest bitwidth they can be legally
/// represented as. The vector equivalents of these values should be truncated
/// to this type.
- DenseMap<Instruction*,uint64_t> MinBWs;
+ std::map<Instruction*,uint64_t> MinBWs;
/// The loop that we evaluate.
Loop *TheLoop;
Index: lib/Analysis/VectorUtils.cpp
===================================================================
--- lib/Analysis/VectorUtils.cpp
+++ lib/Analysis/VectorUtils.cpp
@@ -438,7 +438,7 @@
return InsertEltInst->getOperand(1);
}
-DenseMap<Instruction *, uint64_t>
+std::map<Instruction *, uint64_t>
llvm::computeMinimumValueSizes(ArrayRef<BasicBlock *> Blocks, DemandedBits &DB,
const TargetTransformInfo *TTI) {
@@ -451,7 +451,7 @@
SmallPtrSet<Value *, 16> Visited;
DenseMap<Value *, uint64_t> DBits;
SmallPtrSet<Instruction *, 4> InstructionSet;
- DenseMap<Instruction *, uint64_t> MinBWs;
+ std::map<Instruction *, uint64_t> MinBWs;
// Determine the roots. We work bottom-up, from truncs or icmps.
bool SeenExtFromIllegalType = false;
@@ -497,7 +497,7 @@
// If we encounter a type that is larger than 64 bits, we can't represent
// it so bail out.
if (DB.getDemandedBits(I).getBitWidth() > 64)
- return DenseMap<Instruction *, uint64_t>();
+ return std::map<Instruction *, uint64_t>();
uint64_t V = DB.getDemandedBits(I).getZExtValue();
DBits[Leader] |= V;
Index: include/llvm/Analysis/VectorUtils.h
===================================================================
--- include/llvm/Analysis/VectorUtils.h
+++ include/llvm/Analysis/VectorUtils.h
@@ -121,7 +121,7 @@
///
/// If the optional TargetTransformInfo is provided, this function tries harder
/// to do less work by only looking at illegal types.
-DenseMap<Instruction*, uint64_t>
+std::map<Instruction*, uint64_t>
computeMinimumValueSizes(ArrayRef<BasicBlock*> Blocks,
DemandedBits &DB,
const TargetTransformInfo *TTI=nullptr);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D14981.41123.patch
Type: text/x-patch
Size: 3124 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20151125/dee9ce90/attachment.bin>
More information about the llvm-commits
mailing list