From 5a51d864b9041151152a555fb2051357e031659c Mon Sep 17 00:00:00 2001 From: Adam Nemet Date: Thu, 26 Feb 2015 04:39:09 +0000 Subject: [PATCH] [LoopAccesses] Add command-line option for RuntimeMemoryCheckThreshold Also remove the somewhat misleading initializers from VectorizationFactor and VectorizationInterleave. They will get initialized with the default ctor since no cl::init is provided. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@230608 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Analysis/LoopAccessAnalysis.h | 2 +- lib/Analysis/LoopAccessAnalysis.cpp | 21 +++++++++++---------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/include/llvm/Analysis/LoopAccessAnalysis.h b/include/llvm/Analysis/LoopAccessAnalysis.h index cd1d9ae5efa..323af980ddc 100644 --- a/include/llvm/Analysis/LoopAccessAnalysis.h +++ b/include/llvm/Analysis/LoopAccessAnalysis.h @@ -83,7 +83,7 @@ struct VectorizerParams { /// \\brief When performing memory disambiguation checks at runtime do not /// make more than this number of comparisons. - static const unsigned RuntimeMemoryCheckThreshold; + static unsigned RuntimeMemoryCheckThreshold; }; /// \brief Drive the analysis of memory accesses in the loop diff --git a/lib/Analysis/LoopAccessAnalysis.cpp b/lib/Analysis/LoopAccessAnalysis.cpp index b2651244640..1a0bf48dcd0 100644 --- a/lib/Analysis/LoopAccessAnalysis.cpp +++ b/lib/Analysis/LoopAccessAnalysis.cpp @@ -29,7 +29,7 @@ static cl::opt VectorizationFactor("force-vector-width", cl::Hidden, cl::desc("Sets the SIMD width. Zero is autoselect."), cl::location(VectorizerParams::VectorizationFactor)); -unsigned VectorizerParams::VectorizationFactor = 0; +unsigned VectorizerParams::VectorizationFactor; static cl::opt VectorizationInterleave("force-vector-interleave", cl::Hidden, @@ -37,11 +37,14 @@ VectorizationInterleave("force-vector-interleave", cl::Hidden, "Zero is autoselect."), cl::location( VectorizerParams::VectorizationInterleave)); -unsigned VectorizerParams::VectorizationInterleave = 0; +unsigned VectorizerParams::VectorizationInterleave; -/// When performing memory disambiguation checks at runtime do not make more -/// than this number of comparisons. -const unsigned VectorizerParams::RuntimeMemoryCheckThreshold = 8; +static cl::opt RuntimeMemoryCheckThreshold( + "runtime-memory-check-threshold", cl::Hidden, + cl::desc("When performing memory disambiguation checks at runtime do not " + "generate more than this number of comparisons (default = 8)."), + cl::location(VectorizerParams::RuntimeMemoryCheckThreshold), cl::init(8)); +unsigned VectorizerParams::RuntimeMemoryCheckThreshold; /// Maximum SIMD width. const unsigned VectorizerParams::MaxVectorWidth = 64; @@ -1112,8 +1115,7 @@ void LoopAccessInfo::analyzeLoop(const ValueToValueMap &Strides) { // Check that we did not collect too many pointers or found an unsizeable // pointer. - if (!CanDoRT || - NumComparisons > VectorizerParams::RuntimeMemoryCheckThreshold) { + if (!CanDoRT || NumComparisons > RuntimeMemoryCheckThreshold) { PtrRtCheck.reset(); CanDoRT = false; } @@ -1154,15 +1156,14 @@ void LoopAccessInfo::analyzeLoop(const ValueToValueMap &Strides) { TheLoop, Strides, true); // Check that we did not collect too many pointers or found an unsizeable // pointer. - if (!CanDoRT || - NumComparisons > VectorizerParams::RuntimeMemoryCheckThreshold) { + if (!CanDoRT || NumComparisons > RuntimeMemoryCheckThreshold) { if (!CanDoRT && NumComparisons > 0) emitAnalysis(LoopAccessReport() << "cannot check memory dependencies at runtime"); else emitAnalysis(LoopAccessReport() << NumComparisons << " exceeds limit of " - << VectorizerParams::RuntimeMemoryCheckThreshold + << RuntimeMemoryCheckThreshold << " dependent memory operations checked at runtime"); DEBUG(dbgs() << "LAA: Can't vectorize with memory checks\n"); PtrRtCheck.reset();