[llvm] r184528 - [objcarcopts] Refactor out the RRInfo merging code from PtrState into RRInfo::Merge.
Michael Gottesman
mgottesman at apple.com
Thu Jun 20 22:42:08 PDT 2013
Author: mgottesman
Date: Fri Jun 21 00:42:08 2013
New Revision: 184528
URL: http://llvm.org/viewvc/llvm-project?rev=184528&view=rev
Log:
[objcarcopts] Refactor out the RRInfo merging code from PtrState into RRInfo::Merge.
I also added some comments and performed minor code cleanups.
Modified:
llvm/trunk/lib/Transforms/ObjCARC/ObjCARCOpts.cpp
Modified: llvm/trunk/lib/Transforms/ObjCARC/ObjCARCOpts.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/ObjCARC/ObjCARCOpts.cpp?rev=184528&r1=184527&r2=184528&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/ObjCARC/ObjCARCOpts.cpp (original)
+++ llvm/trunk/lib/Transforms/ObjCARC/ObjCARCOpts.cpp Fri Jun 21 00:42:08 2013
@@ -465,6 +465,10 @@ namespace {
void clear();
+ /// Conservatively merge the two RRInfo. Returns true if a partial merge has
+ /// occured, false otherwise.
+ bool Merge(const RRInfo &Other);
+
bool IsTrackingImpreciseReleases() {
return ReleaseMetadata != 0;
}
@@ -480,6 +484,29 @@ void RRInfo::clear() {
CFGHazardAfflicted = false;
}
+bool RRInfo::Merge(const RRInfo &Other) {
+ // Conservatively merge the ReleaseMetadata information.
+ if (ReleaseMetadata != Other.ReleaseMetadata)
+ ReleaseMetadata = 0;
+
+ // Conservatively merge the boolean state.
+ KnownSafe &= Other.KnownSafe;
+ IsTailCallRelease &= Other.IsTailCallRelease;
+ CFGHazardAfflicted |= Other.CFGHazardAfflicted;
+
+ // Merge the call sets.
+ Calls.insert(Other.Calls.begin(), Other.Calls.end());
+
+ // Merge the insert point sets. If there are any differences,
+ // that makes this a partial merge.
+ bool Partial = ReverseInsertPts.size() != Other.ReverseInsertPts.size();
+ for (SmallPtrSet<Instruction *, 2>::const_iterator
+ I = Other.ReverseInsertPts.begin(),
+ E = Other.ReverseInsertPts.end(); I != E; ++I)
+ Partial |= ReverseInsertPts.insert(*I);
+ return Partial;
+}
+
namespace {
/// \brief This class summarizes several per-pointer runtime properties which
/// are propogated through the flow graph.
@@ -557,23 +584,7 @@ PtrState::Merge(const PtrState &Other, b
// mixing them is unsafe.
ClearSequenceProgress();
} else {
- // Conservatively merge the ReleaseMetadata information.
- if (RRI.ReleaseMetadata != Other.RRI.ReleaseMetadata)
- RRI.ReleaseMetadata = 0;
-
- RRI.KnownSafe = RRI.KnownSafe && Other.RRI.KnownSafe;
- RRI.IsTailCallRelease = RRI.IsTailCallRelease &&
- Other.RRI.IsTailCallRelease;
- RRI.Calls.insert(Other.RRI.Calls.begin(), Other.RRI.Calls.end());
- RRI.CFGHazardAfflicted |= Other.RRI.CFGHazardAfflicted;
-
- // Merge the insert point sets. If there are any differences,
- // that makes this a partial merge.
- Partial = RRI.ReverseInsertPts.size() != Other.RRI.ReverseInsertPts.size();
- for (SmallPtrSet<Instruction *, 2>::const_iterator
- I = Other.RRI.ReverseInsertPts.begin(),
- E = Other.RRI.ReverseInsertPts.end(); I != E; ++I)
- Partial |= RRI.ReverseInsertPts.insert(*I);
+ Partial = RRI.Merge(Other.RRI);
}
}
More information about the llvm-commits
mailing list