Index: lib/Transforms/Vectorize/SLPVectorizer.cpp =================================================================== --- lib/Transforms/Vectorize/SLPVectorizer.cpp +++ lib/Transforms/Vectorize/SLPVectorizer.cpp @@ -2224,6 +2224,17 @@ TTI->getMemoryOpCost(Instruction::Load, ScalarTy, alignment, 0, VL0); int VecLdCost = TTI->getMemoryOpCost(Instruction::Load, VecTy, alignment, 0, VL0); + // Add the cost of *shuffle* for jumbled loads + for (unsigned Idx : E->UserTreeIndices) { + if (TreeEntry *UserTreeEntry = &VectorizableTree[Idx]) { + for (SmallVector Mask : UserTreeEntry->ShuffleMask) { + if (!Mask.empty()) { + VecLdCost += TTI->getShuffleCost( + TargetTransformInfo::SK_PermuteSingleSrc, VecTy, 0); + } + } + } + } return VecLdCost - ScalarLdCost; } case Instruction::Store: {