diff options
author | Nadav Rotem <nadav.rotem@intel.com> | 2012-02-26 13:56:18 +0000 |
---|---|---|
committer | Nadav Rotem <nadav.rotem@intel.com> | 2012-02-26 13:56:18 +0000 |
commit | e4972ddea40f191400df87daa257b89ebbe1f182 (patch) | |
tree | b8a88eb5e5478ee105fb53bfabd211b9f6bc2f36 /llvm/tools/llvm-stress/llvm-stress.cpp | |
parent | 115ec82ec7d33daac5a04fe69cc4839566ca9258 (diff) | |
download | bcm5719-llvm-e4972ddea40f191400df87daa257b89ebbe1f182.tar.gz bcm5719-llvm-e4972ddea40f191400df87daa257b89ebbe1f182.zip |
Add support for random constant vectors.
Patch by Joey Gouly.
llvm-svn: 151489
Diffstat (limited to 'llvm/tools/llvm-stress/llvm-stress.cpp')
-rw-r--r-- | llvm/tools/llvm-stress/llvm-stress.cpp | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/llvm/tools/llvm-stress/llvm-stress.cpp b/llvm/tools/llvm-stress/llvm-stress.cpp index f9bf18faa5e..f2d65456b64 100644 --- a/llvm/tools/llvm-stress/llvm-stress.cpp +++ b/llvm/tools/llvm-stress/llvm-stress.cpp @@ -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); } |