Go to the documentation of this file.
9 #ifndef LLVM_ANALYSIS_OBJCARCINSTKIND_H
10 #define LLVM_ANALYSIS_OBJCARCINSTKIND_H
105 if (
const CallInst *CI = dyn_cast<CallInst>(V)) {
106 if (
const Function *
F = CI->getCalledFunction())
ARCInstKind GetBasicARCInstKind(const Value *V)
Determine which objc runtime call instruction class V belongs to.
@ User
could "use" a pointer
raw_ostream & operator<<(raw_ostream &OS, const ARCInstKind Class)
This is an optimization pass for GlobalISel generic memory operations.
@ RetainBlock
objc_retainBlock
ARCInstKind GetFunctionClass(const Function *F)
Determine if F is one of the special known Functions.
bool IsNeverTail(ARCInstKind Class)
Test if the given class represents instructions which are never safe to mark with the "tail" keyword.
@ LoadWeak
objc_loadWeak (derived)
@ Call
could call objc_release
@ MoveWeak
objc_moveWeak (derived)
ARCInstKind GetARCInstKind(const Value *V)
Map V to its ARCInstKind equivalence class.
bool IsAutorelease(ARCInstKind Class)
Test if the given class is objc_autorelease or equivalent.
@ Autorelease
objc_autorelease
bool CanInterruptRV(ARCInstKind Class)
Test whether the given instruction can autorelease any pointer or cause an autoreleasepool pop.
@ InitWeak
objc_initWeak (derived)
@ CallOrUser
could call objc_release and/or "use" pointers
bool IsNoopOnGlobal(ARCInstKind Class)
Test if the given class represents instructions which do nothing if passed a global variable.
@ RetainRV
objc_retainAutoreleasedReturnValue
@ NoopCast
objc_retainedObject, etc.
@ CopyWeak
objc_copyWeak (derived)
This class implements an extremely fast bulk output stream that can only output to a stream.
@ IntrinsicUser
llvm.objc.clang.arc.use
bool IsAlwaysTail(ARCInstKind Class)
Test if the given class represents instructions which are always safe to mark with the "tail" keyword...
@ AutoreleasepoolPop
objc_autoreleasePoolPop
bool IsNoThrow(ARCInstKind Class)
Test if the given class represents instructions which are always safe to mark with the nounwind attri...
@ FusedRetainAutorelease
objc_retainAutorelease
bool IsRetain(ARCInstKind Class)
Test if the given class is objc_retain or equivalent.
@ AutoreleasepoolPush
objc_autoreleasePoolPush
@ StoreWeak
objc_storeWeak (primitive)
@ FusedRetainAutoreleaseRV
objc_retainAutoreleaseReturnValue
@ DestroyWeak
objc_destroyWeak (derived)
@ StoreStrong
objc_storeStrong (derived)
bool CanDecrementRefCount(ARCInstKind Kind)
Returns false if conservatively we can prove that any instruction mapped to this kind can not decreme...
@ None
anything that is inert from an ARC perspective.
This class represents a function call, abstracting a target machine's calling convention.
LLVM Value Representation.
bool IsForwarding(ARCInstKind Class)
Test if the given class represents instructions which return their argument verbatim.
bool IsNoopOnNull(ARCInstKind Class)
Test if the given class represents instructions which do nothing if passed a null pointer.
@ LoadWeakRetained
objc_loadWeakRetained (primitive)
bool IsUser(ARCInstKind Class)
Test if the given class is a kind of user.
@ UnsafeClaimRV
objc_unsafeClaimAutoreleasedReturnValue
@ AutoreleaseRV
objc_autoreleaseReturnValue