move the codes that add actions to thrd_func_act_lists from history.cc to ModelExecut...
authorweiyu <weiyuluo1232@gmail.com>
Mon, 5 Aug 2019 22:39:02 +0000 (15:39 -0700)
committerweiyu <weiyuluo1232@gmail.com>
Mon, 5 Aug 2019 22:39:02 +0000 (15:39 -0700)
execution.cc
execution.h
history.cc

index 70261b0faf7d35ca1a0694a0f3d6193b573bc84d..f978cd4c652def20ef733cb32dce2c04be4f5504 100644 (file)
@@ -1164,6 +1164,15 @@ void ModelExecution::add_action_to_lists(ModelAction *act)
                }
                (*vec)[tid].push_back(act);
        }
+
+       /* Update thrd_func_act_lists, list of actions in functions entered by each thread
+        * To be used by FuncNode and only care about actions with a position */
+       if (act->get_position() != NULL) {
+               SnapList<action_list_t *> * func_act_lists = thrd_func_act_lists[tid];
+               action_list_t * curr_act_list = func_act_lists->back();
+               ASSERT(curr_act_list != NULL);
+               curr_act_list->push_back(act);
+       }
 }
 
 void insertIntoActionList(action_list_t *list, ModelAction *act) {
@@ -1661,7 +1670,7 @@ Thread * ModelExecution::take_step(ModelAction *curr)
        curr = check_current_action(curr);
        ASSERT(curr);
 
-       /* Process this action in ModelHistory for records*/
+       /* Process this action in ModelHistory for records */
        model->get_history()->process_action( curr, curr->get_tid() );
 
        if (curr_thrd->is_blocked() || curr_thrd->is_complete())
index 343a5074c6363f40cc7bd60e2d7e7fdfed3f996b..a6add070aa288d93555ae2382315019c09b04f13 100644 (file)
@@ -210,8 +210,6 @@ private:
        /* Keeps track of atomic actions that thread i has performed in some
         * function. Index of SnapVector is thread id. SnapList simulates
         * the call stack.
-        *
-        * This data structure is handled by ModelHistory
         */
        SnapVector< SnapList<action_list_t *> *> thrd_func_act_lists;
        bool isfinished;
index 283c248f90cf0238e4d728e7c305c2ad2235aed4..782da5a3b01690b59081f194ff15f74dade1868f 100644 (file)
@@ -21,7 +21,7 @@ ModelHistory::ModelHistory() :
 void ModelHistory::enter_function(const uint32_t func_id, thread_id_t tid)
 {
        //model_print("thread %d entering func %d\n", tid, func_id);
-       uint32_t id = id_to_int(tid);
+       uint id = id_to_int(tid);
        SnapVector<func_id_list_t> * thrd_func_list = model->get_execution()->get_thrd_func_list();
        SnapVector< SnapList<action_list_t *> *> *
                thrd_func_act_lists = model->get_execution()->get_thrd_func_act_lists();
@@ -30,20 +30,18 @@ void ModelHistory::enter_function(const uint32_t func_id, thread_id_t tid)
                uint oldsize = thrd_func_list->size();
                thrd_func_list->resize( id + 1 );
                for (uint i = oldsize; i < id + 1; i++) {
-                       new(&(*thrd_func_list)[i]) func_id_list_t();
+                       new (&(*thrd_func_list)[i]) func_id_list_t();
                        // push 0 as a dummy function id to a void seg fault
                        (*thrd_func_list)[i].push_back(0);
                }
 
                thrd_func_act_lists->resize( id + 1 );
+               for (uint i = oldsize; i < id + 1; i++) {
+                       (*thrd_func_act_lists)[i] = new SnapList<action_list_t *>();
+               }
        }
 
-       SnapList<action_list_t *> * func_act_lists = thrd_func_act_lists->at(id);
-
-       if (func_act_lists == NULL) {
-               func_act_lists = new SnapList<action_list_t *>();
-               thrd_func_act_lists->at(id) = func_act_lists;
-       }
+       SnapList<action_list_t *> * func_act_lists = (*thrd_func_act_lists)[id];
 
        (*thrd_func_list)[id].push_back(func_id);
        func_act_lists->push_back( new action_list_t() );
@@ -60,7 +58,7 @@ void ModelHistory::exit_function(const uint32_t func_id, thread_id_t tid)
        SnapVector< SnapList<action_list_t *> *> *
                thrd_func_act_lists = model->get_execution()->get_thrd_func_act_lists();
 
-       SnapList<action_list_t *> * func_act_lists = thrd_func_act_lists->at(id);
+       SnapList<action_list_t *> * func_act_lists = (*thrd_func_act_lists)[id];
        uint32_t last_func_id = (*thrd_func_list)[id].back();
 
        if (last_func_id == func_id) {
@@ -101,8 +99,6 @@ void ModelHistory::process_action(ModelAction *act, thread_id_t tid)
        /* return if thread i has not entered any function or has exited
           from all functions */
        SnapVector<func_id_list_t> * thrd_func_list = model->get_execution()->get_thrd_func_list();
-       SnapVector< SnapList<action_list_t *> *> *
-               thrd_func_act_lists = model->get_execution()->get_thrd_func_act_lists();
 
        uint32_t id = id_to_int(tid);
        if ( thrd_func_list->size() <= id )
@@ -110,7 +106,6 @@ void ModelHistory::process_action(ModelAction *act, thread_id_t tid)
 
        /* get the function id that thread i is currently in */
        uint32_t func_id = (*thrd_func_list)[id].back();
-       SnapList<action_list_t *> * func_act_lists = thrd_func_act_lists->at(id);
 
        if (func_id == 0)
                return;
@@ -129,11 +124,6 @@ void ModelHistory::process_action(ModelAction *act, thread_id_t tid)
 
        if (act->is_write())
                add_to_write_history(act->get_location(), act->get_write_value());
-
-       /* add to curr_inst_list */
-       action_list_t * curr_act_list = func_act_lists->back();
-       ASSERT(curr_act_list != NULL);
-       curr_act_list->push_back(act);
 }
 
 /* return the FuncNode given its func_id  */