LLVM  13.0.0git
Classes | Public Member Functions | Static Public Member Functions | List of all members
llvm::ValueLatticeElement Class Reference

This class represents lattice values for constants. More...

#include "llvm/Analysis/ValueLattice.h"

Collaboration diagram for llvm::ValueLatticeElement:
Collaboration graph
[legend]

Classes

struct  MergeOptions
 Struct to control some aspects related to merging constant ranges. More...
 

Public Member Functions

 ValueLatticeElement ()
 
 ~ValueLatticeElement ()
 
 ValueLatticeElement (const ValueLatticeElement &Other)
 
 ValueLatticeElement (ValueLatticeElement &&Other)
 
ValueLatticeElementoperator= (const ValueLatticeElement &Other)
 
ValueLatticeElementoperator= (ValueLatticeElement &&Other)
 
bool isUndef () const
 
bool isUnknown () const
 
bool isUnknownOrUndef () const
 
bool isConstant () const
 
bool isNotConstant () const
 
bool isConstantRangeIncludingUndef () const
 
bool isConstantRange (bool UndefAllowed=true) const
 Returns true if this value is a constant range. More...
 
bool isOverdefined () const
 
ConstantgetConstant () const
 
ConstantgetNotConstant () const
 
const ConstantRangegetConstantRange (bool UndefAllowed=true) const
 Returns the constant range for this value. More...
 
Optional< APIntasConstantInteger () const
 
bool markOverdefined ()
 
bool markUndef ()
 
bool markConstant (Constant *V, bool MayIncludeUndef=false)
 
bool markNotConstant (Constant *V)
 
bool markConstantRange (ConstantRange NewR, MergeOptions Opts=MergeOptions())
 Mark the object as constant range with NewR. More...
 
bool mergeIn (const ValueLatticeElement &RHS, MergeOptions Opts=MergeOptions())
 Updates this object to approximate both this object and RHS. More...
 
ConstantgetCompare (CmpInst::Predicate Pred, Type *Ty, const ValueLatticeElement &Other) const
 true, false or undef constants, or nullptr if the comparison cannot be evaluated. More...
 
unsigned getNumRangeExtensions () const
 
void setNumRangeExtensions (unsigned N)
 

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 ()
 

Detailed Description

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.

Constructor & Destructor Documentation

◆ ValueLatticeElement() [1/3]

llvm::ValueLatticeElement::ValueLatticeElement ( )
inline

Definition at line 146 of file ValueLattice.h.

Referenced by operator=().

◆ ~ValueLatticeElement()

llvm::ValueLatticeElement::~ValueLatticeElement ( )
inline

Definition at line 148 of file ValueLattice.h.

◆ ValueLatticeElement() [2/3]

llvm::ValueLatticeElement::ValueLatticeElement ( const ValueLatticeElement Other)
inline

Definition at line 150 of file ValueLattice.h.

References ConstVal, Other, and Range.

◆ ValueLatticeElement() [3/3]

llvm::ValueLatticeElement::ValueLatticeElement ( ValueLatticeElement &&  Other)
inline

Definition at line 169 of file ValueLattice.h.

References ConstVal, move, Other, and Range.

Member Function Documentation

◆ asConstantInteger()

Optional<APInt> llvm::ValueLatticeElement::asConstantInteger ( ) const
inline

◆ get()

static ValueLatticeElement llvm::ValueLatticeElement::get ( Constant C)
inlinestatic

Definition at line 201 of file ValueLattice.h.

References markConstant(), and markUndef().

Referenced by getEdgeValueLocal(), and getValueFromICmpCondition().

◆ getCompare()

Constant* llvm::ValueLatticeElement::getCompare ( CmpInst::Predicate  Pred,
Type Ty,
const ValueLatticeElement Other 
) const
inline

◆ getConstant()

Constant* llvm::ValueLatticeElement::getConstant ( ) const
inline

◆ getConstantRange()

const ConstantRange& llvm::ValueLatticeElement::getConstantRange ( bool  UndefAllowed = true) const
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 270 of file ValueLattice.h.

References assert(), isConstantRange(), and Range.

Referenced by asConstantInteger(), getCompare(), llvm::SCCPInstVisitor::getConstant(), getEdgeValueLocal(), getPredicateResult(), hasSingleValue(), isConstant(), markConstantRange(), mergeIn(), llvm::operator<<(), llvm::runIPSCCP(), and simplifyInstsInBlock().

◆ getNot()

static ValueLatticeElement llvm::ValueLatticeElement::getNot ( Constant C)
inlinestatic

Definition at line 209 of file ValueLattice.h.

References assert(), and markNotConstant().

Referenced by getValueFromICmpCondition(), and getValueFromMetadata().

◆ getNotConstant()

Constant* llvm::ValueLatticeElement::getNotConstant ( ) const
inline

◆ getNumRangeExtensions()

unsigned llvm::ValueLatticeElement::getNumRangeExtensions ( ) const
inline

Definition at line 485 of file ValueLattice.h.

◆ getOverdefined()

static ValueLatticeElement llvm::ValueLatticeElement::getOverdefined ( )
inlinestatic

◆ getRange()

static ValueLatticeElement llvm::ValueLatticeElement::getRange ( ConstantRange  CR,
bool  MayIncludeUndef = false 
)
inlinestatic

◆ isConstant()

bool llvm::ValueLatticeElement::isConstant ( ) const
inline

◆ isConstantRange()

bool llvm::ValueLatticeElement::isConstantRange ( bool  UndefAllowed = true) const
inline

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 250 of file ValueLattice.h.

References llvm::ConstantRange::isSingleElement(), and Range.

Referenced by asConstantInteger(), getCompare(), llvm::SCCPInstVisitor::getConstant(), getConstantRange(), getPredicateResult(), hasSingleValue(), isConstant(), markConstantRange(), mergeIn(), llvm::operator<<(), llvm::runIPSCCP(), and simplifyInstsInBlock().

◆ isConstantRangeIncludingUndef()

bool llvm::ValueLatticeElement::isConstantRangeIncludingUndef ( ) const
inline

Definition at line 243 of file ValueLattice.h.

Referenced by markConstantRange(), mergeIn(), llvm::operator<<(), and llvm::runIPSCCP().

◆ isNotConstant()

bool llvm::ValueLatticeElement::isNotConstant ( ) const
inline

◆ isOverdefined()

bool llvm::ValueLatticeElement::isOverdefined ( ) const
inline

◆ isUndef()

bool llvm::ValueLatticeElement::isUndef ( ) const
inline

Definition at line 238 of file ValueLattice.h.

Referenced by markConstant(), markConstantRange(), markUndef(), mergeIn(), and llvm::operator<<().

◆ isUnknown()

bool llvm::ValueLatticeElement::isUnknown ( ) const
inline

◆ isUnknownOrUndef()

bool llvm::ValueLatticeElement::isUnknownOrUndef ( ) const
inline

◆ markConstant()

bool llvm::ValueLatticeElement::markConstant ( Constant V,
bool  MayIncludeUndef = false 
)
inline

◆ markConstantRange()

bool llvm::ValueLatticeElement::markConstantRange ( ConstantRange  NewR,
MergeOptions  Opts = MergeOptions() 
)
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 348 of file ValueLattice.h.

References assert(), llvm::ConstantRange::contains(), getConstantRange(), isConstantRange(), isConstantRangeIncludingUndef(), llvm::ConstantRange::isEmptySet(), llvm::ConstantRange::isFullSet(), isUndef(), isUnknown(), markOverdefined(), move, and Range.

Referenced by getRange(), markConstant(), markNotConstant(), and mergeIn().

◆ markNotConstant()

bool llvm::ValueLatticeElement::markNotConstant ( Constant V)
inline

Definition at line 322 of file ValueLattice.h.

References assert(), ConstVal, getNotConstant(), isNotConstant(), isUnknown(), and markConstantRange().

Referenced by getNot().

◆ markOverdefined()

bool llvm::ValueLatticeElement::markOverdefined ( )
inline

Definition at line 285 of file ValueLattice.h.

References isOverdefined().

Referenced by getOverdefined(), markConstantRange(), and mergeIn().

◆ markUndef()

bool llvm::ValueLatticeElement::markUndef ( )
inline

Definition at line 293 of file ValueLattice.h.

References assert(), isUndef(), and isUnknown().

Referenced by get(), getRange(), and markConstant().

◆ mergeIn()

bool llvm::ValueLatticeElement::mergeIn ( const ValueLatticeElement RHS,
MergeOptions  Opts = MergeOptions() 
)
inline

Updates this object to approximate both this object and RHS.

Returns true if this object has been changed.

Definition at line 386 of file ValueLattice.h.

References assert(), getConstant(), getConstantRange(), getNotConstant(), isConstant(), isConstantRange(), isConstantRangeIncludingUndef(), isNotConstant(), isOverdefined(), isUndef(), isUnknown(), markConstant(), markConstantRange(), markOverdefined(), move, and llvm::ConstantRange::unionWith().

Referenced by getValueFromConditionImpl().

◆ operator=() [1/2]

ValueLatticeElement& llvm::ValueLatticeElement::operator= ( const ValueLatticeElement Other)
inline

Definition at line 189 of file ValueLattice.h.

References Other, and ValueLatticeElement().

◆ operator=() [2/2]

ValueLatticeElement& llvm::ValueLatticeElement::operator= ( ValueLatticeElement &&  Other)
inline

Definition at line 195 of file ValueLattice.h.

References move, Other, and ValueLatticeElement().

◆ setNumRangeExtensions()

void llvm::ValueLatticeElement::setNumRangeExtensions ( unsigned  N)
inline

Definition at line 486 of file ValueLattice.h.

References N.

Member Data Documentation

◆ ConstVal

Constant* llvm::ValueLatticeElement::ConstVal

◆ Range

ConstantRange llvm::ValueLatticeElement::Range

The documentation for this class was generated from the following file: