[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