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
makeConstantsWithType(Type * T,std::vector<Constant * > & Cs)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
makeConstantsWithType(Type * T)34 std::vector<Constant *> fuzzerop::makeConstantsWithType(Type *T) {
35 std::vector<Constant *> Result;
36 makeConstantsWithType(T, Result);
37 return Result;
38 }
39