LLVM
8.0.1
|
Classes | |
class | ARCMDKindCache |
A cache of MDKinds used by various ARC optimizations. More... | |
class | ARCRuntimeEntryPoints |
Declarations for ObjC runtime functions and constants. More... | |
struct | BottomUpPtrState |
class | ObjCARCAA |
Analysis pass providing a never-invalidated alias analysis result. More... | |
class | ObjCARCAAResult |
This is a simple alias analysis implementation that uses knowledge of ARC constructs to answer queries. More... | |
class | ObjCARCAAWrapperPass |
Legacy wrapper pass to provide the ObjCARCAAResult object. More... | |
class | ProvenanceAnalysis |
This is similar to BasicAliasAnalysis, and it uses many of the same techniques, except it uses special ObjC-specific reasoning about pointer relationships. More... | |
class | PtrState |
This class summarizes several per-pointer runtime properties which are propagated through the flow graph. More... | |
struct | RRInfo |
Unidirectional information about either a retain-decrement-use-release sequence or release-use-decrement-retain reverse sequence. More... | |
struct | TopDownPtrState |
Functions | |
bool | ModuleHasARC (const Module &M) |
Test if the given module looks interesting to run ARC optimization on. More... | |
const Value * | GetUnderlyingObjCPtr (const Value *V, const DataLayout &DL) |
This is a wrapper around getUnderlyingObject which also knows how to look through objc_retain and objc_autorelease calls, which we know to return their argument verbatim. More... | |
const Value * | GetUnderlyingObjCPtrCached (const Value *V, const DataLayout &DL, DenseMap< const Value *, WeakTrackingVH > &Cache) |
A wrapper for GetUnderlyingObjCPtr used for results memoization. More... | |
const Value * | GetRCIdentityRoot (const Value *V) |
The RCIdentity root of a value V is a dominating value U for which retaining or releasing U is equivalent to retaining or releasing V. More... | |
Value * | GetRCIdentityRoot (Value *V) |
Helper which calls const Value *GetRCIdentityRoot(const Value *V) and just casts away the const of the result. More... | |
Value * | GetArgRCIdentityRoot (Value *Inst) |
Assuming the given instruction is one of the special calls such as objc_retain or objc_release, return the RCIdentity root of the argument of the call. More... | |
bool | IsNullOrUndef (const Value *V) |
bool | IsNoopInstruction (const Instruction *I) |
bool | IsPotentialRetainableObjPtr (const Value *Op) |
Test whether the given value is possible a retainable object pointer. More... | |
bool | IsPotentialRetainableObjPtr (const Value *Op, AliasAnalysis &AA) |
ARCInstKind | GetCallSiteClass (ImmutableCallSite CS) |
Helper for GetARCInstKind. More... | |
bool | IsObjCIdentifiedObject (const Value *V) |
Return true if this value refers to a distinct and identifiable object. More... | |
raw_ostream & | operator<< (raw_ostream &OS, const ARCInstKind Class) |
bool | IsUser (ARCInstKind Class) |
Test if the given class is a kind of user. More... | |
bool | IsRetain (ARCInstKind Class) |
Test if the given class is objc_retain or equivalent. More... | |
bool | IsAutorelease (ARCInstKind Class) |
Test if the given class is objc_autorelease or equivalent. More... | |
bool | IsForwarding (ARCInstKind Class) |
Test if the given class represents instructions which return their argument verbatim. More... | |
bool | IsNoopOnNull (ARCInstKind Class) |
Test if the given class represents instructions which do nothing if passed a null pointer. More... | |
bool | IsAlwaysTail (ARCInstKind Class) |
Test if the given class represents instructions which are always safe to mark with the "tail" keyword. More... | |
bool | IsNeverTail (ARCInstKind Class) |
Test if the given class represents instructions which are never safe to mark with the "tail" keyword. More... | |
bool | IsNoThrow (ARCInstKind Class) |
Test if the given class represents instructions which are always safe to mark with the nounwind attribute. More... | |
bool | CanInterruptRV (ARCInstKind Class) |
Test whether the given instruction can autorelease any pointer or cause an autoreleasepool pop. More... | |
ARCInstKind | GetFunctionClass (const Function *F) |
Determine if F is one of the special known Functions. More... | |
ARCInstKind | GetBasicARCInstKind (const Value *V) |
Determine which objc runtime call instruction class V belongs to. More... | |
ARCInstKind | GetARCInstKind (const Value *V) |
Map V to its ARCInstKind equivalence class. More... | |
bool | CanDecrementRefCount (ARCInstKind Kind) |
Returns false if conservatively we can prove that any instruction mapped to this kind can not decrement ref counts. More... | |
void | FindDependencies (DependenceKind Flavor, const Value *Arg, BasicBlock *StartBB, Instruction *StartInst, SmallPtrSetImpl< Instruction *> &DependingInstructions, SmallPtrSetImpl< const BasicBlock *> &Visited, ProvenanceAnalysis &PA) |
Walk up the CFG from StartPos (which is in StartBB) and find local and non-local dependencies on Arg. More... | |
bool | Depends (DependenceKind Flavor, Instruction *Inst, const Value *Arg, ProvenanceAnalysis &PA) |
Test if there can be dependencies on Inst through Arg. More... | |
bool | CanUse (const Instruction *Inst, const Value *Ptr, ProvenanceAnalysis &PA, ARCInstKind Class) |
Test whether the given instruction can "use" the given pointer's object in a way that requires the reference count to be positive. More... | |
bool | CanAlterRefCount (const Instruction *Inst, const Value *Ptr, ProvenanceAnalysis &PA, ARCInstKind Class) |
Test whether the given instruction can result in a reference count modification (positive or negative) for the pointer's object. More... | |
bool | CanDecrementRefCount (const Instruction *Inst, const Value *Ptr, ProvenanceAnalysis &PA, ARCInstKind Class) |
Returns true if we can not conservatively prove that Inst can not decrement the reference count of Ptr. More... | |
static bool | CanDecrementRefCount (const Instruction *Inst, const Value *Ptr, ProvenanceAnalysis &PA) |
static void | EraseInstruction (Instruction *CI) |
Erase the given instruction. More... | |
static const Instruction * | getreturnRVOperand (const Instruction &Inst, ARCInstKind Class) |
If Inst is a ReturnRV and its operand is a call or invoke, return the operand. More... | |
template<class PHINodeTy , class VectorTy > | |
void | getEquivalentPHIs (PHINodeTy &PN, VectorTy &PHIList) |
Return the list of PHI nodes that are equivalent to PN. More... | |
raw_ostream & | operator<< (raw_ostream &OS, const Sequence S) LLVM_ATTRIBUTE_UNUSED |
Variables | |
bool | EnableARCOpts |
A handy option to enable/disable all ARC Optimizations. More... | |
|
strong |
Equivalence classes of instructions in the ARC Model.
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).
Definition at line 31 of file ObjCARCInstKind.h.
|
strong |
Enumerator | |
---|---|
ImpreciseRelease | |
CopyOnEscape | |
NoObjCARCExceptions |
Definition at line 249 of file ObjCARCAnalysisUtils.h.
|
strong |
Enumerator | |
---|---|
AutoreleaseRV | |
Release | |
Retain | |
RetainBlock | |
Autorelease | |
StoreStrong | |
RetainRV | |
RetainAutorelease | |
RetainAutoreleaseRV |
Definition at line 42 of file ARCRuntimeEntryPoints.h.
Defines different dependence kinds among various ARC constructs.
There are several kinds of dependence-like concepts in use here.
Definition at line 45 of file DependencyAnalysis.h.
A sequence of states that a pointer may go through in which an objc_retain and objc_release are actually needed.
Definition at line 41 of file PtrState.h.
bool llvm::objcarc::CanAlterRefCount | ( | const Instruction * | Inst, |
const Value * | Ptr, | ||
ProvenanceAnalysis & | PA, | ||
ARCInstKind | Class | ||
) |
Test whether the given instruction can result in a reference count modification (positive or negative) for the pointer's object.
Definition at line 35 of file DependencyAnalysis.cpp.
References Autorelease, AutoreleaseRV, llvm::objcarc::ProvenanceAnalysis::getAA(), llvm::Module::getDataLayout(), llvm::AAResults::getModRefBehavior(), llvm::Instruction::getModule(), IntrinsicUser, IsPotentialRetainableObjPtr(), llvm::AAResults::onlyAccessesArgPointees(), llvm::AAResults::onlyReadsMemory(), llvm::objcarc::ProvenanceAnalysis::related(), and User.
Referenced by CanDecrementRefCount(), Depends(), llvm::objcarc::BottomUpPtrState::HandlePotentialAlterRefCount(), and llvm::objcarc::TopDownPtrState::HandlePotentialAlterRefCount().
bool llvm::objcarc::CanDecrementRefCount | ( | const Instruction * | Inst, |
const Value * | Ptr, | ||
ProvenanceAnalysis & | PA, | ||
ARCInstKind | Class | ||
) |
Returns true if we can not conservatively prove that Inst can not decrement the reference count of Ptr.
Returns false if we can.
Definition at line 68 of file DependencyAnalysis.cpp.
References CanAlterRefCount(), and CanDecrementRefCount().
|
inlinestatic |
Definition at line 80 of file DependencyAnalysis.h.
References CanDecrementRefCount(), and GetARCInstKind().
bool llvm::objcarc::CanDecrementRefCount | ( | ARCInstKind | Kind | ) |
Returns false if conservatively we can prove that any instruction mapped to this kind can not decrement ref counts.
Returns true otherwise.
Definition at line 634 of file ObjCARCInstKind.cpp.
References Autorelease, AutoreleasepoolPop, AutoreleasepoolPush, AutoreleaseRV, Call, CallOrUser, ClaimRV, CopyWeak, DestroyWeak, FusedRetainAutorelease, FusedRetainAutoreleaseRV, InitWeak, IntrinsicUser, llvm_unreachable, LoadWeak, LoadWeakRetained, MoveWeak, None, NoopCast, Release, Retain, RetainBlock, RetainRV, StoreStrong, StoreWeak, and User.
Referenced by CanDecrementRefCount(), findRetainForStoreStrongContraction(), and GetBasicARCInstKind().
bool llvm::objcarc::CanInterruptRV | ( | ARCInstKind | Class | ) |
Test whether the given instruction can autorelease any pointer or cause an autoreleasepool pop.
This means that it could interrupt the RV optimization.
Definition at line 601 of file ObjCARCInstKind.cpp.
References Autorelease, AutoreleasepoolPop, AutoreleasepoolPush, AutoreleaseRV, Call, CallOrUser, ClaimRV, CopyWeak, DestroyWeak, FusedRetainAutorelease, FusedRetainAutoreleaseRV, InitWeak, IntrinsicUser, llvm_unreachable, LoadWeak, LoadWeakRetained, MoveWeak, None, NoopCast, Release, Retain, RetainBlock, RetainRV, StoreStrong, StoreWeak, and User.
Referenced by Depends().
bool llvm::objcarc::CanUse | ( | const Instruction * | Inst, |
const Value * | Ptr, | ||
ProvenanceAnalysis & | PA, | ||
ARCInstKind | Class | ||
) |
Test whether the given instruction can "use" the given pointer's object in a way that requires the reference count to be positive.
Definition at line 82 of file DependencyAnalysis.cpp.
References Call, llvm::objcarc::ProvenanceAnalysis::getAA(), llvm::Module::getDataLayout(), llvm::Instruction::getModule(), GetUnderlyingObjCPtr(), IsPotentialRetainableObjPtr(), llvm::User::op_begin(), llvm::User::op_end(), llvm::objcarc::ProvenanceAnalysis::related(), and SI.
Referenced by Depends(), findSafeStoreForStoreStrongContraction(), llvm::objcarc::BottomUpPtrState::HandlePotentialUse(), and llvm::objcarc::TopDownPtrState::HandlePotentialUse().
bool llvm::objcarc::Depends | ( | DependenceKind | Flavor, |
Instruction * | Inst, | ||
const Value * | Arg, | ||
ProvenanceAnalysis & | PA | ||
) |
Test if there can be dependencies on Inst through Arg.
This function only tests dependencies relevant for removing pairs of calls.
Definition at line 132 of file DependencyAnalysis.cpp.
References Arg, AutoreleasePoolBoundary, AutoreleasepoolPop, AutoreleasepoolPush, CanAlterRefCount(), CanChangeRetainCount, CanInterruptRV(), CanUse(), GetARCInstKind(), GetArgRCIdentityRoot(), GetBasicARCInstKind(), llvm_unreachable, NeedsPositiveRetainCount, None, Retain, RetainAutoreleaseDep, RetainAutoreleaseRVDep, RetainRV, and RetainRVDep.
Referenced by FindDependencies().
|
inlinestatic |
Erase the given instruction.
Many ObjC calls return their argument verbatim, so if it's such a call and the return value has users, replace them with the argument value.
Definition at line 52 of file ObjCARC.h.
References assert(), llvm::Instruction::eraseFromParent(), GetBasicARCInstKind(), IsForwarding(), IsNoopOnNull(), IsNullOrUndef(), llvm::RecursivelyDeleteTriviallyDeadInstructions(), llvm::Value::replaceAllUsesWith(), llvm::Value::stripPointerCasts(), and llvm::Value::use_empty().
Referenced by ComputePostOrders(), createCallInst(), llvm::createObjCARCOptPass(), and FindPredecessorAutoreleaseWithSafePath().
void llvm::objcarc::FindDependencies | ( | DependenceKind | Flavor, |
const Value * | Arg, | ||
BasicBlock * | StartBB, | ||
Instruction * | StartInst, | ||
SmallPtrSetImpl< Instruction *> & | DependingInsts, | ||
SmallPtrSetImpl< const BasicBlock *> & | Visited, | ||
ProvenanceAnalysis & | PA | ||
) |
Walk up the CFG from StartPos (which is in StartBB) and find local and non-local dependencies on Arg.
TODO: Cache results?
Definition at line 220 of file DependencyAnalysis.cpp.
References llvm::BasicBlock::begin(), Depends(), llvm::SmallVectorBase::empty(), llvm::BasicBlock::end(), llvm::ilist_node_impl< OptionsT >::getIterator(), llvm::SmallPtrSetImpl< PtrType >::insert(), llvm::SmallVectorImpl< T >::pop_back_val(), llvm::SmallVectorTemplateBase< T >::push_back(), and llvm::successors().
Referenced by llvm::createObjCARCOptPass(), FindPredecessorAutoreleaseWithSafePath(), FindPredecessorRetainWithSafePath(), and HasSafePathToPredecessorCall().
ARCInstKind llvm::objcarc::GetARCInstKind | ( | const Value * | V | ) |
Map V to its ARCInstKind equivalence class.
Determine what kind of construct V is.
Definition at line 214 of file ObjCARCInstKind.cpp.
References llvm::MCID::Add, Call, CallOrUser, F(), llvm::CallBase::getCalledFunction(), GetCallSiteClass(), GetFunctionClass(), I, isInertIntrinsic(), IsPotentialRetainableObjPtr(), isUseOnlyIntrinsic(), None, llvm::MipsISD::Ret, llvm::MCID::Select, and User.
Referenced by CanDecrementRefCount(), CheckForCanReleaseCFGHazard(), ComputePostOrders(), Depends(), and GetBasicARCInstKind().
Assuming the given instruction is one of the special calls such as objc_retain or objc_release, return the RCIdentity root of the argument of the call.
Definition at line 138 of file ObjCARCAnalysisUtils.h.
References GetRCIdentityRoot().
Referenced by CheckForCanReleaseCFGHazard(), ComputePostOrders(), createCallInst(), llvm::createObjCARCOptPass(), Depends(), FindPredecessorAutoreleaseWithSafePath(), FindPredecessorRetainWithSafePath(), and findRetainForStoreStrongContraction().
|
inline |
Determine which objc runtime call instruction class V belongs to.
This is similar to GetARCInstKind except that it only detects objc runtime calls. This allows it to be faster.
Definition at line 103 of file ObjCARCInstKind.h.
References CallOrUser, CanDecrementRefCount(), GetARCInstKind(), GetFunctionClass(), Kind, and User.
Referenced by ComputePostOrders(), createCallInst(), llvm::createObjCARCOptPass(), Depends(), EraseInstruction(), FindPredecessorAutoreleaseWithSafePath(), FindPredecessorRetainWithSafePath(), findRetainForStoreStrongContraction(), findSafeStoreForStoreStrongContraction(), FindSingleUseIdentifiedObject(), llvm::objcarc::ObjCARCAAResult::getModRefInfo(), GetRCIdentityRoot(), GetUnderlyingObjCPtr(), llvm::objcarc::BottomUpPtrState::HandlePotentialUse(), HasSafePathToPredecessorCall(), and INITIALIZE_PASS().
|
inline |
Helper for GetARCInstKind.
Determines what kind of construct CS is.
Definition at line 199 of file ObjCARCAnalysisUtils.h.
References llvm::CallSiteBase< FunTy, BBTy, ValTy, UserTy, UseTy, InstrTy, CallTy, InvokeTy, IterTy >::arg_begin(), llvm::CallSiteBase< FunTy, BBTy, ValTy, UserTy, UseTy, InstrTy, CallTy, InvokeTy, IterTy >::arg_end(), Call, CallOrUser, E, I, IsPotentialRetainableObjPtr(), None, llvm::CallSiteBase< FunTy, BBTy, ValTy, UserTy, UseTy, InstrTy, CallTy, InvokeTy, IterTy >::onlyReadsMemory(), and User.
Referenced by GetARCInstKind().
void llvm::objcarc::getEquivalentPHIs | ( | PHINodeTy & | PN, |
VectorTy & | PHIList | ||
) |
Return the list of PHI nodes that are equivalent to PN.
Definition at line 87 of file ObjCARC.h.
Referenced by createCallInst(), and llvm::createObjCARCOptPass().
ARCInstKind llvm::objcarc::GetFunctionClass | ( | const Function * | F | ) |
Determine if F is one of the special known Functions.
If it isn't, return ARCInstKind::CallOrUser.
Definition at line 87 of file ObjCARCInstKind.cpp.
References Autorelease, AutoreleasepoolPop, AutoreleasepoolPush, AutoreleaseRV, CallOrUser, ClaimRV, CopyWeak, DestroyWeak, FusedRetainAutorelease, FusedRetainAutoreleaseRV, llvm::Function::getIntrinsicID(), InitWeak, IntrinsicUser, LoadWeak, LoadWeakRetained, MoveWeak, None, NoopCast, llvm::Intrinsic::objc_arc_annotation_bottomup_bbend, llvm::Intrinsic::objc_arc_annotation_bottomup_bbstart, llvm::Intrinsic::objc_arc_annotation_topdown_bbend, llvm::Intrinsic::objc_arc_annotation_topdown_bbstart, llvm::Intrinsic::objc_autorelease, llvm::Intrinsic::objc_autoreleasePoolPop, llvm::Intrinsic::objc_autoreleasePoolPush, llvm::Intrinsic::objc_autoreleaseReturnValue, llvm::Intrinsic::objc_clang_arc_use, llvm::Intrinsic::objc_copyWeak, llvm::Intrinsic::objc_destroyWeak, llvm::Intrinsic::objc_initWeak, llvm::Intrinsic::objc_loadWeak, llvm::Intrinsic::objc_loadWeakRetained, llvm::Intrinsic::objc_moveWeak, llvm::Intrinsic::objc_release, llvm::Intrinsic::objc_retain, llvm::Intrinsic::objc_retain_autorelease, llvm::Intrinsic::objc_retainAutorelease, llvm::Intrinsic::objc_retainAutoreleasedReturnValue, llvm::Intrinsic::objc_retainAutoreleaseReturnValue, llvm::Intrinsic::objc_retainBlock, llvm::Intrinsic::objc_retainedObject, llvm::Intrinsic::objc_storeStrong, llvm::Intrinsic::objc_storeWeak, llvm::Intrinsic::objc_sync_enter, llvm::Intrinsic::objc_sync_exit, llvm::Intrinsic::objc_unretainedObject, llvm::Intrinsic::objc_unretainedPointer, llvm::Intrinsic::objc_unsafeClaimAutoreleasedReturnValue, Release, Retain, RetainBlock, RetainRV, StoreStrong, StoreWeak, and User.
Referenced by GetARCInstKind(), GetBasicARCInstKind(), and llvm::objcarc::ObjCARCAAResult::getModRefBehavior().
The RCIdentity root of a value V
is a dominating value U for which retaining or releasing U is equivalent to retaining or releasing V.
In other words, ARC operations on V
are equivalent to ARC operations on U
.
We use this in the ARC optimizer to make it easier to match up ARC operations by always mapping ARC operations to RCIdentityRoots instead of pointers themselves.
The two ways that we see RCIdentical values in ObjC are via:
Thus this function strips off pointer casts and forwarding calls. NOTE This implies that two RCIdentical values must alias.
Definition at line 117 of file ObjCARCAnalysisUtils.h.
References GetBasicARCInstKind(), IsForwarding(), and llvm::Value::stripPointerCasts().
Referenced by llvm::objcarc::ObjCARCAAResult::alias(), ComputePostOrders(), createCallInst(), llvm::createObjCARCOptPass(), FindPredecessorAutoreleaseWithSafePath(), FindSingleUseIdentifiedObject(), GetArgRCIdentityRoot(), GetRCIdentityRoot(), IsObjCIdentifiedObject(), and llvm::objcarc::ObjCARCAAResult::pointsToConstantMemory().
Helper which calls const Value *GetRCIdentityRoot(const Value *V) and just casts away the const of the result.
For documentation about what an RCIdentityRoot (and by extension GetRCIdentityRoot is) look at that function.
Definition at line 131 of file ObjCARCAnalysisUtils.h.
References GetRCIdentityRoot().
|
inlinestatic |
If Inst is a ReturnRV and its operand is a call or invoke, return the operand.
Otherwise return null.
Definition at line 74 of file ObjCARC.h.
References C, llvm::dyn_cast(), llvm::User::getOperand(), RetainRV, and llvm::Value::stripPointerCasts().
Referenced by llvm::objcarc::BottomUpPtrState::HandlePotentialUse().
This is a wrapper around getUnderlyingObject which also knows how to look through objc_retain and objc_autorelease calls, which we know to return their argument verbatim.
Definition at line 78 of file ObjCARCAnalysisUtils.h.
References GetBasicARCInstKind(), llvm::GetUnderlyingObject(), and IsForwarding().
Referenced by llvm::objcarc::ObjCARCAAResult::alias(), CanUse(), GetUnderlyingObjCPtrCached(), and llvm::objcarc::ObjCARCAAResult::pointsToConstantMemory().
|
inline |
A wrapper for GetUnderlyingObjCPtr used for results memoization.
Definition at line 92 of file ObjCARCAnalysisUtils.h.
References GetUnderlyingObjCPtr(), and llvm::DenseMapBase< DenseMap< KeyT, ValueT, KeyInfoT, BucketT >, KeyT, ValueT, KeyInfoT, BucketT >::lookup().
Referenced by llvm::objcarc::ProvenanceAnalysis::related().
bool llvm::objcarc::IsAlwaysTail | ( | ARCInstKind | Class | ) |
Test if the given class represents instructions which are always safe to mark with the "tail" keyword.
Definition at line 487 of file ObjCARCInstKind.cpp.
References Autorelease, AutoreleasepoolPop, AutoreleasepoolPush, AutoreleaseRV, Call, CallOrUser, ClaimRV, CopyWeak, DestroyWeak, FusedRetainAutorelease, FusedRetainAutoreleaseRV, InitWeak, IntrinsicUser, llvm_unreachable, LoadWeak, LoadWeakRetained, MoveWeak, None, NoopCast, Release, Retain, RetainBlock, RetainRV, StoreStrong, StoreWeak, and User.
Referenced by llvm::createObjCARCOptPass().
bool llvm::objcarc::IsAutorelease | ( | ARCInstKind | Class | ) |
Test if the given class is objc_autorelease or equivalent.
Definition at line 382 of file ObjCARCInstKind.cpp.
References Autorelease, AutoreleasepoolPop, AutoreleasepoolPush, AutoreleaseRV, Call, CallOrUser, ClaimRV, CopyWeak, DestroyWeak, FusedRetainAutorelease, FusedRetainAutoreleaseRV, InitWeak, IntrinsicUser, llvm_unreachable, LoadWeak, LoadWeakRetained, MoveWeak, None, NoopCast, Release, Retain, RetainBlock, RetainRV, StoreStrong, StoreWeak, and User.
Referenced by llvm::createObjCARCOptPass(), and FindPredecessorAutoreleaseWithSafePath().
bool llvm::objcarc::IsForwarding | ( | ARCInstKind | Class | ) |
Test if the given class represents instructions which return their argument verbatim.
Definition at line 417 of file ObjCARCInstKind.cpp.
References Autorelease, AutoreleasepoolPop, AutoreleasepoolPush, AutoreleaseRV, Call, CallOrUser, ClaimRV, CopyWeak, DestroyWeak, FusedRetainAutorelease, FusedRetainAutoreleaseRV, InitWeak, IntrinsicUser, llvm_unreachable, LoadWeak, LoadWeakRetained, MoveWeak, None, NoopCast, Release, Retain, RetainBlock, RetainRV, StoreStrong, StoreWeak, and User.
Referenced by EraseInstruction(), FindSingleUseIdentifiedObject(), GetRCIdentityRoot(), and GetUnderlyingObjCPtr().
bool llvm::objcarc::IsNeverTail | ( | ARCInstKind | Class | ) |
Test if the given class represents instructions which are never safe to mark with the "tail" keyword.
It is never safe to tail call objc_autorelease since by tail calling objc_autorelease: fast autoreleasing causing our object to be potentially reclaimed from the autorelease pool which violates the semantics of __autoreleasing types in ARC.
Definition at line 523 of file ObjCARCInstKind.cpp.
References Autorelease, AutoreleasepoolPop, AutoreleasepoolPush, AutoreleaseRV, Call, CallOrUser, ClaimRV, CopyWeak, DestroyWeak, FusedRetainAutorelease, FusedRetainAutoreleaseRV, InitWeak, IntrinsicUser, llvm_unreachable, LoadWeak, LoadWeakRetained, MoveWeak, None, NoopCast, Release, Retain, RetainBlock, RetainRV, StoreStrong, StoreWeak, and User.
Referenced by llvm::createObjCARCOptPass().
|
inline |
Definition at line 146 of file ObjCARCAnalysisUtils.h.
References I.
Referenced by createCallInst(), and llvm::createObjCARCOptPass().
bool llvm::objcarc::IsNoopOnNull | ( | ARCInstKind | Class | ) |
Test if the given class represents instructions which do nothing if passed a null pointer.
Definition at line 452 of file ObjCARCInstKind.cpp.
References Autorelease, AutoreleasepoolPop, AutoreleasepoolPush, AutoreleaseRV, Call, CallOrUser, ClaimRV, CopyWeak, DestroyWeak, FusedRetainAutorelease, FusedRetainAutoreleaseRV, InitWeak, IntrinsicUser, llvm_unreachable, LoadWeak, LoadWeakRetained, MoveWeak, None, NoopCast, Release, Retain, RetainBlock, RetainRV, StoreStrong, StoreWeak, and User.
Referenced by llvm::createObjCARCOptPass(), and EraseInstruction().
bool llvm::objcarc::IsNoThrow | ( | ARCInstKind | Class | ) |
Test if the given class represents instructions which are always safe to mark with the nounwind attribute.
Definition at line 562 of file ObjCARCInstKind.cpp.
References Autorelease, AutoreleasepoolPop, AutoreleasepoolPush, AutoreleaseRV, Call, CallOrUser, ClaimRV, CopyWeak, DestroyWeak, FusedRetainAutorelease, FusedRetainAutoreleaseRV, InitWeak, IntrinsicUser, llvm_unreachable, LoadWeak, LoadWeakRetained, MoveWeak, None, NoopCast, Release, Retain, RetainBlock, RetainRV, StoreStrong, StoreWeak, and User.
Referenced by llvm::createObjCARCOptPass().
Definition at line 142 of file ObjCARCAnalysisUtils.h.
Referenced by createCallInst(), llvm::createObjCARCOptPass(), and EraseInstruction().
Return true if this value refers to a distinct and identifiable object.
This is similar to AliasAnalysis's isIdentifiedObject, except that it uses special knowledge of ObjC conventions.
Definition at line 213 of file ObjCARCAnalysisUtils.h.
References llvm::StringRef::find(), GetRCIdentityRoot(), Name, llvm::StringRef::npos, llvm::ARMBuildAttrs::Section, and llvm::StringRef::startswith().
Referenced by FindSingleUseIdentifiedObject(), and IsStoredObjCPointer().
Test whether the given value is possible a retainable object pointer.
Definition at line 153 of file ObjCARCAnalysisUtils.h.
References Arg, llvm::dyn_cast(), and llvm::Value::getType().
Referenced by CanAlterRefCount(), CanUse(), GetARCInstKind(), GetCallSiteClass(), and IsPotentialRetainableObjPtr().
|
inline |
Definition at line 178 of file ObjCARCAnalysisUtils.h.
References IsPotentialRetainableObjPtr(), and llvm::AAResults::pointsToConstantMemory().
bool llvm::objcarc::IsRetain | ( | ARCInstKind | Class | ) |
Test if the given class is objc_retain or equivalent.
Definition at line 346 of file ObjCARCInstKind.cpp.
References Autorelease, AutoreleasepoolPop, AutoreleasepoolPush, AutoreleaseRV, Call, CallOrUser, ClaimRV, CopyWeak, DestroyWeak, FusedRetainAutorelease, FusedRetainAutoreleaseRV, InitWeak, IntrinsicUser, llvm_unreachable, LoadWeak, LoadWeakRetained, MoveWeak, None, NoopCast, Release, Retain, RetainBlock, RetainRV, StoreStrong, StoreWeak, and User.
Referenced by FindPredecessorRetainWithSafePath(), and findSafeStoreForStoreStrongContraction().
bool llvm::objcarc::IsUser | ( | ARCInstKind | Class | ) |
Test if the given class is a kind of user.
Definition at line 312 of file ObjCARCInstKind.cpp.
References Autorelease, AutoreleasepoolPop, AutoreleasepoolPush, AutoreleaseRV, Call, CallOrUser, ClaimRV, CopyWeak, DestroyWeak, FusedRetainAutorelease, FusedRetainAutoreleaseRV, InitWeak, IntrinsicUser, llvm_unreachable, LoadWeak, LoadWeakRetained, MoveWeak, None, NoopCast, Release, Retain, RetainBlock, RetainRV, StoreStrong, StoreWeak, and User.
Referenced by llvm::objcarc::BottomUpPtrState::HandlePotentialUse().
Test if the given module looks interesting to run ARC optimization on.
Definition at line 52 of file ObjCARCAnalysisUtils.h.
References llvm::Module::getNamedValue().
Referenced by llvm::createObjCARCContractPass(), FindPredecessorAutoreleaseWithSafePath(), and INITIALIZE_PASS().
raw_ostream & llvm::objcarc::operator<< | ( | raw_ostream & | OS, |
const Sequence | S | ||
) |
Definition at line 37 of file PtrState.cpp.
References llvm_unreachable, S_CanRelease, S_MovableRelease, S_None, S_Release, S_Retain, S_Stop, and S_Use.
raw_ostream & llvm::objcarc::operator<< | ( | raw_ostream & | OS, |
const ARCInstKind | Class | ||
) |
Definition at line 30 of file ObjCARCInstKind.cpp.
References Autorelease, AutoreleasepoolPop, AutoreleasepoolPush, AutoreleaseRV, Call, CallOrUser, ClaimRV, CopyWeak, DestroyWeak, FusedRetainAutorelease, FusedRetainAutoreleaseRV, InitWeak, IntrinsicUser, llvm_unreachable, LoadWeak, LoadWeakRetained, MoveWeak, None, NoopCast, Release, Retain, RetainBlock, RetainRV, StoreStrong, StoreWeak, and User.
bool llvm::objcarc::EnableARCOpts |
A handy option to enable/disable all ARC Optimizations.
Definition at line 23 of file ObjCARCAnalysisUtils.cpp.
Referenced by llvm::objcarc::ObjCARCAAResult::alias(), createCallInst(), FindPredecessorAutoreleaseWithSafePath(), llvm::objcarc::ObjCARCAAResult::getModRefBehavior(), llvm::objcarc::ObjCARCAAResult::getModRefInfo(), INITIALIZE_PASS(), and llvm::objcarc::ObjCARCAAResult::pointsToConstantMemory().