llvm::objcarc::ARCInstKind

Equivalence classes of instructions in the ARC Model.

Synopsis

Declared in <llvm/Analysis/ObjCARCInstKind.h>

enum class ARCInstKind : int;

Description

Since we do not have "instructions" to represent ARC concepts in LLVM IR, we instead operate on equivalence classes of instructions.

TODO: This should be split into two enums: a runtime entry point enum (possibly united with the ARCRuntimeEntrypoint class) and an enum that deals with effects of instructions in the ARC model (which would handle the notion of a User or CallOrUser).

Members

NameDescription
Retain objc_retain
RetainRV objc_retainAutoreleasedReturnValue
UnsafeClaimRV objc_unsafeClaimAutoreleasedReturnValue
RetainBlock objc_retainBlock
Release objc_release
Autorelease objc_autorelease
AutoreleaseRV objc_autoreleaseReturnValue
AutoreleasepoolPush objc_autoreleasePoolPush
AutoreleasepoolPop objc_autoreleasePoolPop
NoopCast objc_retainedObject, etc.
FusedRetainAutorelease objc_retainAutorelease
FusedRetainAutoreleaseRV objc_retainAutoreleaseReturnValue
LoadWeakRetained objc_loadWeakRetained (primitive)
StoreWeak objc_storeWeak (primitive)
InitWeak objc_initWeak (derived)
LoadWeak objc_loadWeak (derived)
MoveWeak objc_moveWeak (derived)
CopyWeak objc_copyWeak (derived)
DestroyWeak objc_destroyWeak (derived)
StoreStrong objc_storeStrong (derived)
IntrinsicUser llvm.objc.clang.arc.use
CallOrUser could call objc_release and/or "use" pointers
Call could call objc_release
User could "use" a pointer
None anything that is inert from an ARC perspective.

Non-Member Functions

NameDescription
CanDecrementRefCountReturns false if conservatively we can prove that any instruction mapped to this kind can not decrement ref counts. Returns true otherwise.
CanInterruptRVTest whether the given instruction can autorelease any pointer or cause an autoreleasepool pop.
GetARCInstKindMap V to its ARCInstKind equivalence class.
GetBasicARCInstKindDetermine which objc runtime call instruction class V belongs to.
GetCallSiteClassHelper for GetARCInstKind. Determines what kind of construct CS is.
GetFunctionClassDetermine if F is one of the special known Functions. If it isn't, return ARCInstKind::CallOrUser.
IsAlwaysTailTest if the given class represents instructions which are always safe to mark with the "tail" keyword.
IsAutoreleaseTest if the given class is objc_autorelease or equivalent.
IsForwardingTest if the given class represents instructions which return their argument verbatim.
IsNeverTailTest if the given class represents instructions which are never safe to mark with the "tail" keyword.
IsNoThrowTest if the given class represents instructions which are always safe to mark with the nounwind attribute.
IsNoopOnGlobalTest if the given class represents instructions which do nothing if passed a global variable.
IsNoopOnNullTest if the given class represents instructions which do nothing if passed a null pointer.
IsRetainTest if the given class is objc_retain or equivalent.
IsUserTest if the given class is a kind of user.
getAttachedARCFunctionKindReturn the ARCInstKind of the function on clang_arc_attachedcall.
isRetainOrClaimRVCheck whether the function is retainRV/unsafeClaimRV.