[llvm-stress] Fix dead code preventing us generating per-element vector selects
authorSimon Pilgrim <llvm-dev@redking.me.uk>
Fri, 11 Jun 2021 09:56:05 +0000 (10:56 +0100)
committerSimon Pilgrim <llvm-dev@redking.me.uk>
Fri, 11 Jun 2021 09:56:19 +0000 (10:56 +0100)
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

index e3fdd78..b284fbf 100644 (file)
@@ -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<FixedVectorType>(Val0->getType()) && (getRandom() % 1)) {
+    if (isa<FixedVectorType>(Val0->getType()) && (getRandom() & 1)) {
       unsigned NumElem =
           cast<FixedVectorType>(Val0->getType())->getNumElements();
       CondTy = FixedVectorType::get(CondTy, NumElem);