LLVM 20.0.0git
|
Unidirectional information about either a retain-decrement-use-release sequence or release-use-decrement-retain reverse sequence. More...
#include "Transforms/ObjCARC/PtrState.h"
Public Member Functions | |
RRInfo ()=default | |
void | clear () |
bool | Merge (const RRInfo &Other) |
Conservatively merge the two RRInfo. | |
Public Attributes | |
bool | KnownSafe = false |
After an objc_retain, the reference count of the referenced object is known to be positive. | |
bool | IsTailCallRelease = false |
True of the objc_release calls are all marked with the "tail" keyword. | |
MDNode * | ReleaseMetadata = nullptr |
If the Calls are objc_release calls and they all have a clang.imprecise_release tag, this is the metadata tag. | |
SmallPtrSet< Instruction *, 2 > | Calls |
For a top-down sequence, the set of objc_retains or objc_retainBlocks. | |
SmallPtrSet< Instruction *, 2 > | ReverseInsertPts |
The set of optimal insert positions for moving calls in the opposite sequence. | |
bool | CFGHazardAfflicted = false |
If this is true, we cannot perform code motion but can still remove retain/release pairs. | |
Unidirectional information about either a retain-decrement-use-release sequence or release-use-decrement-retain reverse sequence.
Definition at line 56 of file PtrState.h.
|
default |
void RRInfo::clear | ( | ) |
Definition at line 90 of file PtrState.cpp.
References Calls, CFGHazardAfflicted, IsTailCallRelease, KnownSafe, ReleaseMetadata, and ReverseInsertPts.
Referenced by llvm::objcarc::PtrState::Merge(), and llvm::objcarc::PtrState::ResetSequenceProgress().
Conservatively merge the two RRInfo.
Returns true if a partial merge has occurred, false otherwise.
Definition at line 99 of file PtrState.cpp.
References Calls, CFGHazardAfflicted, IsTailCallRelease, KnownSafe, llvm::Other, ReleaseMetadata, and ReverseInsertPts.
Referenced by llvm::objcarc::PtrState::Merge().
SmallPtrSet<Instruction *, 2> llvm::objcarc::RRInfo::Calls |
For a top-down sequence, the set of objc_retains or objc_retainBlocks.
For bottom-up, the set of objc_releases.
Definition at line 80 of file PtrState.h.
Referenced by clear(), llvm::objcarc::PtrState::InsertCall(), and Merge().
bool llvm::objcarc::RRInfo::CFGHazardAfflicted = false |
If this is true, we cannot perform code motion but can still remove retain/release pairs.
Definition at line 88 of file PtrState.h.
Referenced by clear(), llvm::objcarc::PtrState::IsCFGHazardAfflicted(), Merge(), and llvm::objcarc::PtrState::SetCFGHazardAfflicted().
bool llvm::objcarc::RRInfo::IsTailCallRelease = false |
True of the objc_release calls are all marked with the "tail" keyword.
Definition at line 72 of file PtrState.h.
Referenced by clear(), llvm::objcarc::PtrState::IsTailCallRelease(), Merge(), and llvm::objcarc::PtrState::SetTailCallRelease().
bool llvm::objcarc::RRInfo::KnownSafe = false |
After an objc_retain, the reference count of the referenced object is known to be positive.
Similarly, before an objc_release, the reference count of the referenced object is known to be positive. If there are retain-release pairs in code regions where the retain count is known to be positive, they can be eliminated, regardless of any side effects between them.
Also, a retain+release pair nested within another retain+release pair all on the known same pointer value can be eliminated, regardless of any intervening side effects.
KnownSafe is true when either of these conditions is satisfied.
Definition at line 69 of file PtrState.h.
Referenced by clear(), llvm::objcarc::PtrState::IsKnownSafe(), Merge(), and llvm::objcarc::PtrState::SetKnownSafe().
MDNode* llvm::objcarc::RRInfo::ReleaseMetadata = nullptr |
If the Calls are objc_release calls and they all have a clang.imprecise_release tag, this is the metadata tag.
Definition at line 76 of file PtrState.h.
Referenced by clear(), llvm::objcarc::PtrState::GetReleaseMetadata(), llvm::objcarc::PtrState::IsTrackingImpreciseReleases(), Merge(), and llvm::objcarc::PtrState::SetReleaseMetadata().
SmallPtrSet<Instruction *, 2> llvm::objcarc::RRInfo::ReverseInsertPts |
The set of optimal insert positions for moving calls in the opposite sequence.
Definition at line 84 of file PtrState.h.
Referenced by clear(), llvm::objcarc::PtrState::ClearReverseInsertPts(), llvm::objcarc::PtrState::HasReverseInsertPts(), llvm::objcarc::PtrState::InsertReverseInsertPt(), and Merge().