Line data Source code
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 42 : void fuzzerop::makeConstantsWithType(Type *T, std::vector<Constant *> &Cs) {
17 : if (auto *IntTy = dyn_cast<IntegerType>(T)) {
18 33 : uint64_t W = IntTy->getBitWidth();
19 33 : Cs.push_back(ConstantInt::get(IntTy, APInt::getMaxValue(W)));
20 33 : Cs.push_back(ConstantInt::get(IntTy, APInt::getMinValue(W)));
21 33 : Cs.push_back(ConstantInt::get(IntTy, APInt::getSignedMaxValue(W)));
22 33 : Cs.push_back(ConstantInt::get(IntTy, APInt::getSignedMinValue(W)));
23 33 : Cs.push_back(ConstantInt::get(IntTy, APInt::getOneBitSet(W, W / 2)));
24 : } else if (T->isFloatingPointTy()) {
25 5 : auto &Ctx = T->getContext();
26 5 : auto &Sem = T->getFltSemantics();
27 5 : Cs.push_back(ConstantFP::get(Ctx, APFloat::getZero(Sem)));
28 5 : Cs.push_back(ConstantFP::get(Ctx, APFloat::getLargest(Sem)));
29 5 : Cs.push_back(ConstantFP::get(Ctx, APFloat::getSmallest(Sem)));
30 : } else
31 4 : Cs.push_back(UndefValue::get(T));
32 42 : }
33 :
34 15 : std::vector<Constant *> fuzzerop::makeConstantsWithType(Type *T) {
35 : std::vector<Constant *> Result;
36 15 : makeConstantsWithType(T, Result);
37 15 : return Result;
38 : }
|