LLVM
15.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. More... | |
bool | isKnownNonNull () const |
Return true if we know that the underlying value is nonnull. More... | |
bool | isAssumedGlobal () const |
Return true if we assume that underlying value is dereferenceable(_or_null) globally. More... | |
bool | isKnownGlobal () const |
Return true if we know that underlying value is dereferenceable(_or_null) globally. More... | |
uint32_t | getAssumedDereferenceableBytes () const |
Return assumed dereferenceable bytes. More... | |
uint32_t | getKnownDereferenceableBytes () const |
Return known dereferenceable bytes. More... | |
const std::string | getName () const override |
See AbstractAttribute::getName() More... | |
const char * | getIdAddr () const override |
See AbstractAttribute::getIdAddr() More... | |
![]() | |
IRAttribute (const IRPosition &IRP) | |
virtual void | initialize (Attributor &A) override |
See AbstractAttribute::initialize(...). More... | |
ChangeStatus | manifest (Attributor &A) override |
See AbstractAttribute::manifest(...). More... | |
Attribute::AttrKind | getAttrKind () const |
Return the kind that identifies the abstract attribute implementation. More... | |
virtual void | getDeducedAttributes (LLVMContext &Ctx, SmallVectorImpl< Attribute > &Attrs) const |
Return the deduced attributes in Attrs . More... | |
![]() | |
StateWrapper (const IRPosition &IRP, Ts... Args) | |
StateType & | getState () override |
See AbstractAttribute::getState(...). More... | |
const StateType & | getState () const override |
See AbstractAttribute::getState(...). More... | |
![]() | |
AbstractAttribute (const IRPosition &IRP) | |
virtual | ~AbstractAttribute ()=default |
Virtual destructor. More... | |
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. More... | |
virtual const StateType & | getState () const =0 |
const IRPosition & | getIRPosition () const |
Return an IR position, see struct IRPosition. More... | |
IRPosition & | getIRPosition () |
void | print (raw_ostream &OS) const override |
Helper functions, for debug purposes only. More... | |
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. More... | |
![]() | |
IRPosition () | |
Default constructor available to create invalid positions implicitly. More... | |
bool | operator== (const IRPosition &RHS) const |
bool | operator!= (const IRPosition &RHS) const |
Value & | getAnchorValue () const |
Return the value this abstract attribute is anchored with. More... | |
Function * | getAssociatedFunction () const |
Return the associated function, if any. More... | |
Argument * | getAssociatedArgument () const |
Return the associated argument, if any. More... | |
bool | isFnInterfaceKind () const |
Return true if the position refers to a function interface, that is the function scope, the function return, or an argument. More... | |
Function * | getAnchorScope () const |
Return the Function surrounding the anchor value. More... | |
Instruction * | getCtxI () const |
Return the context instruction, if any. More... | |
Value & | getAssociatedValue () const |
Return the value this abstract attribute is associated with. More... | |
Type * | getAssociatedType () const |
Return the type this abstract attribute is associated with. More... | |
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. More... | |
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. More... | |
unsigned | getAttrIdx () const |
Return the index in the attribute list for this position. More... | |
Kind | getPositionKind () const |
Return the associated position kind. More... | |
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. More... | |
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. More... | |
void | removeAttrs (ArrayRef< Attribute::AttrKind > AKs) const |
Remove the attribute of kind AKs existing in the IR at this position. More... | |
bool | isAnyCallSitePosition () const |
bool | isArgumentPosition () const |
Return true if the position is an argument or call site argument. More... | |
IRPosition | stripCallBaseContext () const |
Return the same position without the call base context. More... | |
const CallBaseContext * | getCallBaseContext () const |
Get the call base context from the position. More... | |
bool | hasCallBaseContext () const |
Check if the position has any call base context. More... | |
operator void * () const | |
} More... | |
![]() | |
virtual | ~AADepGraphNode ()=default |
aaiterator | begin () |
aaiterator | end () |
iterator | child_begin () |
iterator | child_end () |
TinyPtrVector< DepTy > & | getDeps () |
![]() | |
virtual | ~AbstractState ()=default |
virtual bool | isValidState () const =0 |
Return if this abstract state is in a valid state. More... | |
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. More... | |
virtual ChangeStatus | indicateOptimisticFixpoint ()=0 |
Indicate that the abstract state should converge to the optimistic state. More... | |
virtual ChangeStatus | indicatePessimisticFixpoint ()=0 |
Indicate that the abstract state should converge to the pessimistic state. More... | |
Static Public Member Functions | |
static AADereferenceable & | createForPosition (const IRPosition &IRP, Attributor &A) |
Create an abstract attribute view for the position IRP . More... | |
static bool | classof (const AbstractAttribute *AA) |
This function should return true if the type of the AA is AADereferenceable. More... | |
![]() | |
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. More... | |
![]() | |
static const IRPosition | value (const Value &V, const CallBaseContext *CBContext=nullptr) |
Create a position describing the value of V . More... | |
static const IRPosition | inst (const Instruction &I, const CallBaseContext *CBContext=nullptr) |
Create a position describing the instruction I . More... | |
static const IRPosition | function (const Function &F, const CallBaseContext *CBContext=nullptr) |
Create a position describing the function scope of F . More... | |
static const IRPosition | returned (const Function &F, const CallBaseContext *CBContext=nullptr) |
Create a position describing the returned value of F . More... | |
static const IRPosition | argument (const Argument &Arg, const CallBaseContext *CBContext=nullptr) |
Create a position describing the argument Arg . More... | |
static const IRPosition | callsite_function (const CallBase &CB) |
Create a position describing the function scope of CB . More... | |
static const IRPosition | callsite_returned (const CallBase &CB) |
Create a position describing the returned value of CB . More... | |
static const IRPosition | callsite_argument (const CallBase &CB, unsigned ArgNo) |
Create a position describing the argument of CB at position ArgNo . More... | |
static const IRPosition | callsite_argument (AbstractCallSite ACS, unsigned ArgNo) |
Create a position describing the argument of ACS at position ArgNo . More... | |
static const IRPosition | function_scope (const IRPosition &IRP, const CallBaseContext *CBContext=nullptr) |
Create a position with function scope matching the "context" of IRP . More... | |
![]() | |
static DerefState | getBestState () |
static DerefState | getBestState (const DerefState &) |
static DerefState | getWorstState () |
Return the worst possible representable state. More... | |
static DerefState | getWorstState (const DerefState &) |
Static Public Attributes | |
static const char | ID = 0 |
Unique ID (due to the unique address) More... | |
![]() | |
static const IRPosition | EmptyKey |
Special DenseMap key values. More... | |
static const IRPosition | TombstoneKey |
Additional Inherited Members | |
![]() | |
using | StateType = DerefState |
Provide static access to the type of the state. More... | |
![]() | |
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 | iterator = mapped_iterator< TinyPtrVector< DepTy >::iterator, decltype(&DepGetVal)> |
using | aaiterator = mapped_iterator< TinyPtrVector< DepTy >::iterator, decltype(&DepGetValAA)> |
![]() | |
IncIntegerState | DerefBytesState |
State representing for dereferenceable bytes. More... | |
std::map< int64_t, uint64_t > | AccessedBytesMap |
Map representing for accessed memory offsets and sizes. More... | |
![]() | |
ChangeStatus | update (Attributor &A) |
Hook for the Attributor to trigger an update of the internal state. More... | |
virtual void | trackStatistics () const =0 |
Hook to enable custom statistic tracking, called after manifest that resulted in a change if statistics are enabled. More... | |
virtual ChangeStatus | updateImpl (Attributor &A)=0 |
The actual update/transfer function which has to be implemented by the derived classes. More... | |
![]() | |
operator AbstractAttribute * () | |
![]() | |
static AADepGraphNode * | DepGetVal (DepTy &DT) |
static AbstractAttribute * | DepGetValAA (DepTy &DT) |
![]() | |
TinyPtrVector< DepTy > | Deps |
Set of dependency graph nodes which should be updated if this one is updated. More... | |
An abstract interface for all dereferenceable attribute.
Definition at line 3650 of file Attributor.h.
|
inline |
Definition at line 3653 of file Attributor.h.
|
inlinestatic |
This function should return true if the type of the AA
is AADereferenceable.
Definition at line 3695 of file Attributor.h.
|
static |
Create an abstract attribute view for the position IRP
.
|
inline |
Return assumed dereferenceable bytes.
Definition at line 3674 of file Attributor.h.
References llvm::DerefState::DerefBytesState, and llvm::IntegerStateBase< base_ty, BestState, WorstState >::getAssumed().
|
inlineoverridevirtual |
See AbstractAttribute::getIdAddr()
Implements llvm::AbstractAttribute.
Definition at line 3691 of file Attributor.h.
References ID.
|
inline |
Return known dereferenceable bytes.
Definition at line 3679 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 3688 of file Attributor.h.
|
inline |
Return true if we assume that underlying value is dereferenceable(_or_null) globally.
Definition at line 3667 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 3656 of file Attributor.h.
|
inline |
Return true if we know that underlying value is dereferenceable(_or_null) globally.
Definition at line 3671 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 3661 of file Attributor.h.
|
static |
Unique ID (due to the unique address)
Definition at line 3700 of file Attributor.h.
Referenced by getIdAddr().