From 8dc253e97b1a119acb9a8f3c2f8305871a3906e1 Mon Sep 17 00:00:00 2001 From: Arnold Schwaighofer Date: Wed, 29 Jan 2014 04:36:12 +0000 Subject: LoopVectorizer: Don't count the induction variable multiple times When estimating register pressure, don't count the induction variable mulitple times. It is unlikely to be unrolled. This is currently disabled and hidden behind a flag ("enable-ind-var-reg-heur"). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200371 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/Vectorize/LoopVectorize.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/lib/Transforms/Vectorize/LoopVectorize.cpp b/lib/Transforms/Vectorize/LoopVectorize.cpp index c72c2dc41f..1ffb4289cb 100644 --- a/lib/Transforms/Vectorize/LoopVectorize.cpp +++ b/lib/Transforms/Vectorize/LoopVectorize.cpp @@ -188,6 +188,10 @@ static cl::opt NumberOfStoresToPredicate( "vectorize-num-stores-pred", cl::init(0), cl::Hidden, cl::desc("Max number of stores to be predicated behind an if.")); +static cl::opt EnableIndVarRegisterHeur( + "enable-ind-var-reg-heur", cl::init(false), cl::Hidden, + cl::desc("Count the induction variable only once when unrolling")); + static cl::opt EnableCondStoresVectorization( "enable-cond-stores-vec", cl::init(false), cl::Hidden, cl::desc("Enable if predication of stores during vectorization.")); @@ -5155,6 +5159,11 @@ LoopVectorizationCostModel::selectUnrollFactor(bool OptForSize, unsigned UF = PowerOf2Floor((TargetNumRegisters - R.LoopInvariantRegs) / R.MaxLocalUsers); + // Don't count the induction variable as unrolled. + if (EnableIndVarRegisterHeur) + UF = PowerOf2Floor((TargetNumRegisters - R.LoopInvariantRegs - 1) / + std::max(1U, (R.MaxLocalUsers - 1))); + // Clamp the unroll factor ranges to reasonable factors. unsigned MaxUnrollSize = TTI.getMaximumUnrollFactor(); -- cgit v1.2.3