Equivalence classes of instructions in the ARC Model.
Declared in <llvm/Analysis/ObjCARCInstKind.h>
enum class ARCInstKind : int;
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).
| Name | Description |
|---|---|
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. |
| Name | Description |
|---|---|
CanDecrementRefCount | Returns false if conservatively we can prove that any instruction mapped to this kind can not decrement ref counts. Returns true otherwise. |
CanInterruptRV | Test whether the given instruction can autorelease any pointer or cause an autoreleasepool pop. |
GetARCInstKind | Map V to its ARCInstKind equivalence class. |
GetBasicARCInstKind | Determine which objc runtime call instruction class V belongs to. |
GetCallSiteClass | Helper for GetARCInstKind. Determines what kind of construct CS is. |
GetFunctionClass | Determine if F is one of the special known Functions. If it isn't, return ARCInstKind::CallOrUser. |
IsAlwaysTail | Test if the given class represents instructions which are always safe to mark with the "tail" keyword. |
IsAutorelease | Test if the given class is objc_autorelease or equivalent. |
IsForwarding | Test if the given class represents instructions which return their argument verbatim. |
IsNeverTail | Test if the given class represents instructions which are never safe to mark with the "tail" keyword. |
IsNoThrow | Test if the given class represents instructions which are always safe to mark with the nounwind attribute. |
IsNoopOnGlobal | Test if the given class represents instructions which do nothing if passed a global variable. |
IsNoopOnNull | Test if the given class represents instructions which do nothing if passed a null pointer. |
IsRetain | Test if the given class is objc_retain or equivalent. |
IsUser | Test if the given class is a kind of user. |
getAttachedARCFunctionKind | Return the ARCInstKind of the function on clang_arc_attachedcall. |
isRetainOrClaimRV | Check whether the function is retainRV/unsafeClaimRV. |