Add support for random constant vectors.
authorNadav Rotem <nadav.rotem@intel.com>
Sun, 26 Feb 2012 13:56:18 +0000 (13:56 +0000)
committerNadav Rotem <nadav.rotem@intel.com>
Sun, 26 Feb 2012 13:56:18 +0000 (13:56 +0000)
Patch by Joey Gouly.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@151489 91177308-0d34-0410-b5e6-96231b3b80d8

tools/llvm-stress/llvm-stress.cpp

index f9bf18faa5e19dae64196599764788a232e7ae33..f2d65456b644fa783d324955c761cae738a495ff 100644 (file)
@@ -110,6 +110,19 @@ protected:
     return PT->at(Ran->Rand() % PT->size());
   }
 
+  Constant *getRandomConstant(Type *Tp) {
+    if (Tp->isIntegerTy()) {
+      if (Ran->Rand() & 1)
+        return ConstantInt::getAllOnesValue(Tp);
+      return ConstantInt::getNullValue(Tp);
+    } else if (Tp->isFloatingPointTy()) {
+      if (Ran->Rand() & 1)
+        return ConstantFP::getAllOnesValue(Tp);
+      return ConstantFP::getNullValue(Tp);
+    }
+    return UndefValue::get(Tp);
+  }
+
   /// Return a random value with a known type.
   Value *getRandomValue(Type *Tp) {
     unsigned index = Ran->Rand();
@@ -128,9 +141,18 @@ protected:
       if (Ran->Rand() & 1)
         return ConstantFP::getAllOnesValue(Tp);
       return ConstantFP::getNullValue(Tp);
+    } else if (Tp->isVectorTy()) {
+      VectorType *VTp = cast<VectorType>(Tp);
+
+      std::vector<Constant*> TempValues;
+      TempValues.reserve(VTp->getNumElements());
+      for (unsigned i = 0; i < VTp->getNumElements(); ++i)
+        TempValues.push_back(getRandomConstant(VTp->getScalarType()));
+
+      ArrayRef<Constant*> VectorValue(TempValues);
+      return ConstantVector::get(VectorValue);
     }
 
-    // TODO: return values for vector types.
     return UndefValue::get(Tp);
   }