From: Brian Norris Date: Wed, 11 Jul 2012 21:10:40 +0000 (-0700) Subject: action: add 'reads_from' member variable X-Git-Tag: pldi2013~365 X-Git-Url: http://plrg.eecs.uci.edu/git/?p=model-checker.git;a=commitdiff_plain;h=f291abaf7a05ebdc5981072212b55265dafc1c4a action: add 'reads_from' member variable Just printed out for now, but the 'reads_from' parameter might be used more later. --- diff --git a/action.cc b/action.cc index f41b0eb..c96949b 100644 --- a/action.cc +++ b/action.cc @@ -10,6 +10,7 @@ ModelAction::ModelAction(action_type_t type, memory_order order, void *loc, int order(order), location(loc), value(value), + reads_from(NULL), cv(NULL) { Thread *t = thread_current(); @@ -132,6 +133,7 @@ void ModelAction::read_from(const ModelAction *act) ASSERT(cv); if (act->is_release() && this->is_acquire()) cv->merge(act->cv); + reads_from = act; value = act->value; } @@ -175,8 +177,10 @@ void ModelAction::print(void) const type_str = "unknown type"; } - printf("(%3d) Thread: %-2d Action: %-13s MO: %d Loc: %14p Value: %d", + printf("(%3d) Thread: %-2d Action: %-13s MO: %d Loc: %14p Value: %-4d", seq_number, id_to_int(tid), type_str, order, location, value); + if (reads_from) + printf(" Rf: %d", reads_from->get_seq_number()); if (cv) { printf("\t"); cv->print(); diff --git a/action.h b/action.h index 4504fd8..731c319 100644 --- a/action.h +++ b/action.h @@ -47,6 +47,7 @@ public: void * get_location() const { return location; } modelclock_t get_seq_number() const { return seq_number; } int get_value() const { return value; } + const ModelAction * get_reads_from() const { return reads_from; } Node * get_node() const { return node; } void set_node(Node *n) { node = n; } @@ -94,6 +95,9 @@ private: * should probably be something longer. */ int value; + /** The action that this action reads from. Only valid for reads */ + const ModelAction *reads_from; + /** A back reference to a Node in NodeStack, if this ModelAction is * saved on the NodeStack. */ Node *node;