reorder fields to save space
authorbdemsky <bdemsky@uci.edu>
Wed, 12 Jun 2019 20:02:23 +0000 (13:02 -0700)
committerbdemsky <bdemsky@uci.edu>
Wed, 12 Jun 2019 20:02:23 +0000 (13:02 -0700)
action.cc
action.h

index bbbeceea28cf7c683dced7d95111b624e00576ce..d4cdb5303bfbdf58e7ba104e5cf9f7514822bc4c 100644 (file)
--- a/action.cc
+++ b/action.cc
  */
 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),
        last_fence_release(NULL),
        node(NULL),
-       seq_number(ACTION_INITIAL_CLOCK),
-       cv(NULL)
+       cv(NULL),
+       value(value),
+       type(type),
+       order(order),
+       original_order(order),
+       seq_number(ACTION_INITIAL_CLOCK)
 {
        /* References to NULL atomic variables can end up here */
        ASSERT(loc || type == ATOMIC_FENCE);
@@ -66,16 +66,16 @@ ModelAction::ModelAction(action_type_t type, memory_order order, void *loc,
  */
 ModelAction::ModelAction(action_type_t type, memory_order order, void *loc,
                                                                                                 uint64_t value, int size) :
-       type(type),
-       order(order),
-       original_order(order),
        location(loc),
-       value(value),
        reads_from(NULL),
        last_fence_release(NULL),
        node(NULL),
-       seq_number(ACTION_INITIAL_CLOCK),
-       cv(NULL)
+       cv(NULL),
+       value(value),
+       type(type),
+       order(order),
+       original_order(order),
+       seq_number(ACTION_INITIAL_CLOCK)
 {
        /* References to NULL atomic variables can end up here */
        ASSERT(loc);
@@ -465,7 +465,7 @@ uint64_t ModelAction::get_reads_from_value() const
        ASSERT(is_read());
        if (reads_from)
                return reads_from->get_write_value();
-       return VALUE_NONE;                      /* Only for new actions with no reads-from */
+       return VALUE_NONE;   // Only for new actions with no reads-from
 }
 
 /**
@@ -523,7 +523,7 @@ void ModelAction::set_read_from(const ModelAction *act)
 
        reads_from = act;
 
-       if (act->is_uninitialized()) {                  // WL
+       if (act->is_uninitialized()) {                                                                                                // WL
                uint64_t val = *((uint64_t *) location);
                ModelAction * act_initialized = (ModelAction *)act;
                act_initialized->set_value(val);
index 662d7d7b4c610ee31f2358f8a2e5ea6f15562bce..e831df803331a8c55d8689c6bdeda28fc8221287 100644 (file)
--- a/action.h
+++ b/action.h
@@ -47,32 +47,29 @@ using std::memory_order_seq_cst;
 /** @brief Represents an action type, identifying one of several types of
  * ModelAction */
 typedef enum action_type {
-       THREAD_CREATE,                                                  /**< A thread creation action */
-       THREAD_START,                                                           /**< First action in each thread */
-       THREAD_YIELD,                                                           /**< A thread yield action */
-       THREAD_JOIN,                                                            /**< A thread join action */
-       THREAD_FINISH,                                                  /**< A thread completion action */
-       PTHREAD_CREATE,                                                 /**< A pthread creation action */
-       PTHREAD_JOIN,                                                           /**< A pthread join action */
-
-       ATOMIC_UNINIT,                                                  /**< Represents an uninitialized atomic */
-       ATOMIC_READ,                                                            /**< An atomic read action */
-       ATOMIC_WRITE,                                                           /**< An atomic write action */
-       ATOMIC_RMWR,                                                            /**< The read part of an atomic RMW action */
-       ATOMIC_RMWRCAS,                                                         /**< The read part of an atomic RMW action */
-       ATOMIC_RMW,                                                                     /**< The write part of an atomic RMW action */
-       ATOMIC_RMWC,                                                            /**< Convert an atomic RMW action into a READ */
-       ATOMIC_INIT,                                                            /**< Initialization of an atomic object (e.g.,
-                                                                                                                        *   atomic_init()) */
-       ATOMIC_FENCE,                                                           /**< A fence action */
-       ATOMIC_LOCK,                                                            /**< A lock action */
-       ATOMIC_TRYLOCK,                                                 /**< A trylock action */
-       ATOMIC_UNLOCK,                                                  /**< An unlock action */
-       ATOMIC_NOTIFY_ONE,                                      /**< A notify_one action */
-       ATOMIC_NOTIFY_ALL,                                      /**< A notify all action */
-       ATOMIC_WAIT,                                                            /**< A wait action */
-       ATOMIC_ANNOTATION,                                      /**< An annotation action to pass information
-                                                                                                                                                                                                 to a trace analysis */
+       THREAD_CREATE, // < A thread creation action
+       THREAD_START, // < First action in each thread
+       THREAD_YIELD, // < A thread yield action
+       THREAD_JOIN,  // < A thread join action
+       THREAD_FINISH, // < A thread completion action
+       PTHREAD_CREATE, // < A pthread creation action
+       PTHREAD_JOIN, // < A pthread join action
+       ATOMIC_UNINIT, // < Represents an uninitialized atomic
+       ATOMIC_READ,  // < An atomic read action
+       ATOMIC_WRITE, // < An atomic write action
+       ATOMIC_RMWR, // < The read part of an atomic RMW action
+       ATOMIC_RMWRCAS,  // < The read part of an atomic RMW action
+       ATOMIC_RMW, // < The write part of an atomic RMW action
+       ATOMIC_RMWC,  // < Convert an atomic RMW action into a READ
+       ATOMIC_INIT, // < Initialization of an atomic object (e.g., atomic_init())
+       ATOMIC_FENCE, // < A fence action
+       ATOMIC_LOCK,  // < A lock action
+       ATOMIC_TRYLOCK,  // < A trylock action
+       ATOMIC_UNLOCK, // < An unlock action
+       ATOMIC_NOTIFY_ONE, // < A notify_one action
+       ATOMIC_NOTIFY_ALL,  // < A notify all action
+       ATOMIC_WAIT,  // < A wait action
+       ATOMIC_ANNOTATION, // < An annotation action to pass information to a trace analysis
        NOOP
 } action_type_t;
 
@@ -153,9 +150,7 @@ public:
        bool is_conflicting_lock(const ModelAction *act) const;
        bool could_synchronize_with(const ModelAction *act) const;
        int getSize() const;
-
        Thread * get_thread_operand() const;
-
        void create_cv(const ModelAction *parent = NULL);
        ClockVector * get_cv() const { return cv; }
        bool synchronize_with(const ModelAction *act);
@@ -172,41 +167,21 @@ public:
 
        void process_rmw(ModelAction * act);
        void copy_typeandorder(ModelAction * act);
-
        unsigned int hash() const;
-
        bool equals(const ModelAction *x) const { return this == x; }
-
-       MEMALLOC
-
        void set_value(uint64_t val) { value = val; }
 
        /* to accomodate pthread create and join */
        Thread * thread_operand;
        void set_thread_operand(Thread *th) { thread_operand = th; }
+       MEMALLOC
 private:
-
        const char * get_type_str() const;
        const char * get_mo_str() const;
 
-       /** @brief Type of action (read, write, RMW, fence, thread create, etc.) */
-       action_type type;
-
-       /** @brief The memory order for this operation. */
-       memory_order order;
-
-       /** @brief The original memory order parameter for this operation. */
-       memory_order original_order;
-
        /** @brief A pointer to the memory location for this action. */
        void *location;
 
-       /** @brief The thread id that performed this action. */
-       thread_id_t tid;
-
-       /** @brief The value written (for write or RMW; undefined for read) */
-       uint64_t value;
-
        union {
                /**
                 * @brief The store that this action reads from
@@ -216,6 +191,7 @@ private:
                const ModelAction *reads_from;
                int size;
        };
+
        /** @brief The last fence release from the same thread */
        const ModelAction *last_fence_release;
 
@@ -227,14 +203,6 @@ private:
         */
        Node *node;
 
-       /**
-        * @brief The sequence number of this action
-        *
-        * Except for ATOMIC_UNINIT actions, this number should be unique and
-        * should represent the action's position in the execution order.
-        */
-       modelclock_t seq_number;
-
        /**
         * @brief The clock vector for this operation
         *
@@ -243,6 +211,29 @@ private:
         * vectors for all operations.
         */
        ClockVector *cv;
+
+       /** @brief The value written (for write or RMW; undefined for read) */
+       uint64_t value;
+
+       /** @brief Type of action (read, write, RMW, fence, thread create, etc.) */
+       action_type type;
+
+       /** @brief The memory order for this operation. */
+       memory_order order;
+
+       /** @brief The original memory order parameter for this operation. */
+       memory_order original_order;
+
+       /** @brief The thread id that performed this action. */
+       thread_id_t tid;
+
+       /**
+        * @brief The sequence number of this action
+        *
+        * Except for ATOMIC_UNINIT actions, this number should be unique and
+        * should represent the action's position in the execution order.
+        */
+       modelclock_t seq_number;
 };
 
 #endif/* __ACTION_H__ */