LLVM 20.0.0git
|
An abstract interface for all nocapture attributes. More...
#include "llvm/Transforms/IPO/Attributor.h"
Public Member Functions | |
AANoCapture (const IRPosition &IRP, Attributor &A) | |
bool | isKnownNoCapture () const |
Return true if we know that the underlying value is not captured in its respective scope. | |
bool | isAssumedNoCapture () const |
Return true if we assume that the underlying value is not captured in its respective scope. | |
bool | isKnownNoCaptureMaybeReturned () const |
Return true if we know that the underlying value is not captured in its respective scope but we allow it to escape through a "return". | |
bool | isAssumedNoCaptureMaybeReturned () const |
Return true if we assume that the underlying value is not captured in its respective scope but we allow it to escape through a "return". | |
const std::string | getName () const override |
See AbstractAttribute::getName() | |
const char * | getIdAddr () const override |
See AbstractAttribute::getIdAddr() | |
Public Member Functions inherited from llvm::IRAttribute< Attribute::NoCapture, StateWrapper< BitIntegerState< uint16_t, 7, 0 >, AbstractAttribute >, AANoCapture > | |
IRAttribute (const IRPosition &IRP) | |
ChangeStatus | manifest (Attributor &A) override |
See AbstractAttribute::manifest(...). | |
Attribute::AttrKind | getAttrKind () const |
Return the kind that identifies the abstract attribute implementation. | |
virtual void | getDeducedAttributes (Attributor &A, LLVMContext &Ctx, SmallVectorImpl< Attribute > &Attrs) const |
Return the deduced attributes in Attrs . | |
Public Member Functions inherited from llvm::StateWrapper< BitIntegerState< uint16_t, 7, 0 >, AbstractAttribute > | |
StateWrapper (const IRPosition &IRP, Ts... Args) | |
StateType & | getState () override |
See AbstractAttribute::getState(...). | |
const StateType & | getState () const override |
See AbstractAttribute::getState(...). | |
Public Member Functions inherited from llvm::AbstractAttribute | |
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 |
Helper functions, for debug purposes only. | |
void | print (Attributor *, raw_ostream &OS) const override |
virtual void | printWithDeps (raw_ostream &OS) const |
void | dump () const |
virtual const std::string | getAsStr (Attributor *A) 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. | |
Public Member Functions inherited from llvm::IRPosition | |
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. | |
bool | isFunctionScope () const |
Return true if this is a function or call site position. | |
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. | |
Value * | getAttrListAnchor () const |
Return the value attributes are attached to. | |
AttributeList | getAttrList () const |
Return the attributes associated with this function or call site scope. | |
void | setAttrList (const AttributeList &AttrList) const |
Update the attributes associated with this function or call site scope. | |
unsigned | getNumArgs () const |
Return the number of arguments associated with this function or call site scope. | |
Value * | getArg (unsigned ArgNo) const |
Return theargument ArgNo associated with this function or call site scope. | |
Kind | getPositionKind () const |
Return the associated position kind. | |
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 | |
} | |
Public Member Functions inherited from llvm::AADepGraphNode | |
virtual | ~AADepGraphNode ()=default |
aaiterator | begin () |
aaiterator | end () |
iterator | child_begin () |
iterator | child_end () |
void | print (raw_ostream &OS) const |
virtual void | print (Attributor *, raw_ostream &OS) const |
DepSetTy & | getDeps () |
Public Member Functions inherited from llvm::BitIntegerState< uint16_t, 7, 0 > | |
BitIntegerState ()=default | |
BitIntegerState (base_t Assumed) | |
bool | isKnown (base_t BitsEncoding=BestState) const |
Return true if the bits set in BitsEncoding are "known bits". | |
bool | isAssumed (base_t BitsEncoding=BestState) const |
Return true if the bits set in BitsEncoding are "assumed bits". | |
BitIntegerState & | addKnownBits (base_t Bits) |
Add the bits in BitsEncoding to the "known bits". | |
BitIntegerState & | removeAssumedBits (base_t BitsEncoding) |
Remove the bits in BitsEncoding from the "assumed bits" if not known. | |
BitIntegerState & | removeKnownBits (base_t BitsEncoding) |
Remove the bits in BitsEncoding from the "known bits". | |
BitIntegerState & | intersectAssumedBits (base_t BitsEncoding) |
Keep only "assumed bits" also set in BitsEncoding but all known ones. | |
Public Member Functions inherited from llvm::IntegerStateBase< base_ty, BestState, WorstState > | |
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 bool | isImpliedByIR (Attributor &A, const IRPosition &IRP, Attribute::AttrKind ImpliedAttributeKind, bool IgnoreSubsumingPositions=false) |
See IRAttribute::isImpliedByIR. | |
static void | determineFunctionCaptureCapabilities (const IRPosition &IRP, const Function &F, BitIntegerState &State) |
Update State according to the capture capabilities of F for position IRP . | |
static bool | isValidIRPositionForInit (Attributor &A, const IRPosition &IRP) |
See AbstractAttribute::isValidIRPositionForInit. | |
static AANoCapture & | 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 AANoCapture. | |
Static Public Member Functions inherited from llvm::IRAttribute< Attribute::NoCapture, StateWrapper< BitIntegerState< uint16_t, 7, 0 >, AbstractAttribute >, AANoCapture > | |
static bool | hasTrivialInitializer () |
Most boolean IRAttribute AAs don't do anything non-trivial in their initializers while non-boolean ones often do. | |
static bool | isImpliedByUndef () |
Return true if the IR attribute(s) associated with this AA are implied for an undef value. | |
static bool | isImpliedByPoison () |
Return true if the IR attribute(s) associated with this AA are implied for an poison value. | |
static bool | isImpliedByIR (Attributor &A, const IRPosition &IRP, Attribute::AttrKind ImpliedAttributeKind=AK, bool IgnoreSubsumingPositions=false) |
Static Public Member Functions inherited from llvm::AbstractAttribute | |
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 bool | hasTrivialInitializer () |
Return false if this AA does anything non-trivial (hence not done by default) in its initializer. | |
static bool | requiresCalleeForCallBase () |
Return true if this AA requires a "callee" (or an associted function) for a call site positon. | |
static bool | requiresNonAsmForCallBase () |
Return true if this AA requires non-asm "callee" for a call site positon. | |
static bool | requiresCallersForArgOrFunction () |
Return true if this AA requires all callees for an argument or function positon. | |
static bool | isValidIRPositionForInit (Attributor &A, const IRPosition &IRP) |
Return false if an AA should not be created for IRP . | |
static bool | isValidIRPositionForUpdate (Attributor &A, const IRPosition &IRP) |
Return false if an AA should not be updated for IRP . | |
Static Public Member Functions inherited from llvm::IRPosition | |
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 Public Member Functions inherited from llvm::IntegerStateBase< base_ty, BestState, WorstState > | |
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 &) |
Static Public Attributes | |
static const char | ID = 0 |
Unique ID (due to the unique address) | |
Static Public Attributes inherited from llvm::IRAttribute< Attribute::NoCapture, StateWrapper< BitIntegerState< uint16_t, 7, 0 >, AbstractAttribute >, AANoCapture > | |
static constexpr Attribute::AttrKind | IRAttributeKind |
Compile time access to the IR attribute kind. | |
Static Public Attributes inherited from llvm::AbstractAttribute | |
static constexpr Attribute::AttrKind | IRAttributeKind = Attribute::None |
Compile time access to the IR attribute kind. | |
Static Public Attributes inherited from llvm::IRPosition | |
static const IRPosition | EmptyKey |
Special DenseMap key values. | |
static const IRPosition | TombstoneKey |
Additional Inherited Members | |
Protected Member Functions inherited from llvm::AbstractAttribute | |
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. | |
Protected Member Functions inherited from llvm::AADepGraphNode | |
operator AbstractAttribute * () | |
Protected Member Functions inherited from llvm::IntegerStateBase< base_ty, BestState, WorstState > | |
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. | |
Static Protected Member Functions inherited from llvm::AADepGraphNode | |
static AADepGraphNode * | DepGetVal (const DepTy &DT) |
static AbstractAttribute * | DepGetValAA (const DepTy &DT) |
Protected Attributes inherited from llvm::AADepGraphNode | |
DepSetTy | Deps |
Set of dependency graph nodes which should be updated if this one is updated. | |
Protected Attributes inherited from llvm::IntegerStateBase< base_ty, BestState, WorstState > | |
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. | |
An abstract interface for all nocapture attributes.
Definition at line 4339 of file Attributor.h.
anonymous enum |
State encoding bits.
A set bit in the state means the property holds. NO_CAPTURE is the best possible state, 0 the worst possible state.
Definition at line 4366 of file Attributor.h.
|
inline |
Definition at line 4344 of file Attributor.h.
|
inlinestatic |
This function should return true if the type of the AA
is AANoCapture.
Definition at line 4411 of file Attributor.h.
References llvm::AbstractAttribute::getIdAddr().
|
static |
Create an abstract attribute view for the position IRP
.
|
static |
Update State
according to the capture capabilities of F
for position IRP
.
Set the NOT_CAPTURED_IN_MEM and NOT_CAPTURED_IN_RET bits in Known
depending on the ability of the function associated with IRP
to capture state in memory and through "returning/throwing", respectively.
Definition at line 5737 of file AttributorAttributes.cpp.
References llvm::BitIntegerState< base_ty, BestState, WorstState >::addKnownBits(), F, llvm::IRPosition::getCalleeArgNo(), llvm::NO_CAPTURE, and llvm::BitIntegerState< base_ty, BestState, WorstState >::removeAssumedBits().
See AbstractAttribute::getIdAddr()
Implements llvm::AbstractAttribute.
Definition at line 4408 of file Attributor.h.
References ID.
|
inlineoverridevirtual |
See AbstractAttribute::getName()
Implements llvm::AbstractAttribute.
Definition at line 4405 of file Attributor.h.
|
inline |
Return true if we assume that the underlying value is not captured in its respective scope.
Definition at line 4387 of file Attributor.h.
References llvm::BitIntegerState< uint16_t, 7, 0 >::isAssumed(), and NO_CAPTURE.
|
inline |
Return true if we assume that the underlying value is not captured in its respective scope but we allow it to escape through a "return".
Definition at line 4397 of file Attributor.h.
References llvm::BitIntegerState< uint16_t, 7, 0 >::isAssumed(), and NO_CAPTURE_MAYBE_RETURNED.
|
static |
See IRAttribute::isImpliedByIR.
--------------------— Variable Capturing ------------------------------—
Definition at line 5688 of file AttributorAttributes.cpp.
References A, llvm::IRPosition::argument(), assert(), F, llvm::Attribute::get(), llvm::IRPosition::getAssociatedArgument(), llvm::IRPosition::getAssociatedFunction(), llvm::IRPosition::getAssociatedValue(), llvm::IRPosition::getPositionKind(), llvm::IRPosition::isArgumentPosition(), and llvm::NO_CAPTURE.
|
inline |
Return true if we know that the underlying value is not captured in its respective scope.
Definition at line 4383 of file Attributor.h.
References llvm::BitIntegerState< uint16_t, 7, 0 >::isKnown(), and NO_CAPTURE.
|
inline |
Return true if we know that the underlying value is not captured in its respective scope but we allow it to escape through a "return".
Definition at line 4391 of file Attributor.h.
References llvm::BitIntegerState< uint16_t, 7, 0 >::isKnown(), and NO_CAPTURE_MAYBE_RETURNED.
|
inlinestatic |
See AbstractAttribute::isValidIRPositionForInit.
Definition at line 4358 of file Attributor.h.
References A, llvm::IRPosition::getAssociatedType(), and llvm::Type::isPtrOrPtrVectorTy().
Unique ID (due to the unique address)
Definition at line 4416 of file Attributor.h.
Referenced by getIdAddr(), and runAttributorLightOnFunctions().