LLVM  10.0.0svn
Go to the documentation of this file.
1 //===-- OpDescriptor.cpp --------------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
10 #include "llvm/IR/Constants.h"
12 using namespace llvm;
13 using namespace fuzzerop;
15 void fuzzerop::makeConstantsWithType(Type *T, std::vector<Constant *> &Cs) {
16  if (auto *IntTy = dyn_cast<IntegerType>(T)) {
17  uint64_t W = IntTy->getBitWidth();
18  Cs.push_back(ConstantInt::get(IntTy, APInt::getMaxValue(W)));
19  Cs.push_back(ConstantInt::get(IntTy, APInt::getMinValue(W)));
20  Cs.push_back(ConstantInt::get(IntTy, APInt::getSignedMaxValue(W)));
21  Cs.push_back(ConstantInt::get(IntTy, APInt::getSignedMinValue(W)));
22  Cs.push_back(ConstantInt::get(IntTy, APInt::getOneBitSet(W, W / 2)));
23  } else if (T->isFloatingPointTy()) {
24  auto &Ctx = T->getContext();
25  auto &Sem = T->getFltSemantics();
26  Cs.push_back(ConstantFP::get(Ctx, APFloat::getZero(Sem)));
27  Cs.push_back(ConstantFP::get(Ctx, APFloat::getLargest(Sem)));
28  Cs.push_back(ConstantFP::get(Ctx, APFloat::getSmallest(Sem)));
29  } else
30  Cs.push_back(UndefValue::get(T));
31 }
33 std::vector<Constant *> fuzzerop::makeConstantsWithType(Type *T) {
34  std::vector<Constant *> Result;
35  makeConstantsWithType(T, Result);
36  return Result;
37 }
This class represents lattice values for constants.
Definition: AllocatorList.h:23
static APFloat getZero(const fltSemantics &Sem, bool Negative=false)
Factory for Positive and Negative Zero.
Definition: APFloat.h:870
static APInt getSignedMaxValue(unsigned numBits)
Gets maximum signed value of APInt for a specific bit width.
Definition: APInt.h:534
LLVMContext & getContext() const
Return the LLVMContext in which this type was uniqued.
Definition: Type.h:130
static APFloat getSmallest(const fltSemantics &Sem, bool Negative=false)
Returns the smallest (by magnitude) finite number in the given semantics.
Definition: APFloat.h:929
bool isFloatingPointTy() const
Return true if this is one of the six floating-point types.
Definition: Type.h:162
The instances of the Type class are immutable: once they are created, they are never changed...
Definition: Type.h:46
This file contains the declarations for the subclasses of Constant, which represent the different fla...
static APInt getOneBitSet(unsigned numBits, unsigned BitNo)
Return an APInt with exactly one bit set in the result.
Definition: APInt.h:587
void makeConstantsWithType(Type *T, std::vector< Constant *> &Cs)
static UndefValue * get(Type *T)
Static factory methods - Return an &#39;undef&#39; object of the specified type.
Definition: Constants.cpp:1446
static APInt getMinValue(unsigned numBits)
Gets minimum unsigned value of APInt for a specific bit width.
Definition: APInt.h:541
static Constant * get(Type *Ty, uint64_t V, bool isSigned=false)
If Ty is a vector type, return a Constant with a splat of the given value.
Definition: Constants.cpp:653
static Constant * get(Type *Ty, double V)
This returns a ConstantFP, or a vector containing a splat of a ConstantFP, for the specified value in...
Definition: Constants.cpp:716
static APInt getMaxValue(unsigned numBits)
Gets maximum unsigned value of APInt for specific bit width.
Definition: APInt.h:529
static APFloat getLargest(const fltSemantics &Sem, bool Negative=false)
Returns the largest finite number in the given semantics.
Definition: APFloat.h:919
static APInt getSignedMinValue(unsigned numBits)
Gets minimum signed value of APInt for a specific bit width.
Definition: APInt.h:544
const fltSemantics & getFltSemantics() const
Definition: Type.h:169