• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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