[cfe-commits] r150720 - in /cfe/trunk: include/clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h lib/StaticAnalyzer/Core/CoreEngine.cpp lib/StaticAnalyzer/Core/ExplodedGraph.cpp lib/StaticAnalyzer/Core/ExprEngine.cpp
Richard Smith
richard at metafoo.co.uk
Thu Feb 16 12:44:55 PST 2012
At this revision, test/Analysis/taint-tester.c is failing
nondeterministically. I've not narrowed this down to a specific change yet.
On Thu, Feb 16, 2012 at 12:19 PM, Ted Kremenek <kremenek at apple.com> wrote:
> Author: kremenek
> Date: Thu Feb 16 14:19:30 2012
> New Revision: 150720
>
> URL: http://llvm.org/viewvc/llvm-project?rev=150720&view=rev
> Log:
> Move ExplodedNode reclaimation out of ExprEngine and into CoreEngine.
> Also have it based on adding predecessors/successors, not node allocation.
> No measurable performance change.
>
> Modified:
>
> cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h
> cfe/trunk/lib/StaticAnalyzer/Core/CoreEngine.cpp
> cfe/trunk/lib/StaticAnalyzer/Core/ExplodedGraph.cpp
> cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp
>
> Modified:
> cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h?rev=150720&r1=150719&r2=150720&view=diff
>
> ==============================================================================
> ---
> cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h
> (original)
> +++
> cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h
> Thu Feb 16 14:19:30 2012
> @@ -25,6 +25,7 @@
> #include "llvm/ADT/SmallVector.h"
> #include "llvm/ADT/FoldingSet.h"
> #include "llvm/ADT/SmallPtrSet.h"
> +#include "llvm/ADT/DenseSet.h"
> #include "llvm/Support/Allocator.h"
> #include "llvm/ADT/OwningPtr.h"
> #include "llvm/ADT/GraphTraits.h"
> @@ -240,6 +241,7 @@
> class ExplodedGraph {
> protected:
> friend class CoreEngine;
> + friend class ExplodedNode;
>
> // Type definitions.
> typedef std::vector<ExplodedNode *> NodeVector;
> @@ -265,16 +267,13 @@
> unsigned NumNodes;
>
> /// A list of recently allocated nodes that can potentially be recycled.
> - NodeVector ChangedNodes;
> + llvm::DenseSet<ExplodedNode*> ChangedNodes;
>
> /// A list of nodes that can be reused.
> NodeVector FreeNodes;
>
> /// A flag that indicates whether nodes should be recycled.
> bool reclaimNodes;
> -
> - /// Counter to determine when to reclaim nodes.
> - unsigned reclaimCounter;
>
> public:
>
> @@ -361,12 +360,12 @@
> llvm::DenseMap<const void*, const void*> *InverseMap)
> const;
>
> /// Enable tracking of recently allocated nodes for potential reclamation
> - /// when calling reclaimRecentlyAllocatedNodes().
> + /// when calling reclaimChangedNodes().
> void enableNodeReclamation() { reclaimNodes = true; }
>
> /// Reclaim "uninteresting" nodes created since the last time this method
> /// was called.
> - void reclaimRecentlyAllocatedNodes();
> + void reclaimChangedNodes();
>
> private:
> bool shouldCollect(const ExplodedNode *node);
>
> Modified: cfe/trunk/lib/StaticAnalyzer/Core/CoreEngine.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/CoreEngine.cpp?rev=150720&r1=150719&r2=150720&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/StaticAnalyzer/Core/CoreEngine.cpp (original)
> +++ cfe/trunk/lib/StaticAnalyzer/Core/CoreEngine.cpp Thu Feb 16 14:19:30
> 2012
> @@ -192,6 +192,7 @@
> --Steps;
> }
>
> + getGraph().reclaimChangedNodes();
> const WorkListUnit& WU = WList->dequeue();
>
> // Set the current block counter.
>
> Modified: cfe/trunk/lib/StaticAnalyzer/Core/ExplodedGraph.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/ExplodedGraph.cpp?rev=150720&r1=150719&r2=150720&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/StaticAnalyzer/Core/ExplodedGraph.cpp (original)
> +++ cfe/trunk/lib/StaticAnalyzer/Core/ExplodedGraph.cpp Thu Feb 16
> 14:19:30 2012
> @@ -45,10 +45,8 @@
> // Cleanup.
>
> //===----------------------------------------------------------------------===//
>
> -static const unsigned CounterTop = 1000;
> -
> ExplodedGraph::ExplodedGraph()
> - : NumNodes(0), reclaimNodes(false), reclaimCounter(CounterTop) {}
> + : NumNodes(0), reclaimNodes(false) {}
>
> ExplodedGraph::~ExplodedGraph() {}
>
> @@ -127,19 +125,12 @@
> node->~ExplodedNode();
> }
>
> -void ExplodedGraph::reclaimRecentlyAllocatedNodes() {
> +void ExplodedGraph::reclaimChangedNodes() {
> if (ChangedNodes.empty())
> return;
>
> - // Only periodically relcaim nodes so that we can build up a set of
> - // nodes that meet the reclamation criteria. Freshly created nodes
> - // by definition have no successor, and thus cannot be reclaimed (see
> below).
> - assert(reclaimCounter > 0);
> - if (--reclaimCounter != 0)
> - return;
> - reclaimCounter = CounterTop;
> -
> - for (NodeVector::iterator it = ChangedNodes.begin(), et =
> ChangedNodes.end();
> + for (llvm::DenseSet<ExplodedNode*>::iterator it =
> + ChangedNodes.begin(), et = ChangedNodes.end();
> it != et; ++it) {
> ExplodedNode *node = *it;
> if (shouldCollect(node))
> @@ -160,6 +151,12 @@
> assert (!V->isSink());
> Preds.addNode(V, G);
> V->Succs.addNode(this, G);
> + if (G.reclaimNodes) {
> + if (Succs.size() == 1 && Preds.size() == 1)
> + G.ChangedNodes.insert(this);
> + if (V->Succs.size() == 1 && V->Preds.size() == 1)
> + G.ChangedNodes.insert(V);
> + }
> #ifndef NDEBUG
> if (NodeAuditor) NodeAuditor->AddEdge(V, this);
> #endif
> @@ -256,9 +253,6 @@
>
> new (V) NodeTy(L, State, IsSink);
>
> - if (reclaimNodes)
> - ChangedNodes.push_back(V);
> -
> // Insert the node into the node set and return it.
> Nodes.InsertNode(V, InsertPos);
> ++NumNodes;
>
> Modified: cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp?rev=150720&r1=150719&r2=150720&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp (original)
> +++ cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp Thu Feb 16 14:19:30
> 2012
> @@ -238,10 +238,7 @@
> }
>
> void ExprEngine::ProcessStmt(const CFGStmt S,
> - ExplodedNode *Pred) {
> - // Reclaim any unnecessary nodes in the ExplodedGraph.
> - G.reclaimRecentlyAllocatedNodes();
> -
> + ExplodedNode *Pred) {
> currentStmt = S.getStmt();
> PrettyStackTraceLoc CrashInfo(getContext().getSourceManager(),
> currentStmt->getLocStart(),
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20120216/46681858/attachment.html>
More information about the cfe-commits
mailing list