diff options
| author | Florian Hahn <florian.hahn@arm.com> | 2018-10-11 09:46:25 +0000 |
|---|---|---|
| committer | Florian Hahn <florian.hahn@arm.com> | 2018-10-11 09:46:25 +0000 |
| commit | 18e07bb822959b5bf3fbbeae02eb76d219d4d5a5 (patch) | |
| tree | b4c7cd69054a30932a04ca315d30992f76e661ef /llvm/lib/Transforms/Vectorize/LoopVectorize.cpp | |
| parent | 7eb5cb4ebc69b8b6d995287a68dac01004f79d15 (diff) | |
| download | bcm5719-llvm-18e07bb822959b5bf3fbbeae02eb76d219d4d5a5.tar.gz bcm5719-llvm-18e07bb822959b5bf3fbbeae02eb76d219d4d5a5.zip | |
[LV] Use SmallVector instead of DenseMap in calculateRegisterUsage (NFC).
We assign indices sequentially for seen instructions, so we can just use
a vector and push back the seen instructions. No need for using a
DenseMap.
Reviewers: hsaito, rengolin, nadav, dcaballe
Reviewed By: rengolin
Differential Revision: https://reviews.llvm.org/D53089
llvm-svn: 344233
Diffstat (limited to 'llvm/lib/Transforms/Vectorize/LoopVectorize.cpp')
| -rw-r--r-- | llvm/lib/Transforms/Vectorize/LoopVectorize.cpp | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp index cad1711b17f..7ebe8d102b7 100644 --- a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp +++ b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp @@ -4882,7 +4882,7 @@ LoopVectorizationCostModel::calculateRegisterUsage(ArrayRef<unsigned> VFs) { using IntervalMap = DenseMap<Instruction *, unsigned>; // Maps instruction to its index. - DenseMap<unsigned, Instruction *> IdxToInstr; + SmallVector<Instruction *, 64> IdxToInstr; // Marks the end of each interval. IntervalMap EndPoint; // Saves the list of instruction indices that are used in the loop. @@ -4891,10 +4891,9 @@ LoopVectorizationCostModel::calculateRegisterUsage(ArrayRef<unsigned> VFs) { // defined outside the loop, such as arguments and constants. SmallPtrSet<Value *, 8> LoopInvariants; - unsigned Index = 0; for (BasicBlock *BB : make_range(DFS.beginRPO(), DFS.endRPO())) { for (Instruction &I : BB->instructionsWithoutDebug()) { - IdxToInstr[Index++] = &I; + IdxToInstr.push_back(&I); // Save the end location of each USE. for (Value *U : I.operands()) { @@ -4911,7 +4910,7 @@ LoopVectorizationCostModel::calculateRegisterUsage(ArrayRef<unsigned> VFs) { } // Overwrite previous end points. - EndPoint[Instr] = Index; + EndPoint[Instr] = IdxToInstr.size(); Ends.insert(Instr); } } @@ -4948,7 +4947,7 @@ LoopVectorizationCostModel::calculateRegisterUsage(ArrayRef<unsigned> VFs) { return std::max<unsigned>(1, VF * TypeSize / WidestRegister); }; - for (unsigned int i = 0; i < Index; ++i) { + for (unsigned int i = 0, s = IdxToInstr.size(); i < s; ++i) { Instruction *I = IdxToInstr[i]; // Remove all of the instructions that end at this location. |

