LLVM  9.0.0svn
OpDescriptor.cpp
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 //===----------------------------------------------------------------------===//
8 
10 #include "llvm/IR/Constants.h"
11 
12 using namespace llvm;
13 using namespace fuzzerop;
14 
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 }
32 
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:854
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:129
static APFloat getSmallest(const fltSemantics &Sem, bool Negative=false)
Returns the smallest (by magnitude) finite number in the given semantics.
Definition: APFloat.h:913
bool isFloatingPointTy() const
Return true if this is one of the six floating-point types.
Definition: Type.h:161
The instances of the Type class are immutable: once they are created, they are never changed...
Definition: Type.h:45
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:1424
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:631
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:694
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:903
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:168