SLP Vectorizer: do not search for store-chains that are wider than the vector-registe...
authorNadav Rotem <nrotem@apple.com>
Fri, 21 Jun 2013 04:18:13 +0000 (04:18 +0000)
committerNadav Rotem <nrotem@apple.com>
Fri, 21 Jun 2013 04:18:13 +0000 (04:18 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184527 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Vectorize/VecUtils.cpp

index 16189860420de1c0c4ba399f8ab870f5aecdd246..3db4adf95c8ee4144a9180ed1c674a732cc01f80 100644 (file)
@@ -141,9 +141,11 @@ bool BoUpSLP::vectorizeStoreChain(ArrayRef<Value *> Chain, int CostThreshold) {
     }
   }
 
-  if (Changed)
-    return true;
+  if (Changed || ChainLen > VF)
+    return Changed;
 
+  // Handle short chains. This helps us catch types such as <3 x float> that
+  // are smaller than vector size.
   int Cost = getTreeCost(Chain);
   if (Cost < CostThreshold) {
     DEBUG(dbgs() << "SLP: Found store chain cost = " << Cost