From fe5c4a06a49c697399323cc55e2135a5452ed616 Mon Sep 17 00:00:00 2001 From: Huihui Zhang Date: Wed, 31 Mar 2021 10:58:36 -0700 Subject: [PATCH] [LoopVectorize] Use SetVector to track uniform uses to prevent non-determinism. Use SetVector instead of SmallPtrSet to track values with uniform use. Doing this can help avoid non-determinism caused by iterating over unordered containers. This bug was found with reverse iteration turning on, --extra-llvm-cmake-variables="-DLLVM_REVERSE_ITERATION=ON". Failing LLVM test consecutive-ptr-uniforms.ll . Reviewed By: MaskRay Differential Revision: https://reviews.llvm.org/D99549 --- llvm/lib/Transforms/Vectorize/LoopVectorize.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp index e2ffb8d..15c53e0 100644 --- a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp +++ b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp @@ -5413,7 +5413,7 @@ void LoopVectorizationCostModel::collectLoopUniforms(ElementCount VF) { // here is something which only demands lane 0 of the unrolled iterations; // it does not imply that all lanes produce the same value (e.g. this is not // the usual meaning of uniform) - SmallPtrSet HasUniformUse; + SetVector HasUniformUse; // Scan the loop for instructions which are either a) known to have only // lane 0 demanded or b) are uses which demand only lane 0 of their operand. -- 2.7.4