LLVM 17.0.0git
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
llvm::IntegerStateBase< base_ty, BestState, WorstState > Struct Template Referenceabstract

Simple state with integers encoding. More...

#include "llvm/Transforms/IPO/Attributor.h"

Inheritance diagram for llvm::IntegerStateBase< base_ty, BestState, WorstState >:
Inheritance graph
[legend]
Collaboration diagram for llvm::IntegerStateBase< base_ty, BestState, WorstState >:
Collaboration graph
[legend]

Public Types

using base_t = base_ty
 

Public Member Functions

 IntegerStateBase ()=default
 
 IntegerStateBase (base_t Assumed)
 
bool isValidState () const override
 See AbstractState::isValidState() NOTE: For now we simply pretend that the worst possible state is invalid.
 
bool isAtFixpoint () const override
 See AbstractState::isAtFixpoint()
 
ChangeStatus indicateOptimisticFixpoint () override
 See AbstractState::indicateOptimisticFixpoint(...)
 
ChangeStatus indicatePessimisticFixpoint () override
 See AbstractState::indicatePessimisticFixpoint(...)
 
base_t getKnown () const
 Return the known state encoding.
 
base_t getAssumed () const
 Return the assumed state encoding.
 
bool operator== (const IntegerStateBase< base_t, BestState, WorstState > &R) const
 Equality for IntegerStateBase.
 
bool operator!= (const IntegerStateBase< base_t, BestState, WorstState > &R) const
 Inequality for IntegerStateBase.
 
void operator^= (const IntegerStateBase< base_t, BestState, WorstState > &R)
 "Clamp" this state with R.
 
void operator+= (const IntegerStateBase< base_t, BestState, WorstState > &R)
 "Clamp" this state with R.
 
void operator|= (const IntegerStateBase< base_t, BestState, WorstState > &R)
 
void operator&= (const IntegerStateBase< base_t, BestState, WorstState > &R)
 
- Public Member Functions inherited from llvm::AbstractState
virtual ~AbstractState ()=default
 
virtual bool isValidState () const =0
 Return if this abstract state is in a valid state.
 
virtual bool isAtFixpoint () const =0
 Return if this abstract state is fixed, thus does not need to be updated if information changes as it cannot change itself.
 
virtual ChangeStatus indicateOptimisticFixpoint ()=0
 Indicate that the abstract state should converge to the optimistic state.
 
virtual ChangeStatus indicatePessimisticFixpoint ()=0
 Indicate that the abstract state should converge to the pessimistic state.
 

Static Public Member Functions

static constexpr base_t getBestState ()
 Return the best possible representable state.
 
static constexpr base_t getBestState (const IntegerStateBase &)
 
static constexpr base_t getWorstState ()
 Return the worst possible representable state.
 
static constexpr base_t getWorstState (const IntegerStateBase &)
 

Protected Member Functions

virtual void handleNewAssumedValue (base_t Value)=0
 Handle a new assumed value Value. Subtype dependent.
 
virtual void handleNewKnownValue (base_t Value)=0
 Handle a new known value Value. Subtype dependent.
 
virtual void joinOR (base_t AssumedValue, base_t KnownValue)=0
 Handle a value Value. Subtype dependent.
 
virtual void joinAND (base_t AssumedValue, base_t KnownValue)=0
 Handle a new assumed value Value. Subtype dependent.
 

Protected Attributes

base_t Known = getWorstState()
 The known state encoding in an integer of type base_t.
 
base_t Assumed = getBestState()
 The assumed state encoding in an integer of type base_t.
 

Detailed Description

template<typename base_ty, base_ty BestState, base_ty WorstState>
struct llvm::IntegerStateBase< base_ty, BestState, WorstState >

Simple state with integers encoding.

The interface ensures that the assumed bits are always a subset of the known bits. Users can only add known bits and, except through adding known bits, they can only remove assumed bits. This should guarantee monotoniticy and thereby the existence of a fixpoint (if used corretly). The fixpoint is reached when the assumed and known state/bits are equal. Users can force/inidicate a fixpoint. If an optimistic one is indicated, the known state will catch up with the assumed one, for a pessimistic fixpoint it is the other way around.

Definition at line 2464 of file Attributor.h.

Member Typedef Documentation

◆ base_t

template<typename base_ty , base_ty BestState, base_ty WorstState>
using llvm::IntegerStateBase< base_ty, BestState, WorstState >::base_t = base_ty

Definition at line 2465 of file Attributor.h.

Constructor & Destructor Documentation

◆ IntegerStateBase() [1/2]

template<typename base_ty , base_ty BestState, base_ty WorstState>
llvm::IntegerStateBase< base_ty, BestState, WorstState >::IntegerStateBase ( )
default

◆ IntegerStateBase() [2/2]

template<typename base_ty , base_ty BestState, base_ty WorstState>
llvm::IntegerStateBase< base_ty, BestState, WorstState >::IntegerStateBase ( base_t  Assumed)
inline

Definition at line 2468 of file Attributor.h.

Member Function Documentation

◆ getAssumed()

template<typename base_ty , base_ty BestState, base_ty WorstState>
base_t llvm::IntegerStateBase< base_ty, BestState, WorstState >::getAssumed ( ) const
inline

◆ getBestState() [1/2]

template<typename base_ty , base_ty BestState, base_ty WorstState>
static constexpr base_t llvm::IntegerStateBase< base_ty, BestState, WorstState >::getBestState ( )
inlinestaticconstexpr

Return the best possible representable state.

Definition at line 2471 of file Attributor.h.

Referenced by llvm::IntegerStateBase< base_ty, BestState, WorstState >::getBestState().

◆ getBestState() [2/2]

template<typename base_ty , base_ty BestState, base_ty WorstState>
static constexpr base_t llvm::IntegerStateBase< base_ty, BestState, WorstState >::getBestState ( const IntegerStateBase< base_ty, BestState, WorstState > &  )
inlinestaticconstexpr

◆ getKnown()

template<typename base_ty , base_ty BestState, base_ty WorstState>
base_t llvm::IntegerStateBase< base_ty, BestState, WorstState >::getKnown ( ) const
inline

◆ getWorstState() [1/2]

template<typename base_ty , base_ty BestState, base_ty WorstState>
static constexpr base_t llvm::IntegerStateBase< base_ty, BestState, WorstState >::getWorstState ( )
inlinestaticconstexpr

◆ getWorstState() [2/2]

template<typename base_ty , base_ty BestState, base_ty WorstState>
static constexpr base_t llvm::IntegerStateBase< base_ty, BestState, WorstState >::getWorstState ( const IntegerStateBase< base_ty, BestState, WorstState > &  )
inlinestaticconstexpr

◆ handleNewAssumedValue()

template<typename base_ty , base_ty BestState, base_ty WorstState>
virtual void llvm::IntegerStateBase< base_ty, BestState, WorstState >::handleNewAssumedValue ( base_t  Value)
protectedpure virtual

Handle a new assumed value Value. Subtype dependent.

Referenced by llvm::IntegerStateBase< base_ty, BestState, WorstState >::operator^=().

◆ handleNewKnownValue()

template<typename base_ty , base_ty BestState, base_ty WorstState>
virtual void llvm::IntegerStateBase< base_ty, BestState, WorstState >::handleNewKnownValue ( base_t  Value)
protectedpure virtual

Handle a new known value Value. Subtype dependent.

Referenced by llvm::IntegerStateBase< base_ty, BestState, WorstState >::operator+=().

◆ indicateOptimisticFixpoint()

template<typename base_ty , base_ty BestState, base_ty WorstState>
ChangeStatus llvm::IntegerStateBase< base_ty, BestState, WorstState >::indicateOptimisticFixpoint ( )
inlineoverridevirtual

◆ indicatePessimisticFixpoint()

template<typename base_ty , base_ty BestState, base_ty WorstState>
ChangeStatus llvm::IntegerStateBase< base_ty, BestState, WorstState >::indicatePessimisticFixpoint ( )
inlineoverridevirtual

◆ isAtFixpoint()

template<typename base_ty , base_ty BestState, base_ty WorstState>
bool llvm::IntegerStateBase< base_ty, BestState, WorstState >::isAtFixpoint ( ) const
inlineoverridevirtual

◆ isValidState()

template<typename base_ty , base_ty BestState, base_ty WorstState>
bool llvm::IntegerStateBase< base_ty, BestState, WorstState >::isValidState ( ) const
inlineoverridevirtual

◆ joinAND()

template<typename base_ty , base_ty BestState, base_ty WorstState>
virtual void llvm::IntegerStateBase< base_ty, BestState, WorstState >::joinAND ( base_t  AssumedValue,
base_t  KnownValue 
)
protectedpure virtual

Handle a new assumed value Value. Subtype dependent.

Referenced by llvm::IntegerStateBase< base_ty, BestState, WorstState >::operator&=().

◆ joinOR()

template<typename base_ty , base_ty BestState, base_ty WorstState>
virtual void llvm::IntegerStateBase< base_ty, BestState, WorstState >::joinOR ( base_t  AssumedValue,
base_t  KnownValue 
)
protectedpure virtual

Handle a value Value. Subtype dependent.

Referenced by llvm::IntegerStateBase< base_ty, BestState, WorstState >::operator|=().

◆ operator!=()

template<typename base_ty , base_ty BestState, base_ty WorstState>
bool llvm::IntegerStateBase< base_ty, BestState, WorstState >::operator!= ( const IntegerStateBase< base_t, BestState, WorstState > &  R) const
inline

Inequality for IntegerStateBase.

Definition at line 2516 of file Attributor.h.

◆ operator&=()

template<typename base_ty , base_ty BestState, base_ty WorstState>
void llvm::IntegerStateBase< base_ty, BestState, WorstState >::operator&= ( const IntegerStateBase< base_t, BestState, WorstState > &  R)
inline

◆ operator+=()

template<typename base_ty , base_ty BestState, base_ty WorstState>
void llvm::IntegerStateBase< base_ty, BestState, WorstState >::operator+= ( const IntegerStateBase< base_t, BestState, WorstState > &  R)
inline

"Clamp" this state with R.

The result is subtype dependent but it is intended that information known in either state will be known in this one afterwards.

Definition at line 2530 of file Attributor.h.

References llvm::IntegerStateBase< base_ty, BestState, WorstState >::handleNewKnownValue().

◆ operator==()

template<typename base_ty , base_ty BestState, base_ty WorstState>
bool llvm::IntegerStateBase< base_ty, BestState, WorstState >::operator== ( const IntegerStateBase< base_t, BestState, WorstState > &  R) const
inline

◆ operator^=()

template<typename base_ty , base_ty BestState, base_ty WorstState>
void llvm::IntegerStateBase< base_ty, BestState, WorstState >::operator^= ( const IntegerStateBase< base_t, BestState, WorstState > &  R)
inline

"Clamp" this state with R.

The result is subtype dependent but it is intended that only information assumed in both states will be assumed in this one afterwards.

Definition at line 2523 of file Attributor.h.

References llvm::IntegerStateBase< base_ty, BestState, WorstState >::handleNewAssumedValue().

◆ operator|=()

template<typename base_ty , base_ty BestState, base_ty WorstState>
void llvm::IntegerStateBase< base_ty, BestState, WorstState >::operator|= ( const IntegerStateBase< base_t, BestState, WorstState > &  R)
inline

Member Data Documentation

◆ Assumed

template<typename base_ty , base_ty BestState, base_ty WorstState>
base_t llvm::IntegerStateBase< base_ty, BestState, WorstState >::Assumed = getBestState()
protected

◆ Known

template<typename base_ty , base_ty BestState, base_ty WorstState>
base_t llvm::IntegerStateBase< base_ty, BestState, WorstState >::Known = getWorstState()
protected

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