19 #ifndef LLVM_ANALYSIS_TARGETFOLDER_H
20 #define LLVM_ANALYSIS_TARGETFOLDER_H
51 bool HasNUW =
false,
bool HasNSW =
false)
const {
58 bool HasNUW =
false,
bool HasNSW =
false)
const {
65 bool HasNUW =
false,
bool HasNSW =
false)
const {
90 bool HasNUW =
false,
bool HasNSW =
false)
const {
119 bool HasNUW =
false,
bool HasNSW =
false)
const {
169 Type *DestTy)
const {
175 bool isSigned)
const {
191 return CreateCast(Instruction::BitCast, C, DestTy);
194 return CreateCast(Instruction::IntToPtr, C, DestTy);
197 return CreateCast(Instruction::PtrToInt, C, DestTy);
216 Type *DestTy)
const {
Constant * CreateCast(Instruction::CastOps Op, Constant *C, Type *DestTy) const
Constant * CreateGetElementPtr(Type *Ty, Constant *C, ArrayRef< Constant * > IdxList) const
A parsed version of the target data layout string in and methods for querying it. ...
Constant * CreateInBoundsGetElementPtr(Type *Ty, Constant *C, Constant *Idx) const
static Constant * getFAdd(Constant *C1, Constant *C2)
Constant * CreateShuffleVector(Constant *V1, Constant *V2, Constant *Mask) const
static Constant * getPointerBitCastOrAddrSpaceCast(Constant *C, Type *Ty)
Create a BitCast or AddrSpaceCast for a pointer type depending on the address space.
Constant * CreateICmp(CmpInst::Predicate P, Constant *LHS, Constant *RHS) const
Constant * CreateGetElementPtr(Type *Ty, Constant *C, ArrayRef< Value * > IdxList) const
Constant * CreateUDiv(Constant *LHS, Constant *RHS, bool isExact=false) const
Constant * CreateMul(Constant *LHS, Constant *RHS, bool HasNUW=false, bool HasNSW=false) const
Constant * CreateSelect(Constant *C, Constant *True, Constant *False) const
static Constant * getGetElementPtr(Type *Ty, Constant *C, ArrayRef< Constant * > IdxList, bool InBounds=false, Type *OnlyIfReducedTy=nullptr)
Getelementptr form.
static Constant * getExtractElement(Constant *Vec, Constant *Idx, Type *OnlyIfReducedTy=nullptr)
Constant * CreateFRem(Constant *LHS, Constant *RHS) const
Constant * CreateBinOp(Instruction::BinaryOps Opc, Constant *LHS, Constant *RHS) const
static Constant * getCompare(unsigned short pred, Constant *C1, Constant *C2, bool OnlyIfReduced=false)
Return an ICmp or FCmp comparison operator constant expression.
static Constant * getSub(Constant *C1, Constant *C2, bool HasNUW=false, bool HasNSW=false)
Constant * ConstantFoldConstantExpression(const ConstantExpr *CE, const DataLayout &DL, const TargetLibraryInfo *TLI=nullptr)
ConstantFoldConstantExpression - Attempt to fold the constant expression using the specified DataLayo...
Constant * CreateIntToPtr(Constant *C, Type *DestTy) const
static Constant * getInsertElement(Constant *Vec, Constant *Elt, Constant *Idx, Type *OnlyIfReducedTy=nullptr)
Constant * CreateFCmp(CmpInst::Predicate P, Constant *LHS, Constant *RHS) const
Constant * CreateTruncOrBitCast(Constant *C, Type *DestTy) const
static Constant * getAdd(Constant *C1, Constant *C2, bool HasNUW=false, bool HasNSW=false)
static Constant * getFMul(Constant *C1, Constant *C2)
Constant * CreateSRem(Constant *LHS, Constant *RHS) const
static Constant * getIntegerCast(Constant *C, Type *Ty, bool isSigned)
Create a ZExt, Bitcast or Trunc for integer -> integer casts.
Constant * CreateInBoundsGetElementPtr(Type *Ty, Constant *C, ArrayRef< Value * > IdxList) const
static Constant * getLShr(Constant *C1, Constant *C2, bool isExact=false)
Constant * CreateFAdd(Constant *LHS, Constant *RHS) const
Constant * CreateInsertValue(Constant *Agg, Constant *Val, ArrayRef< unsigned > IdxList) const
static Constant * get(unsigned Opcode, Constant *C1, Constant *C2, unsigned Flags=0, Type *OnlyIfReducedTy=nullptr)
get - Return a binary or shift operator constant expression, folding if possible. ...
ConstantExpr - a constant value that is initialized with an expression using other constant values...
static Constant * getFPCast(Constant *C, Type *Ty)
Create a FPExt, Bitcast or FPTrunc for fp -> fp casts.
Constant * CreateShl(Constant *LHS, Constant *RHS, bool HasNUW=false, bool HasNSW=false) const
Constant * CreateFNeg(Constant *C) const
static Constant * getAShr(Constant *C1, Constant *C2, bool isExact=false)
static Constant * getSelect(Constant *C, Constant *V1, Constant *V2, Type *OnlyIfReducedTy=nullptr)
Select constant expr.
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory)...
TargetFolder - Create constants with target dependent folding.
Constant * CreateAShr(Constant *LHS, Constant *RHS, bool isExact=false) const
static Constant * getUDiv(Constant *C1, Constant *C2, bool isExact=false)
static Constant * getFDiv(Constant *C1, Constant *C2)
Constant * CreateXor(Constant *LHS, Constant *RHS) const
static Constant * getInsertValue(Constant *Agg, Constant *Val, ArrayRef< unsigned > Idxs, Type *OnlyIfReducedTy=nullptr)
static Constant * getFNeg(Constant *C)
static Constant * getFRem(Constant *C1, Constant *C2)
static Constant * getInBoundsGetElementPtr(Type *Ty, Constant *C, ArrayRef< Constant * > IdxList)
Create an "inbounds" getelementptr.
Constant * CreateOr(Constant *LHS, Constant *RHS) const
The instances of the Type class are immutable: once they are created, they are never changed...
This is an important base class in LLVM.
This file contains the declarations for the subclasses of Constant, which represent the different fla...
static Constant * getAnd(Constant *C1, Constant *C2)
Constant * CreateExtractElement(Constant *Vec, Constant *Idx) const
static Constant * getSExtOrBitCast(Constant *C, Type *Ty)
static Constant * getShuffleVector(Constant *V1, Constant *V2, Constant *Mask, Type *OnlyIfReducedTy=nullptr)
Predicate
This enumeration lists the possible predicates for CmpInst subclasses.
Constant * CreateBitCast(Constant *C, Type *DestTy) const
Constant * CreatePointerCast(Constant *C, Type *DestTy) const
static Constant * getNot(Constant *C)
Constant * CreateSDiv(Constant *LHS, Constant *RHS, bool isExact=false) const
Constant * CreatePointerBitCastOrAddrSpaceCast(Constant *C, Type *DestTy) const
Constant * CreateFDiv(Constant *LHS, Constant *RHS) const
Constant * CreateFMul(Constant *LHS, Constant *RHS) const
Constant * CreateNeg(Constant *C, bool HasNUW=false, bool HasNSW=false) const
static Constant * getPointerCast(Constant *C, Type *Ty)
Create a BitCast, AddrSpaceCast, or a PtrToInt cast constant expression.
Constant * CreateFPCast(Constant *C, Type *DestTy) const
static Constant * getSDiv(Constant *C1, Constant *C2, bool isExact=false)
Type * getType() const
All values are typed, get the type of this value.
Constant * CreateSExtOrBitCast(Constant *C, Type *DestTy) const
static Constant * getCast(unsigned ops, Constant *C, Type *Ty, bool OnlyIfReduced=false)
Convenience function for getting a Cast operation.
static Constant * getZExtOrBitCast(Constant *C, Type *Ty)
static Constant * getFSub(Constant *C1, Constant *C2)
static Constant * getTruncOrBitCast(Constant *C, Type *Ty)
static Constant * getNeg(Constant *C, bool HasNUW=false, bool HasNSW=false)
Constant * CreateLShr(Constant *LHS, Constant *RHS, bool isExact=false) const
Constant * CreateAnd(Constant *LHS, Constant *RHS) const
Constant * CreateGetElementPtr(Type *Ty, Constant *C, Constant *Idx) const
Constant * CreateNot(Constant *C) const
static Constant * getOr(Constant *C1, Constant *C2)
static Constant * getShl(Constant *C1, Constant *C2, bool HasNUW=false, bool HasNSW=false)
Constant * CreateSub(Constant *LHS, Constant *RHS, bool HasNUW=false, bool HasNSW=false) const
Constant * CreateInsertElement(Constant *Vec, Constant *NewElt, Constant *Idx) const
Constant * CreateZExtOrBitCast(Constant *C, Type *DestTy) const
Constant * CreateAdd(Constant *LHS, Constant *RHS, bool HasNUW=false, bool HasNSW=false) const
static Constant * getSRem(Constant *C1, Constant *C2)
static Constant * getURem(Constant *C1, Constant *C2)
Constant * CreateURem(Constant *LHS, Constant *RHS) const
Constant * CreateInBoundsGetElementPtr(Type *Ty, Constant *C, ArrayRef< Constant * > IdxList) const
static Constant * getExtractValue(Constant *Agg, ArrayRef< unsigned > Idxs, Type *OnlyIfReducedTy=nullptr)
Constant * CreateExtractValue(Constant *Agg, ArrayRef< unsigned > IdxList) const
static Constant * getMul(Constant *C1, Constant *C2, bool HasNUW=false, bool HasNSW=false)
TargetFolder(const DataLayout &DL)
Constant * CreateIntCast(Constant *C, Type *DestTy, bool isSigned) const
Constant * CreateFSub(Constant *LHS, Constant *RHS) const
static Constant * getXor(Constant *C1, Constant *C2)
Constant * CreatePtrToInt(Constant *C, Type *DestTy) const