X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=action.cc;h=d4c6253caf20c23411c60ba350a91760c386e6fc;hb=refs%2Fheads%2Fmaster;hp=14ad71d54e5221c553a610a846f9a0a66dc98fa5;hpb=d590c23e98d4ad4da4df6eda33cbdb04c29c25ea;p=model-checker.git diff --git a/action.cc b/action.cc index 14ad71d..d4c6253 100644 --- a/action.cc +++ b/action.cc @@ -9,6 +9,7 @@ #include "common.h" #include "threads-model.h" #include "nodestack.h" +#include "wildcard.h" #define ACTION_INITIAL_CLOCK 0 @@ -34,6 +35,7 @@ ModelAction::ModelAction(action_type_t type, memory_order order, void *loc, uint64_t value, Thread *thread) : type(type), order(order), + original_order(order), location(loc), value(value), reads_from(NULL), @@ -192,6 +194,11 @@ bool ModelAction::is_initialization() const return type == ATOMIC_INIT; } +bool ModelAction::is_annotation() const +{ + return type == ATOMIC_ANNOTATION; +} + bool ModelAction::is_relaxed() const { return order == std::memory_order_relaxed; @@ -323,7 +330,7 @@ bool ModelAction::could_synchronize_with(const ModelAction *act) const return false; // Different locations commute - if (!same_var(act)) + if (!same_var(act) && !is_fence() && !act->is_fence()) return false; // Explore interleavings of seqcst writes/fences to guarantee total @@ -547,7 +554,8 @@ const char * ModelAction::get_type_str() const case ATOMIC_TRYLOCK: return "trylock"; case ATOMIC_WAIT: return "wait"; case ATOMIC_NOTIFY_ONE: return "notify one"; - case ATOMIC_NOTIFY_ALL: return "notify all"; + case ATOMIC_NOTIFY_ALL: return "notify all"; + case ATOMIC_ANNOTATION: return "annotation"; default: return "unknown type"; }; } @@ -569,25 +577,25 @@ void ModelAction::print() const { const char *type_str = get_type_str(), *mo_str = get_mo_str(); - model_print("(%4d) Thread: %-2d Action: %-13s MO: %7s Loc: %14p Value: %-#18" PRIx64, + model_print("%-4d %-2d %-13s %7s %14p %-#18" PRIx64, seq_number, id_to_int(tid), type_str, mo_str, location, get_return_value()); if (is_read()) { if (reads_from) - model_print(" Rf: %-3d", reads_from->get_seq_number()); + model_print(" %-3d", reads_from->get_seq_number()); else if (reads_from_promise) { int idx = reads_from_promise->get_index(); if (idx >= 0) - model_print(" Rf: P%-2d", idx); + model_print(" P%-2d", idx); else - model_print(" Rf: P? "); + model_print(" P? "); } else - model_print(" Rf: ? "); + model_print(" ? "); } if (cv) { if (is_read()) model_print(" "); else - model_print(" "); + model_print(" "); cv->print(); } else model_print("\n");