[llvm-commits] [llvm] r160426 - /llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpressions.h

Andrew Trick atrick at apple.com
Tue Jul 17 22:14:03 PDT 2012


Author: atrick
Date: Wed Jul 18 00:14:03 2012
New Revision: 160426

URL: http://llvm.org/viewvc/llvm-project?rev=160426&view=rev
Log:
SCEVTraversal: Add a visited set.

Expression trees may be DAGs. Make sure traversal has linear complexity.

Modified:
    llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpressions.h

Modified: llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpressions.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpressions.h?rev=160426&r1=160425&r2=160426&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpressions.h (original)
+++ llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpressions.h Wed Jul 18 00:14:03 2012
@@ -15,6 +15,7 @@
 #define LLVM_ANALYSIS_SCALAREVOLUTION_EXPRESSIONS_H
 
 #include "llvm/Analysis/ScalarEvolution.h"
+#include "llvm/ADT/SmallPtrSet.h"
 #include "llvm/Support/ErrorHandling.h"
 
 namespace llvm {
@@ -505,9 +506,10 @@
   class SCEVTraversal {
     SV &Visitor;
     SmallVector<const SCEV *, 8> Worklist;
+    SmallPtrSet<const SCEV *, 8> Visited;
 
     void push(const SCEV *S) {
-      if (Visitor.follow(S))
+      if (Visited.insert(S) && Visitor.follow(S))
         Worklist.push_back(S);
     }
   public:





More information about the llvm-commits mailing list