From: Brian Norris Date: Tue, 12 Feb 2013 19:48:41 +0000 (-0800) Subject: Merge branch 'fences' X-Git-Tag: oopsla2013~264 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=9aae08ba6d60aa253039d2da1c3571fdde2ac159;hp=-c;p=model-checker.git Merge branch 'fences' --- 9aae08ba6d60aa253039d2da1c3571fdde2ac159 diff --combined action.cc index 72ca472,6a545d8..d5eb581 --- a/action.cc +++ b/action.cc @@@ -31,7 -31,6 +31,7 @@@ ModelAction::ModelAction(action_type_t location(loc), value(value), reads_from(NULL), + reads_from_promise(NULL), last_fence_release(NULL), node(NULL), seq_number(ACTION_INITIAL_CLOCK), @@@ -299,15 -298,13 +299,13 @@@ bool ModelAction::could_synchronize_wit if (!same_var(act)) return false; - // Explore interleavings of seqcst writes/fences to guarantee total + // Explore interleavings of seqcst writes to guarantee total // order of seq_cst operations that don't commute - if ((could_be_write() || act->could_be_write() || is_fence() || act->is_fence()) - && is_seqcst() && act->is_seqcst()) + if ((could_be_write() || act->could_be_write()) && is_seqcst() && act->is_seqcst()) return true; - // Explore synchronizing read/write/fence pairs - if (is_acquire() && act->is_release() && (is_read() || is_fence()) && - (act->could_be_write() || act->is_fence())) + // Explore synchronizing read/write pairs + if (is_acquire() && act->is_release() && is_read() && act->could_be_write()) return true; // lock just released...we can grab lock @@@ -394,22 -391,10 +392,22 @@@ Node * ModelAction::get_node() cons void ModelAction::set_read_from(const ModelAction *act) { reads_from = act; + reads_from_promise = NULL; if (act && act->is_uninitialized()) model->assert_bug("May read from uninitialized atomic\n"); } +/** + * Set this action's read-from promise + * @param promise The promise to read from + */ +void ModelAction::set_read_from_promise(const Promise *promise) +{ + ASSERT(is_read()); + reads_from_promise = promise; + reads_from = NULL; +} + /** * Synchronize the current thread with the thread corresponding to the * ModelAction parameter. @@@ -511,10 -496,8 +509,10 @@@ void ModelAction::print() cons } uint64_t valuetoprint; - if (type == ATOMIC_READ && reads_from != NULL) + if (is_read() && reads_from) valuetoprint = reads_from->value; + else if (is_read() && reads_from_promise) + valuetoprint = reads_from_promise->get_value(); else valuetoprint = value; @@@ -557,7 -540,7 +555,7 @@@ model_print("\n"); } -/** @brief Print nicely-formatted info about this ModelAction */ +/** @brief Get a (likely) unique hash for this ModelAction */ unsigned int ModelAction::hash() const { unsigned int hash = (unsigned int)this->type;