1 //===-- OpDescriptor.cpp --------------------------------------------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #include "llvm/FuzzMutate/OpDescriptor.h" 11 #include "llvm/IR/Constants.h" 12 13 using namespace llvm; 14 using namespace fuzzerop; 15 16 void fuzzerop::makeConstantsWithType(Type *T, std::vector<Constant *> &Cs) { 17 if (auto *IntTy = dyn_cast<IntegerType>(T)) { 18 uint64_t W = IntTy->getBitWidth(); 19 Cs.push_back(ConstantInt::get(IntTy, APInt::getMaxValue(W))); 20 Cs.push_back(ConstantInt::get(IntTy, APInt::getMinValue(W))); 21 Cs.push_back(ConstantInt::get(IntTy, APInt::getSignedMaxValue(W))); 22 Cs.push_back(ConstantInt::get(IntTy, APInt::getSignedMinValue(W))); 23 Cs.push_back(ConstantInt::get(IntTy, APInt::getOneBitSet(W, W / 2))); 24 } else if (T->isFloatingPointTy()) { 25 auto &Ctx = T->getContext(); 26 auto &Sem = T->getFltSemantics(); 27 Cs.push_back(ConstantFP::get(Ctx, APFloat::getZero(Sem))); 28 Cs.push_back(ConstantFP::get(Ctx, APFloat::getLargest(Sem))); 29 Cs.push_back(ConstantFP::get(Ctx, APFloat::getSmallest(Sem))); 30 } else 31 Cs.push_back(UndefValue::get(T)); 32 } 33 34 std::vector<Constant *> fuzzerop::makeConstantsWithType(Type *T) { 35 std::vector<Constant *> Result; 36 makeConstantsWithType(T, Result); 37 return Result; 38 } 39