]> granicus.if.org Git - llvm/commitdiff
[SCEV] Remove custom RAII wrapper; NFC
authorSanjoy Das <sanjoy@playingwithpointers.com>
Tue, 27 Sep 2016 18:01:42 +0000 (18:01 +0000)
committerSanjoy Das <sanjoy@playingwithpointers.com>
Tue, 27 Sep 2016 18:01:42 +0000 (18:01 +0000)
Instead use the pre-existing `scope_exit` class.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282512 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/ScalarEvolution.cpp

index 038204e88391f270efb01ab9a135f4e6fe53a039..401e736396db4acfea9873014cea0fabdcbd57d6 100644 (file)
@@ -61,6 +61,7 @@
 #include "llvm/Analysis/ScalarEvolution.h"
 #include "llvm/ADT/Optional.h"
 #include "llvm/ADT/STLExtras.h"
+#include "llvm/ADT/ScopeExit.h"
 #include "llvm/ADT/SmallPtrSet.h"
 #include "llvm/ADT/Statistic.h"
 #include "llvm/Analysis/AssumptionCache.h"
@@ -8058,34 +8059,16 @@ ScalarEvolution::isLoopEntryGuardedByCond(const Loop *L,
   return false;
 }
 
-namespace {
-/// RAII wrapper to prevent recursive application of isImpliedCond.
-/// ScalarEvolution's PendingLoopPredicates set must be empty unless we are
-/// currently evaluating isImpliedCond.
-struct MarkPendingLoopPredicate {
-  Value *Cond;
-  SmallPtrSetImpl<Value *> &LoopPreds;
-  bool Pending;
-
-  MarkPendingLoopPredicate(Value *C, SmallPtrSetImpl<Value *> &LP)
-      : Cond(C), LoopPreds(LP) {
-    Pending = !LoopPreds.insert(Cond).second;
-  }
-  ~MarkPendingLoopPredicate() {
-    if (!Pending)
-      LoopPreds.erase(Cond);
-  }
-};
-} // end anonymous namespace
-
 bool ScalarEvolution::isImpliedCond(ICmpInst::Predicate Pred,
                                     const SCEV *LHS, const SCEV *RHS,
                                     Value *FoundCondValue,
                                     bool Inverse) {
-  MarkPendingLoopPredicate Mark(FoundCondValue, PendingLoopPredicates);
-  if (Mark.Pending)
+  if (!PendingLoopPredicates.insert(FoundCondValue).second)
     return false;
 
+  auto ClearOnExit =
+      make_scope_exit([&]() { PendingLoopPredicates.erase(FoundCondValue); });
+
   // Recursively handle And and Or conditions.
   if (BinaryOperator *BO = dyn_cast<BinaryOperator>(FoundCondValue)) {
     if (BO->getOpcode() == Instruction::And) {