- /* work_list stores a list of function ids for each thread
- * SnapList<uint32_t> is intended to be used as a stack storing
- * the functions that thread i has entered and yet to exit from
+ /* Map a location to FuncNodes that may read from it */
+ HashTable<void *, SnapVector<FuncNode *> *, uintptr_t, 0> * loc_rd_func_nodes_map;
+
+ /* Map a location to FuncNodes that may write to it */
+ HashTable<void *, SnapVector<FuncNode *> *, uintptr_t, 0> * loc_wr_func_nodes_map;
+
+ HashTable<void *, SnapVector<ConcretePredicate *> *, uintptr_t, 0> * loc_waiting_writes_map;
+
+ /* Keeps track of atomic actions that thread i has performed in some
+ * function. Index of SnapVector is thread id. SnapList simulates
+ * the call stack.
+ */
+ SnapVector< SnapList<action_list_t *> *> * thrd_func_act_lists;
+
+ /* thrd_func_list stores a list of function ids for each thread.
+ * Each element in thrd_func_list stores the functions that
+ * thread i has entered and yet to exit from