LLVM 20.0.0git
|
#include "llvm/IR/ConstantFold.h"
#include "llvm/ADT/APSInt.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/GlobalAlias.h"
#include "llvm/IR/GlobalVariable.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/Operator.h"
#include "llvm/IR/PatternMatch.h"
#include "llvm/Support/ErrorHandling.h"
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 Constant * | FoldBitCast (Constant *V, Type *DestTy) |
static Constant * | foldMaybeUndesirableCast (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. | |
|
static |
Definition at line 962 of file ConstantFold.cpp.
References llvm::Type::isEmptyTy(), and llvm::Type::isSized().
Referenced by evaluateICmpRelation().
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 992 of file ConstantFold.cpp.
References areGlobalsPotentiallyEqual(), assert(), evaluateICmpRelation(), llvm::User::getOperand(), llvm::Value::getType(), llvm::GEPOperator::hasAllZeroIndices(), llvm::GEPOperator::isInBounds(), llvm::Type::isPointerTy(), and llvm::NullPointerIsDefined().
Referenced by llvm::ConstantFoldCompareInstruction(), and evaluateICmpRelation().
Definition at line 69 of file ConstantFold.cpp.
References FP, llvm::ConstantVector::get(), llvm::Constant::getAllOnesValue(), llvm::ConstantExpr::getBitCast(), llvm::Type::getFltSemantics(), llvm::Type::getScalarSizeInBits(), llvm::Type::getScalarType(), llvm::Type::isFPOrFPVectorTy(), llvm::Type::isIntOrIntVectorTy(), and llvm::Type::isPPC_FP128Ty().
Referenced by llvm::ConstantFoldCastInstruction(), and llvm::ConstantFoldCastOperand().
|
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
opc | opcode of the second cast constant expression |
Op | the first cast constant expression |
DstTy | destination type of the first cast |
Definition at line 44 of file ConstantFold.cpp.
References assert(), llvm::Type::getContext(), llvm::Type::getInt64Ty(), llvm::CastInst::isEliminableCastPair(), and llvm::Type::isFirstClassType().
Referenced by llvm::ConstantFoldCastInstruction().
Definition at line 124 of file ConstantFold.cpp.
References llvm::ConstantFoldCastInstruction(), llvm::ConstantExpr::getCast(), and llvm::ConstantExpr::isDesirableCastOp().
Referenced by llvm::ConstantFoldCastInstruction().