LLVM 20.0.0git
|
This class represents lattice values for constants. More...
#include "llvm/Analysis/ValueLattice.h"
Classes | |
struct | MergeOptions |
Struct to control some aspects related to merging constant ranges. More... | |
Static Public Member Functions | |
static ValueLatticeElement | get (Constant *C) |
static ValueLatticeElement | getNot (Constant *C) |
static ValueLatticeElement | getRange (ConstantRange CR, bool MayIncludeUndef=false) |
static ValueLatticeElement | getOverdefined () |
This class represents lattice values for constants.
FIXME: This is basically just for bringup, this can be made a lot more rich in the future.
Definition at line 26 of file ValueLattice.h.
|
inline |
Definition at line 145 of file ValueLattice.h.
Referenced by operator=().
|
inline |
Definition at line 147 of file ValueLattice.h.
|
inline |
Definition at line 149 of file ValueLattice.h.
References ConstVal, llvm::Other, and Range.
|
inline |
Definition at line 168 of file ValueLattice.h.
References ConstVal, llvm::Other, and Range.
|
inline |
Definition at line 272 of file ValueLattice.h.
References getConstant(), getConstantRange(), llvm::ConstantRange::getSingleElement(), isConstant(), and isConstantRange().
|
inline |
Definition at line 291 of file ValueLattice.h.
References asConstantRange(), assert(), llvm::Type::getScalarSizeInBits(), and llvm::Type::isIntOrIntVectorTy().
|
inline |
Definition at line 281 of file ValueLattice.h.
References getConstant(), getConstantRange(), isConstant(), isConstantRange(), isUnknown(), and llvm::Constant::toConstantRange().
Referenced by asConstantRange(), and llvm::refineInstruction().
|
inlinestatic |
Definition at line 200 of file ValueLattice.h.
References llvm::CallingConv::C, and markConstant().
Referenced by llvm::LazyValueInfoImpl::getValueAt().
Constant * llvm::ValueLatticeElement::getCompare | ( | CmpInst::Predicate | Pred, |
Type * | Ty, | ||
const ValueLatticeElement & | Other, | ||
const DataLayout & | DL | ||
) | const |
true, false or undef constants, or nullptr if the comparison cannot be evaluated.
Definition at line 15 of file ValueLattice.cpp.
References llvm::ConstantFoldCompareInstOperands(), DL, getConstant(), getConstantRange(), llvm::ConstantInt::getFalse(), llvm::CmpInst::getInversePredicate(), getNotConstant(), llvm::ConstantInt::getTrue(), llvm::CmpInst::ICMP_NE, isConstant(), isConstantRange(), llvm::ICmpInst::isEquality(), isNotConstant(), isUndef(), isUnknown(), and llvm::Other.
|
inline |
Definition at line 252 of file ValueLattice.h.
References assert(), ConstVal, and isConstant().
Referenced by asConstantInteger(), asConstantRange(), getCompare(), llvm::SCCPInstVisitor::getConstant(), getPredicateResult(), markConstant(), markConstantRange(), mergeIn(), and llvm::operator<<().
|
inline |
Returns the constant range for this value.
Use UndefAllowed
to exclude non-singleton constant ranges that may also be undef. Note that this function also returns a range if the range may include undef, but only contains a single element. In that case, it can be replaced by a constant.
Definition at line 266 of file ValueLattice.h.
References assert(), isConstantRange(), and Range.
Referenced by asConstantInteger(), asConstantRange(), getCompare(), llvm::SCCPInstVisitor::getConstant(), getPredicateResult(), hasSingleValue(), llvm::hasSingleValue(), llvm::inferAttribute(), intersect(), llvm::SCCPSolver::isConstant(), markConstantRange(), mergeIn(), and llvm::operator<<().
|
inlinestatic |
Definition at line 205 of file ValueLattice.h.
References assert(), llvm::CallingConv::C, and markNotConstant().
Referenced by llvm::SCCPInstVisitor::getArgAttributeVL(), and getValueFromMetadata().
|
inline |
Definition at line 257 of file ValueLattice.h.
References assert(), ConstVal, and isNotConstant().
Referenced by getCompare(), getPredicateResult(), llvm::inferAttribute(), markNotConstant(), mergeIn(), and llvm::operator<<().
|
inline |
Definition at line 491 of file ValueLattice.h.
|
inlinestatic |
Definition at line 228 of file ValueLattice.h.
References markOverdefined().
Referenced by constantFoldUser(), llvm::SCCPInstVisitor::getArgAttributeVL(), getFromRangeMetadata(), getRange(), llvm::LazyValueInfoImpl::getValueAt(), getValueFromMetadata(), and getValueFromOverflowCondition().
|
inlinestatic |
Definition at line 211 of file ValueLattice.h.
References getOverdefined(), llvm::ConstantRange::isEmptySet(), llvm::ConstantRange::isFullSet(), markConstantRange(), and markUndef().
Referenced by constantFoldUser(), llvm::SCCPInstVisitor::getArgAttributeVL(), getFromRangeMetadata(), getValueFromMetadata(), getValueFromOverflowCondition(), and intersect().
ValueLatticeElement llvm::ValueLatticeElement::intersect | ( | const ValueLatticeElement & | Other | ) | const |
Combine two sets of facts about the same value into a single set of facts.
Note that this method is not suitable for merging facts along different paths in a CFG; that's what the mergeIn function is for. This is for merging facts gathered about the same value at the same location through two independent means. Notes:
Definition at line 78 of file ValueLattice.cpp.
References getConstantRange(), getRange(), llvm::hasSingleValue(), llvm::ConstantRange::intersectWith(), isConstantRange(), isConstantRangeIncludingUndef(), isOverdefined(), isUnknown(), llvm::Other, and Range.
Referenced by llvm::LazyValueInfoImpl::getValueAtUse().
|
inline |
Definition at line 237 of file ValueLattice.h.
Referenced by asConstantInteger(), asConstantRange(), getCompare(), getConstant(), llvm::SCCPInstVisitor::getConstant(), getPredicateResult(), hasSingleValue(), llvm::hasSingleValue(), llvm::SCCPSolver::isConstant(), markConstant(), markConstantRange(), and mergeIn().
Returns true if this value is a constant range.
Use UndefAllowed
to exclude non-singleton constant ranges that may also be undef. Note that this function also returns true if the range may include undef, but only contains a single element. In that case, it can be replaced by a constant.
Definition at line 246 of file ValueLattice.h.
References llvm::ConstantRange::isSingleElement(), and Range.
Referenced by asConstantInteger(), asConstantRange(), getCompare(), llvm::SCCPInstVisitor::getConstant(), getConstantRange(), getPredicateResult(), hasSingleValue(), llvm::hasSingleValue(), llvm::inferAttribute(), intersect(), llvm::SCCPSolver::isConstant(), markConstantRange(), mergeIn(), and llvm::operator<<().
|
inline |
Definition at line 239 of file ValueLattice.h.
Referenced by llvm::inferAttribute(), intersect(), markConstantRange(), and llvm::operator<<().
|
inline |
Definition at line 238 of file ValueLattice.h.
Referenced by getCompare(), getNotConstant(), getPredicateResult(), llvm::inferAttribute(), markNotConstant(), mergeIn(), and llvm::operator<<().
|
inline |
Definition at line 250 of file ValueLattice.h.
Referenced by intersect(), markOverdefined(), mergeIn(), and llvm::operator<<().
|
inline |
Definition at line 234 of file ValueLattice.h.
Referenced by getCompare(), markConstant(), markConstantRange(), markUndef(), mergeIn(), and llvm::operator<<().
|
inline |
Definition at line 235 of file ValueLattice.h.
Referenced by asConstantRange(), getCompare(), intersect(), markConstant(), markConstantRange(), markNotConstant(), markUndef(), mergeIn(), llvm::operator<<(), and llvm::SCCPInstVisitor::resolvedUndef().
|
inline |
Definition at line 236 of file ValueLattice.h.
Referenced by llvm::SCCPSolver::isOverdefined().
Definition at line 313 of file ValueLattice.h.
References assert(), ConstVal, getConstant(), isConstant(), isUndef(), isUnknown(), markConstantRange(), and markUndef().
Referenced by get(), mergeIn(), and llvm::SCCPInstVisitor::setLatticeValueForSpecializationArguments().
|
inline |
Mark the object as constant range with NewR
.
If the object is already a constant range, nothing changes if the existing range is equal to NewR
and the tag. Otherwise NewR
must be a superset of the existing range or the object must be undef. The tag is set to constant_range_including_undef if either the existing value or the new range may include undef.
Definition at line 359 of file ValueLattice.h.
References assert(), llvm::ConstantRange::contains(), getConstant(), getConstantRange(), isConstant(), isConstantRange(), isConstantRangeIncludingUndef(), llvm::ConstantRange::isEmptySet(), llvm::ConstantRange::isFullSet(), isUndef(), isUnknown(), markOverdefined(), and Range.
Referenced by getRange(), markConstant(), markNotConstant(), and mergeIn().
Definition at line 333 of file ValueLattice.h.
References assert(), ConstVal, getNotConstant(), isNotConstant(), isUnknown(), and markConstantRange().
Referenced by getNot().
|
inline |
Definition at line 296 of file ValueLattice.h.
References isOverdefined().
Referenced by getOverdefined(), markConstantRange(), and mergeIn().
|
inline |
Definition at line 304 of file ValueLattice.h.
References assert(), isUndef(), and isUnknown().
Referenced by getRange(), and markConstant().
|
inline |
Updates this object to approximate both this object and RHS.
Returns true if this object has been changed.
Definition at line 399 of file ValueLattice.h.
References assert(), getConstant(), getConstantRange(), getNotConstant(), getType(), isConstant(), isConstantRange(), isNotConstant(), isOverdefined(), isUndef(), isUnknown(), markConstant(), markConstantRange(), markOverdefined(), RHS, and llvm::Constant::toConstantRange().
|
inline |
Definition at line 188 of file ValueLattice.h.
References llvm::Other, and ValueLatticeElement().
|
inline |
Definition at line 194 of file ValueLattice.h.
References llvm::Other, and ValueLatticeElement().
|
inline |
Definition at line 492 of file ValueLattice.h.
References N.
Constant* llvm::ValueLatticeElement::ConstVal |
Definition at line 86 of file ValueLattice.h.
Referenced by getConstant(), getNotConstant(), markConstant(), markNotConstant(), and ValueLatticeElement().
ConstantRange llvm::ValueLatticeElement::Range |
Definition at line 87 of file ValueLattice.h.
Referenced by getConstantRange(), intersect(), isConstantRange(), markConstantRange(), and ValueLatticeElement().