From 646e970d44d7eaf4f56e2956fb58b48eb9360cb3 Mon Sep 17 00:00:00 2001 From: Simon Pilgrim Date: Fri, 11 Jun 2021 10:56:05 +0100 Subject: [PATCH] [llvm-stress] Fix dead code preventing us generating per-element vector selects This has been reported several times by the PVS Studio team as well as coming up in some static analysis. getRandom() % 1 always returns 0 so we never actually test this codepath, (git blame suggests this has always been like this) - given that we have plenty of other "getRandom() & 1" the typo is pretty obvious, and matches the intention in the comment above - with this change we generate a nice mixture of scalar/vector condition selects of vectors. I don't know llvm-stress that well - but I don't think we guarantee that the same seed value will always generate the same IR for later versions of the program - just that the same binary would. Differential Revision: https://reviews.llvm.org/D104022 --- llvm/tools/llvm-stress/llvm-stress.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/llvm/tools/llvm-stress/llvm-stress.cpp b/llvm/tools/llvm-stress/llvm-stress.cpp index e3fdd7821b6a..b284fbf514a6 100644 --- a/llvm/tools/llvm-stress/llvm-stress.cpp +++ b/llvm/tools/llvm-stress/llvm-stress.cpp @@ -632,7 +632,7 @@ struct SelectModifier: public Modifier { // If the value type is a vector, and we allow vector select, then in 50% // of the cases generate a vector select. - if (isa(Val0->getType()) && (getRandom() % 1)) { + if (isa(Val0->getType()) && (getRandom() & 1)) { unsigned NumElem = cast(Val0->getType())->getNumElements(); CondTy = FixedVectorType::get(CondTy, NumElem);