X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=action.cc;h=f00a14313ed6a3af079c4b771f41ca1dd32c30e4;hb=6898da1b7c46ddf3427ea0127dc68f8cc6016511;hp=3059e0d94be8a90c5db19ce0114cc44062f9c6aa;hpb=c44681494532fc9b3cec1e9148324025a635017b;p=c11tester.git diff --git a/action.cc b/action.cc index 3059e0d9..f00a1431 100644 --- a/action.cc +++ b/action.cc @@ -8,7 +8,6 @@ #include "clockvector.h" #include "common.h" #include "threads-model.h" -#include "nodestack.h" #include "wildcard.h" #define ACTION_INITIAL_CLOCK 0 @@ -37,8 +36,9 @@ ModelAction::ModelAction(action_type_t type, memory_order order, void *loc, position(NULL), reads_from(NULL), last_fence_release(NULL), - node(NULL), + uninitaction(NULL), cv(NULL), + rf_cv(NULL), value(value), type(type), order(order), @@ -49,7 +49,7 @@ ModelAction::ModelAction(action_type_t type, memory_order order, void *loc, ASSERT(loc || type == ATOMIC_FENCE || type == NOOP); Thread *t = thread ? thread : thread_current(); - this->tid = t->get_id(); + this->tid = t!= NULL ? t->get_id() : -1; } @@ -71,8 +71,9 @@ ModelAction::ModelAction(action_type_t type, memory_order order, void *loc, position(NULL), reads_from(NULL), last_fence_release(NULL), - node(NULL), + uninitaction(NULL), cv(NULL), + rf_cv(NULL), value(value), type(type), order(order), @@ -105,8 +106,9 @@ ModelAction::ModelAction(action_type_t type, const char * position, memory_order position(position), reads_from(NULL), last_fence_release(NULL), - node(NULL), + uninitaction(NULL), cv(NULL), + rf_cv(NULL), value(value), type(type), order(order), @@ -140,8 +142,9 @@ ModelAction::ModelAction(action_type_t type, const char * position, memory_order position(position), reads_from(NULL), last_fence_release(NULL), - node(NULL), + uninitaction(NULL), cv(NULL), + rf_cv(NULL), value(value), type(type), order(order), @@ -259,7 +262,7 @@ bool ModelAction::is_read() const bool ModelAction::is_write() const { - return type == ATOMIC_WRITE || type == ATOMIC_RMW || type == ATOMIC_INIT || type == ATOMIC_UNINIT; + return type == ATOMIC_WRITE || type == ATOMIC_RMW || type == ATOMIC_INIT || type == ATOMIC_UNINIT || type == NONATOMIC_WRITE; } bool ModelAction::could_be_write() const @@ -579,19 +582,11 @@ uint64_t ModelAction::get_return_value() const return value; } -/** @return The Node associated with this ModelAction */ -Node * ModelAction::get_node() const -{ - /* UNINIT actions do not have a Node */ - ASSERT(!is_uninitialized()); - return node; -} - /** * Update the model action's read_from action * @param act The action to read from; should be a write */ -void ModelAction::set_read_from(const ModelAction *act) +void ModelAction::set_read_from(ModelAction *act) { ASSERT(act); @@ -599,9 +594,9 @@ void ModelAction::set_read_from(const ModelAction *act) if (act->is_uninitialized()) { // WL uint64_t val = *((uint64_t *) location); - ModelAction * act_initialized = (ModelAction *)act; - act_initialized->set_value(val); - reads_from = (const ModelAction *)act_initialized; + ModelAction * act_uninitialized = (ModelAction *)act; + act_uninitialized->set_value(val); + reads_from = act_uninitialized; // disabled by WL, because LLVM IR is unable to detect atomic init /* model->assert_bug("May read from uninitialized atomic:\n" @@ -650,11 +645,13 @@ const char * ModelAction::get_type_str() const case THREAD_YIELD: return "thread yield"; case THREAD_JOIN: return "thread join"; case THREAD_FINISH: return "thread finish"; + case THREADONLY_FINISH: return "pthread_exit finish"; case PTHREAD_CREATE: return "pthread create"; case PTHREAD_JOIN: return "pthread join"; case ATOMIC_UNINIT: return "uninitialized"; + case NONATOMIC_WRITE: return "nonatomic write"; case ATOMIC_READ: return "atomic read"; case ATOMIC_WRITE: return "atomic write"; case ATOMIC_RMW: return "atomic rmw";