LLVM  14.0.0git
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 }
OpDescriptor.h
llvm
---------------------— PointerInfo ------------------------------------—
Definition: AllocatorList.h:23
llvm::RISCVFenceField::W
@ W
Definition: RISCVBaseInfo.h:194
llvm::APInt::getMinValue
static APInt getMinValue(unsigned numBits)
Gets minimum unsigned value of APInt for a specific bit width.
Definition: APInt.h:198
llvm::APInt::getMaxValue
static APInt getMaxValue(unsigned numBits)
Gets maximum unsigned value of APInt for specific bit width.
Definition: APInt.h:186
llvm::fuzzerop::makeConstantsWithType
void makeConstantsWithType(Type *T, std::vector< Constant * > &Cs)
Definition: OpDescriptor.cpp:15
llvm::APInt::getSignedMaxValue
static APInt getSignedMaxValue(unsigned numBits)
Gets maximum signed value of APInt for a specific bit width.
Definition: APInt.h:191
llvm::Type
The instances of the Type class are immutable: once they are created, they are never changed.
Definition: Type.h:45
T
#define T
Definition: Mips16ISelLowering.cpp:341
llvm::APFloat::getZero
static APFloat getZero(const fltSemantics &Sem, bool Negative=false)
Factory for Positive and Negative Zero.
Definition: APFloat.h:885
Constants.h
llvm::UndefValue::get
static UndefValue * get(Type *T)
Static factory methods - Return an 'undef' object of the specified type.
Definition: Constants.cpp:1771
llvm::ConstantInt::get
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:900
llvm::APInt::getOneBitSet
static APInt getOneBitSet(unsigned numBits, unsigned BitNo)
Return an APInt with exactly one bit set in the result.
Definition: APInt.h:224
uint64_t
llvm::APFloat::getSmallest
static APFloat getSmallest(const fltSemantics &Sem, bool Negative=false)
Returns the smallest (by magnitude) finite number in the given semantics.
Definition: APFloat.h:944
llvm::ConstantFP::get
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:947
llvm::APInt::getSignedMinValue
static APInt getSignedMinValue(unsigned numBits)
Gets minimum signed value of APInt for a specific bit width.
Definition: APInt.h:201
llvm::APFloat::getLargest
static APFloat getLargest(const fltSemantics &Sem, bool Negative=false)
Returns the largest finite number in the given semantics.
Definition: APFloat.h:934