From: Brian Norris <banorris@uci.edu>
Date: Mon, 25 Jun 2012 19:22:31 +0000 (-0700)
Subject: nodestack: only create may_read_from sets for read operations
X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=c01d975387b4fc4b711acbdbdc19e3690985adec;p=cdsspec-compiler.git

nodestack: only create may_read_from sets for read operations
---

diff --git a/nodestack.cc b/nodestack.cc
index d3b7c10..a39701e 100644
--- a/nodestack.cc
+++ b/nodestack.cc
@@ -24,10 +24,12 @@ Node::Node(ModelAction *act, Node *par, int nthreads)
 	explored_children(num_threads),
 	backtrack(num_threads),
 	numBacktracks(0),
-	may_read_from()
+	may_read_from(NULL)
 {
 	if (act)
 		act->set_node(this);
+	if (act && act->is_read())
+		may_read_from = new action_set_t();
 }
 
 /** @brief Node desctructor */
@@ -119,7 +121,8 @@ bool Node::is_enabled(Thread *t)
  */
 void Node::add_read_from(ModelAction *act)
 {
-	may_read_from.insert(act);
+	ASSERT(may_read_from);
+	may_read_from->insert(act);
 }
 
 void Node::explore(thread_id_t tid)
diff --git a/nodestack.h b/nodestack.h
index 11440e5..974f1a9 100644
--- a/nodestack.h
+++ b/nodestack.h
@@ -52,7 +52,7 @@ private:
 
 	/** The set of ModelActions that this the action at this Node may read
 	 *  from. Only meaningful if this Node represents a 'read' action. */
-	action_set_t may_read_from;
+	action_set_t *may_read_from;
 };
 
 typedef std::list<class Node *, MyAlloc< class Node * > > node_list_t;