[MSSA] Make EXPENSIVE_CHECKS check more.
authorGeorge Burgess IV <george.burgess.iv@gmail.com>
Sun, 24 Jul 2016 07:03:49 +0000 (07:03 +0000)
committerGeorge Burgess IV <george.burgess.iv@gmail.com>
Sun, 24 Jul 2016 07:03:49 +0000 (07:03 +0000)
checkClobberSanity will now be run for all results of `ClobberWalk`,
instead of just the crazy phi-optimized ones. This can help us catch
cases where our cache is being wonky.

llvm-svn: 276553

llvm/lib/Transforms/Utils/MemorySSA.cpp

index e304084..13ddd83 100644 (file)
@@ -236,9 +236,6 @@ checkClobberSanity(MemoryAccess *Start, MemoryAccess *ClobberAt,
     return;
   }
 
-  assert((isa<MemoryPhi>(Start) || Start != ClobberAt) &&
-         "Start can't clobber itself!");
-
   bool FoundClobber = false;
   DenseSet<MemoryAccessPair> VisitedPhis;
   SmallVector<MemoryAccessPair, 8> Worklist;
@@ -818,22 +815,23 @@ public:
     // Fast path for the overly-common case (no crazy phi optimization
     // necessary)
     UpwardsWalkResult WalkResult = walkToPhiOrClobber(FirstDesc);
+    MemoryAccess *Result;
     if (WalkResult.IsKnownClobber) {
       cacheDefPath(FirstDesc, WalkResult.Result);
-      return WalkResult.Result;
+      Result = WalkResult.Result;
+    } else {
+      OptznResult OptRes = tryOptimizePhi(cast<MemoryPhi>(FirstDesc.Last),
+                                          Current, Q.StartingLoc);
+      verifyOptResult(OptRes);
+      cacheOptResult(OptRes);
+      resetPhiOptznState();
+      Result = OptRes.PrimaryClobber.Clobber;
     }
 
-    OptznResult OptRes =
-        tryOptimizePhi(cast<MemoryPhi>(FirstDesc.Last), Current, Q.StartingLoc);
-    verifyOptResult(OptRes);
-    cacheOptResult(OptRes);
-    resetPhiOptznState();
-
 #ifdef EXPENSIVE_CHECKS
-    checkClobberSanity(Current, OptRes.PrimaryClobber.Clobber, Q.StartingLoc,
-                       MSSA, Q, AA);
+    checkClobberSanity(Current, Result, Q.StartingLoc, MSSA, Q, AA);
 #endif
-    return OptRes.PrimaryClobber.Clobber;
+    return Result;
   }
 };