LLVM 22.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 27 of file ValueLattice.h.
|
inline |
Definition at line 146 of file ValueLattice.h.
Referenced by operator=().
|
inline |
Definition at line 148 of file ValueLattice.h.
|
inline |
Definition at line 150 of file ValueLattice.h.
References ConstVal, llvm::Other, and Range.
|
inline |
Definition at line 169 of file ValueLattice.h.
References ConstVal, llvm::Other, and Range.
|
inline |
Definition at line 273 of file ValueLattice.h.
References getConstant(), getConstantRange(), llvm::ConstantRange::getSingleElement(), isConstant(), and isConstantRange().
|
inline |
Definition at line 292 of file ValueLattice.h.
References asConstantRange(), assert(), llvm::Type::getScalarSizeInBits(), and llvm::Type::isIntOrIntVectorTy().
|
inline |
Definition at line 282 of file ValueLattice.h.
References getConstant(), getConstantRange(), isConstant(), isConstantRange(), isUnknown(), and llvm::Constant::toConstantRange().
Referenced by asConstantRange(), and llvm::getRange().
|
inlinestatic |
Definition at line 201 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 253 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 267 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 206 of file ValueLattice.h.
References assert(), llvm::CallingConv::C, and markNotConstant().
Referenced by llvm::SCCPInstVisitor::getArgAttributeVL(), and getValueFromMetadata().
|
inline |
Definition at line 258 of file ValueLattice.h.
References assert(), ConstVal, and isNotConstant().
Referenced by getCompare(), getPredicateResult(), llvm::inferAttribute(), markNotConstant(), mergeIn(), and llvm::operator<<().
|
inline |
Definition at line 493 of file ValueLattice.h.
|
inlinestatic |
Definition at line 229 of file ValueLattice.h.
References markOverdefined().
Referenced by constantFoldUser(), llvm::SCCPInstVisitor::getArgAttributeVL(), getFromRangeMetadata(), getRange(), llvm::LazyValueInfoImpl::getValueAt(), getValueFromICmpCtpop(), getValueFromMetadata(), and getValueFromOverflowCondition().
|
inlinestatic |
Definition at line 212 of file ValueLattice.h.
References getOverdefined(), llvm::ConstantRange::isEmptySet(), llvm::ConstantRange::isFullSet(), markConstantRange(), and markUndef().
Referenced by constantFoldUser(), llvm::SCCPInstVisitor::getArgAttributeVL(), getFromRangeMetadata(), getValueFromICmpCtpop(), 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 238 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 247 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 240 of file ValueLattice.h.
Referenced by llvm::inferAttribute(), intersect(), markConstantRange(), and llvm::operator<<().
|
inline |
Definition at line 239 of file ValueLattice.h.
Referenced by getCompare(), getNotConstant(), getPredicateResult(), llvm::inferAttribute(), markNotConstant(), mergeIn(), and llvm::operator<<().
|
inline |
Definition at line 251 of file ValueLattice.h.
Referenced by intersect(), markOverdefined(), mergeIn(), and llvm::operator<<().
|
inline |
Definition at line 235 of file ValueLattice.h.
Referenced by getCompare(), markConstant(), markConstantRange(), markUndef(), mergeIn(), and llvm::operator<<().
|
inline |
Definition at line 236 of file ValueLattice.h.
Referenced by asConstantRange(), getCompare(), intersect(), markConstant(), markConstantRange(), markNotConstant(), markUndef(), mergeIn(), llvm::operator<<(), and llvm::SCCPInstVisitor::resolvedUndef().
|
inline |
Definition at line 237 of file ValueLattice.h.
Referenced by llvm::SCCPSolver::isOverdefined().
Definition at line 314 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 360 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 334 of file ValueLattice.h.
References assert(), ConstVal, getNotConstant(), isNotConstant(), isUnknown(), and markConstantRange().
Referenced by getNot().
|
inline |
Definition at line 297 of file ValueLattice.h.
References isOverdefined().
Referenced by getOverdefined(), markConstantRange(), and mergeIn().
|
inline |
Definition at line 305 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 400 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 189 of file ValueLattice.h.
References llvm::Other, and ValueLatticeElement().
|
inline |
Definition at line 195 of file ValueLattice.h.
References llvm::Other, and ValueLatticeElement().
|
inline |
Definition at line 494 of file ValueLattice.h.
References N.
Constant* llvm::ValueLatticeElement::ConstVal |
Definition at line 87 of file ValueLattice.h.
Referenced by getConstant(), getNotConstant(), markConstant(), markNotConstant(), and ValueLatticeElement().
ConstantRange llvm::ValueLatticeElement::Range |
Definition at line 88 of file ValueLattice.h.
Referenced by getConstantRange(), intersect(), isConstantRange(), markConstantRange(), and ValueLatticeElement().