17 #ifndef LLVM_LIB_TRANSFORMS_OBJCARC_PTRSTATE_H 18 #define LLVM_LIB_TRANSFORMS_OBJCARC_PTRSTATE_H 35 class ProvenanceAnalysis;
105 bool KnownPositiveRefCount =
false;
109 bool Partial =
false;
144 void SetKnownPositiveRefCount();
145 void ClearKnownPositiveRefCount();
155 void ResetSequenceProgress(
Sequence NewSeq);
182 bool MatchWithRetain();
213 #endif // LLVM_LIB_TRANSFORMS_OBJCARC_PTRSTATE_H bool Merge(const RRInfo &Other)
Conservatively merge the two RRInfo.
SmallPtrSet< Instruction *, 2 > Calls
For a top-down sequence, the set of objc_retains or objc_retainBlocks.
void ClearReverseInsertPts()
This class represents lattice values for constants.
bool IsTrackingImpreciseReleases() const
void SetKnownSafe(const bool NewValue)
SmallPtrSet< Instruction *, 2 > ReverseInsertPts
The set of optimal insert positions for moving calls in the opposite sequence.
unsigned char Seq
The current position in the sequence.
bool HasKnownPositiveRefCount() const
void InsertReverseInsertPt(Instruction *I)
void InsertCall(Instruction *I)
This class summarizes several per-pointer runtime properties which are propagated through the flow gr...
bool IsTailCallRelease
True of the objc_release calls are all marked with the "tail" keyword.
Unidirectional information about either a retain-decrement-use-release sequence or release-use-decrem...
raw_ostream & operator<<(raw_ostream &OS, const ARCInstKind Class)
RRInfo RRI
Unidirectional information about the current sequence.
LLVM Basic Block Representation.
like S_Release, but code motion is stopped.
A cache of MDKinds used by various ARC optimizations.
bool CFGHazardAfflicted
If this is true, we cannot perform code motion but can still remove retain/release pairs...
objc_release(x), !clang.imprecise_release.
bool IsCFGHazardAfflicted() const
const MDNode * GetReleaseMetadata() const
SmallPtrSet - This class implements a set which is optimized for holding SmallSize or less elements...
void SetReleaseMetadata(MDNode *NewValue)
ARCInstKind
Equivalence classes of instructions in the ARC Model.
MDNode * ReleaseMetadata
If the Calls are objc_release calls and they all have a clang.imprecise_release tag, this is the metadata tag.
void SetTailCallRelease(const bool NewValue)
void ClearSequenceProgress()
bool IsTailCallRelease() const
const RRInfo & GetRRInfo() const
Sequence
A sequence of states that a pointer may go through in which an objc_retain and objc_release are actua...
void SetCFGHazardAfflicted(const bool NewValue)
bool HasReverseInsertPts() const
LLVM Value Representation.
foo(x) – x could possibly see a ref count decrement.
bool KnownSafe
After an objc_retain, the reference count of the referenced object is known to be positive...
This class implements an extremely fast bulk output stream that can only output to a stream...
This is similar to BasicAliasAnalysis, and it uses many of the same techniques, except it uses specia...
#define LLVM_ATTRIBUTE_UNUSED