From edc8db87dc2ed4d2971e7f50464f5f4d0fead537 Mon Sep 17 00:00:00 2001 From: Hal Finkel Date: Sat, 4 Feb 2012 04:14:04 +0000 Subject: Boost the effective chain depth of loads and stores. By default, boost the chain depth contribution of loads and stores. This will allow a load/store pair to vectorize even when it would not otherwise be long enough to satisfy the chain depth requirement. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@149761 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/Vectorize/BBVectorize.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'lib/Transforms/Vectorize') diff --git a/lib/Transforms/Vectorize/BBVectorize.cpp b/lib/Transforms/Vectorize/BBVectorize.cpp index ce6e994c46..0780b4489f 100644 --- a/lib/Transforms/Vectorize/BBVectorize.cpp +++ b/lib/Transforms/Vectorize/BBVectorize.cpp @@ -103,6 +103,11 @@ static cl::opt AlignedOnly("bb-vectorize-aligned-only", cl::init(false), cl::Hidden, cl::desc("Only generate aligned loads and stores")); +static cl::opt +NoMemOpBoost("bb-vectorize-no-mem-op-boost", + cl::init(false), cl::Hidden, + cl::desc("Don't boost the chain-depth contribution of loads and stores")); + static cl::opt FastDep("bb-vectorize-fast-dep", cl::init(false), cl::Hidden, cl::desc("Use a fast instruction dependency analysis")); @@ -340,6 +345,11 @@ namespace { if (isa(V) || isa(V)) return 0; + // Give a load or store half of the required depth so that load/store + // pairs will vectorize. + if (!NoMemOpBoost && (isa(V) || isa(V))) + return ReqChainDepth/2; + return 1; } -- cgit v1.2.3-70-g09d2