LLVM 17.0.0git
|
An abstract interface for all dereferenceable attribute. More...
#include "llvm/Transforms/IPO/Attributor.h"
Public Member Functions | |
AADereferenceable (const IRPosition &IRP, Attributor &A) | |
bool | isAssumedNonNull () const |
Return true if we assume that the underlying value is nonnull. | |
bool | isKnownNonNull () const |
Return true if we know that the underlying value is nonnull. | |
bool | isAssumedGlobal () const |
Return true if we assume that underlying value is dereferenceable(_or_null) globally. | |
bool | isKnownGlobal () const |
Return true if we know that underlying value is dereferenceable(_or_null) globally. | |
uint32_t | getAssumedDereferenceableBytes () const |
Return assumed dereferenceable bytes. | |
uint32_t | getKnownDereferenceableBytes () const |
Return known dereferenceable bytes. | |
const std::string | getName () const override |
See AbstractAttribute::getName() | |
const char * | getIdAddr () const override |
See AbstractAttribute::getIdAddr() | |
![]() | |
IRAttribute (const IRPosition &IRP) | |
void | initialize (Attributor &A) override |
See AbstractAttribute::initialize(...). | |
ChangeStatus | manifest (Attributor &A) override |
See AbstractAttribute::manifest(...). | |
Attribute::AttrKind | getAttrKind () const |
Return the kind that identifies the abstract attribute implementation. | |
virtual void | getDeducedAttributes (LLVMContext &Ctx, SmallVectorImpl< Attribute > &Attrs) const |
Return the deduced attributes in Attrs . | |
![]() | |
StateWrapper (const IRPosition &IRP, Ts... Args) | |
StateType & | getState () override |
See AbstractAttribute::getState(...). | |
const StateType & | getState () const override |
See AbstractAttribute::getState(...). | |
![]() | |
AbstractAttribute (const IRPosition &IRP) | |
virtual | ~AbstractAttribute ()=default |
Virtual destructor. | |
virtual void | initialize (Attributor &A) |
Initialize the state with the information in the Attributor A . | |
virtual bool | isQueryAA () const |
A query AA is always scheduled as long as we do updates because it does lazy computation that cannot be determined to be done from the outside. | |
virtual StateType & | getState ()=0 |
Return the internal abstract state for inspection. | |
virtual const StateType & | getState () const =0 |
const IRPosition & | getIRPosition () const |
Return an IR position, see struct IRPosition. | |
IRPosition & | getIRPosition () |
void | print (raw_ostream &OS) const override |
Helper functions, for debug purposes only. | |
virtual void | printWithDeps (raw_ostream &OS) const |
void | dump () const |
virtual const std::string | getAsStr () const =0 |
This function should return the "summarized" assumed state as string. | |
virtual const std::string | getName () const =0 |
This function should return the name of the AbstractAttribute. | |
virtual const char * | getIdAddr () const =0 |
This function should return the address of the ID of the AbstractAttribute. | |
![]() | |
IRPosition () | |
Default constructor available to create invalid positions implicitly. | |
bool | operator== (const IRPosition &RHS) const |
bool | operator!= (const IRPosition &RHS) const |
Value & | getAnchorValue () const |
Return the value this abstract attribute is anchored with. | |
Function * | getAssociatedFunction () const |
Return the associated function, if any. | |
Argument * | getAssociatedArgument () const |
Return the associated argument, if any. | |
bool | isFnInterfaceKind () const |
Return true if the position refers to a function interface, that is the function scope, the function return, or an argument. | |
Function * | getAnchorScope () const |
Return the Function surrounding the anchor value. | |
Instruction * | getCtxI () const |
Return the context instruction, if any. | |
Value & | getAssociatedValue () const |
Return the value this abstract attribute is associated with. | |
Type * | getAssociatedType () const |
Return the type this abstract attribute is associated with. | |
int | getCalleeArgNo () const |
Return the callee argument number of the associated value if it is an argument or call site argument, otherwise a negative value. | |
int | getCallSiteArgNo () const |
Return the call site argument number of the associated value if it is an argument or call site argument, otherwise a negative value. | |
unsigned | getAttrIdx () const |
Return the index in the attribute list for this position. | |
Kind | getPositionKind () const |
Return the associated position kind. | |
bool | hasAttr (ArrayRef< Attribute::AttrKind > AKs, bool IgnoreSubsumingPositions=false, Attributor *A=nullptr) const |
TODO: Figure out if the attribute related helper functions should live here or somewhere else. | |
void | getAttrs (ArrayRef< Attribute::AttrKind > AKs, SmallVectorImpl< Attribute > &Attrs, bool IgnoreSubsumingPositions=false, Attributor *A=nullptr) const |
Return the attributes of any kind in AKs existing in the IR at a position that will affect this one. | |
void | removeAttrs (ArrayRef< Attribute::AttrKind > AKs) const |
Remove the attribute of kind AKs existing in the IR at this position. | |
bool | isAnyCallSitePosition () const |
bool | isArgumentPosition () const |
Return true if the position is an argument or call site argument. | |
IRPosition | stripCallBaseContext () const |
Return the same position without the call base context. | |
const CallBaseContext * | getCallBaseContext () const |
Get the call base context from the position. | |
bool | hasCallBaseContext () const |
Check if the position has any call base context. | |
operator void * () const | |
} | |
![]() | |
virtual | ~AADepGraphNode ()=default |
aaiterator | begin () |
aaiterator | end () |
iterator | child_begin () |
iterator | child_end () |
virtual void | print (raw_ostream &OS) const |
DepSetTy & | getDeps () |
![]() | |
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 AADereferenceable & | createForPosition (const IRPosition &IRP, Attributor &A) |
Create an abstract attribute view for the position IRP . | |
static bool | classof (const AbstractAttribute *AA) |
This function should return true if the type of the AA is AADereferenceable. | |
![]() | |
static bool | classof (const AADepGraphNode *DGN) |
This function is used to identify if an DGN is of type AbstractAttribute so that the dyn_cast and cast can use such information to cast an AADepGraphNode to an AbstractAttribute. | |
![]() | |
static const IRPosition | value (const Value &V, const CallBaseContext *CBContext=nullptr) |
Create a position describing the value of V . | |
static const IRPosition | inst (const Instruction &I, const CallBaseContext *CBContext=nullptr) |
Create a position describing the instruction I . | |
static const IRPosition | function (const Function &F, const CallBaseContext *CBContext=nullptr) |
Create a position describing the function scope of F . | |
static const IRPosition | returned (const Function &F, const CallBaseContext *CBContext=nullptr) |
Create a position describing the returned value of F . | |
static const IRPosition | argument (const Argument &Arg, const CallBaseContext *CBContext=nullptr) |
Create a position describing the argument Arg . | |
static const IRPosition | callsite_function (const CallBase &CB) |
Create a position describing the function scope of CB . | |
static const IRPosition | callsite_returned (const CallBase &CB) |
Create a position describing the returned value of CB . | |
static const IRPosition | callsite_argument (const CallBase &CB, unsigned ArgNo) |
Create a position describing the argument of CB at position ArgNo . | |
static const IRPosition | callsite_argument (AbstractCallSite ACS, unsigned ArgNo) |
Create a position describing the argument of ACS at position ArgNo . | |
static const IRPosition | function_scope (const IRPosition &IRP, const CallBaseContext *CBContext=nullptr) |
Create a position with function scope matching the "context" of IRP . | |
![]() | |
static DerefState | getBestState () |
static DerefState | getBestState (const DerefState &) |
static DerefState | getWorstState () |
Return the worst possible representable state. | |
static DerefState | getWorstState (const DerefState &) |
Static Public Attributes | |
static const char | ID = 0 |
Unique ID (due to the unique address) | |
![]() | |
static const IRPosition | EmptyKey |
Special DenseMap key values. | |
static const IRPosition | TombstoneKey |
Additional Inherited Members | |
![]() | |
using | StateType = DerefState |
Provide static access to the type of the state. | |
![]() | |
using | StateType = AbstractState |
![]() | |
enum | Kind : char { IRP_INVALID , IRP_FLOAT , IRP_RETURNED , IRP_CALL_SITE_RETURNED , IRP_FUNCTION , IRP_CALL_SITE , IRP_ARGUMENT , IRP_CALL_SITE_ARGUMENT } |
The positions we distinguish in the IR. More... | |
using | CallBaseContext = CallBase |
![]() | |
using | DepTy = PointerIntPair< AADepGraphNode *, 1 > |
using | DepSetTy = SmallSetVector< DepTy, 2 > |
using | iterator = mapped_iterator< DepSetTy::iterator, decltype(&DepGetVal)> |
using | aaiterator = mapped_iterator< DepSetTy::iterator, decltype(&DepGetValAA)> |
![]() | |
IncIntegerState | DerefBytesState |
State representing for dereferenceable bytes. | |
std::map< int64_t, uint64_t > | AccessedBytesMap |
Map representing for accessed memory offsets and sizes. | |
![]() | |
ChangeStatus | update (Attributor &A) |
Hook for the Attributor to trigger an update of the internal state. | |
virtual ChangeStatus | manifest (Attributor &A) |
Hook for the Attributor to trigger the manifestation of the information represented by the abstract attribute in the LLVM-IR. | |
virtual void | trackStatistics () const =0 |
Hook to enable custom statistic tracking, called after manifest that resulted in a change if statistics are enabled. | |
virtual ChangeStatus | updateImpl (Attributor &A)=0 |
The actual update/transfer function which has to be implemented by the derived classes. | |
![]() | |
operator AbstractAttribute * () | |
![]() | |
static AADepGraphNode * | DepGetVal (const DepTy &DT) |
static AbstractAttribute * | DepGetValAA (const DepTy &DT) |
![]() | |
DepSetTy | Deps |
Set of dependency graph nodes which should be updated if this one is updated. | |
An abstract interface for all dereferenceable attribute.
Definition at line 3850 of file Attributor.h.
|
inline |
Definition at line 3853 of file Attributor.h.
|
inlinestatic |
This function should return true if the type of the AA
is AADereferenceable.
Definition at line 3895 of file Attributor.h.
References llvm::AbstractAttribute::getIdAddr().
|
static |
Create an abstract attribute view for the position IRP
.
|
inline |
Return assumed dereferenceable bytes.
Definition at line 3874 of file Attributor.h.
References llvm::DerefState::DerefBytesState, and llvm::IntegerStateBase< base_ty, BestState, WorstState >::getAssumed().
See AbstractAttribute::getIdAddr()
Implements llvm::AbstractAttribute.
Definition at line 3891 of file Attributor.h.
References ID.
|
inline |
Return known dereferenceable bytes.
Definition at line 3879 of file Attributor.h.
References llvm::DerefState::DerefBytesState, and llvm::IntegerStateBase< base_ty, BestState, WorstState >::getKnown().
|
inlineoverridevirtual |
See AbstractAttribute::getName()
Implements llvm::AbstractAttribute.
Definition at line 3888 of file Attributor.h.
|
inline |
Return true if we assume that underlying value is dereferenceable(_or_null) globally.
Definition at line 3867 of file Attributor.h.
References llvm::IntegerStateBase< base_ty, BestState, WorstState >::getAssumed().
|
inline |
Return true if we assume that the underlying value is nonnull.
Definition at line 3856 of file Attributor.h.
|
inline |
Return true if we know that underlying value is dereferenceable(_or_null) globally.
Definition at line 3871 of file Attributor.h.
References llvm::IntegerStateBase< base_ty, BestState, WorstState >::getKnown().
|
inline |
Return true if we know that the underlying value is nonnull.
Definition at line 3861 of file Attributor.h.
Unique ID (due to the unique address)
Definition at line 3900 of file Attributor.h.
Referenced by getIdAddr().