LLVM 22.0.0git
ConstantFold.cpp File Reference

Go to the source code of this file.

Functions

static unsigned foldConstantCastPair (unsigned opc, ConstantExpr *Op, Type *DstTy)
 This function determines which opcode to use to fold two constant cast expressions together.
static ConstantFoldBitCast (Constant *V, Type *DestTy)
static ConstantfoldMaybeUndesirableCast (unsigned opc, Constant *V, Type *DestTy)
static ICmpInst::Predicate areGlobalsPotentiallyEqual (const GlobalValue *GV1, const GlobalValue *GV2)
static ICmpInst::Predicate evaluateICmpRelation (Constant *V1, Constant *V2)
 This function determines if there is anything we can decide about the two constants provided.

Function Documentation

◆ areGlobalsPotentiallyEqual()

ICmpInst::Predicate areGlobalsPotentiallyEqual ( const GlobalValue * GV1,
const GlobalValue * GV2 )
static

◆ evaluateICmpRelation()

ICmpInst::Predicate evaluateICmpRelation ( Constant * V1,
Constant * V2 )
static

This function determines if there is anything we can decide about the two constants provided.

This doesn't need to handle simple things like integer comparisons, but should instead handle ConstantExprs and GlobalValues. If we can determine that the two constants have a particular relation to each other, we should return the corresponding ICmp predicate, otherwise return ICmpInst::BAD_ICMP_PREDICATE.

Definition at line 993 of file ConstantFold.cpp.

References areGlobalsPotentiallyEqual(), assert(), llvm::CmpInst::BAD_ICMP_PREDICATE, llvm::cast(), llvm::dyn_cast(), evaluateICmpRelation(), llvm::User::getOperand(), llvm::CmpInst::getSwappedPredicate(), llvm::Value::getType(), llvm::GEPOperator::hasAllZeroIndices(), llvm::CmpInst::ICMP_EQ, llvm::CmpInst::ICMP_NE, llvm::CmpInst::ICMP_UGT, llvm::isa(), llvm::GEPOperator::isInBounds(), llvm::Type::isPointerTy(), and llvm::NullPointerIsDefined().

Referenced by llvm::ConstantFoldCompareInstruction(), and evaluateICmpRelation().

◆ FoldBitCast()

◆ foldConstantCastPair()

unsigned foldConstantCastPair ( unsigned opc,
ConstantExpr * Op,
Type * DstTy )
static

This function determines which opcode to use to fold two constant cast expressions together.

It uses CastInst::isEliminableCastPair to determine the opcode. Consequently its just a wrapper around that function. Determine if it is valid to fold a cast of a cast

Parameters
opcopcode of the second cast constant expression
Opthe first cast constant expression
DstTydestination type of the first cast

Definition at line 44 of file ConstantFold.cpp.

References assert(), llvm::Type::getContext(), llvm::Type::getInt64Ty(), llvm::Instruction::isCast(), llvm::CastInst::isEliminableCastPair(), and llvm::Type::isFirstClassType().

Referenced by llvm::ConstantFoldCastInstruction().

◆ foldMaybeUndesirableCast()

Constant * foldMaybeUndesirableCast ( unsigned opc,
Constant * V,
Type * DestTy )
static