diff --git a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp index 0e0f81fcad7e..fd93ce361da5 100644 --- a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp +++ b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp @@ -5388,9 +5388,9 @@ void LoopVectorizationLegality::collectLoopUniforms() { for (auto *BB : TheLoop->blocks()) for (auto &I : *BB) { - // If the pointer operand is not consecutive-like, there's nothing to do. + // If there's no pointer operand, there's nothing to do. auto *Ptr = dyn_cast_or_null(getPointerOperand(&I)); - if (!Ptr || isUniform(Ptr) || !hasConsecutiveLikePtrOperand(&I)) + if (!Ptr) continue; // Ensure the memory instruction will not be scalarized, making its @@ -5398,9 +5398,9 @@ void LoopVectorizationLegality::collectLoopUniforms() { if (memoryInstructionMustBeScalarized(&I)) PossibleNonUniformPtrs.insert(Ptr); - // If the memory instruction will be vectorized, its consecutive-like - // pointer operand should remain uniform. - else + // If the memory instruction will be vectorized and its pointer operand + // is consecutive-like, the pointer operand should remain uniform. + else if (hasConsecutiveLikePtrOperand(&I)) ConsecutiveLikePtrs.insert(Ptr); } diff --git a/llvm/test/Transforms/LoopVectorize/consecutive-ptr-uniforms.ll b/llvm/test/Transforms/LoopVectorize/consecutive-ptr-uniforms.ll index 66636f6a1b0a..f1fc1aa68363 100644 --- a/llvm/test/Transforms/LoopVectorize/consecutive-ptr-uniforms.ll +++ b/llvm/test/Transforms/LoopVectorize/consecutive-ptr-uniforms.ll @@ -71,7 +71,9 @@ for.end: %tmp4 = phi i32 [ %tmp3, %for.body ] ret i32 %tmp4 } + ; CHECK-LABEL: interleaved_access_forward +; INTER-LABEL: interleaved_access_forward ; ; Check that a consecutive-like pointer used by a forward interleaved group is ; recognized as uniform and remains uniform after vectorization. When @@ -127,6 +129,7 @@ for.end: } ; CHECK-LABEL: interleaved_access_reverse +; INTER-LABEL: interleaved_access_reverse ; ; Check that a consecutive-like pointer used by a reverse interleaved group is ; recognized as uniform and remains uniform after vectorization. When @@ -185,7 +188,7 @@ for.end: ret i32 %tmp14 } -; CHECK-LABEL: predicated_store +; INTER-LABEL: predicated_store ; ; Check that a consecutive-like pointer used by a forward interleaved group and ; scalarized store is not recognized as uniform and is not uniform after