run tabbing pass
[c11tester.git] / history.cc
index 7452c5c1916b310d3eff2684830cb80eff2148f2..cdb642fd3fefd50a8a121a6400ce5f53279b20fd 100644 (file)
@@ -10,7 +10,7 @@
 
 /** @brief Constructor */
 ModelHistory::ModelHistory() :
-       func_counter(0), /* function id starts with 0 */
+       func_counter(0),        /* function id starts with 0 */
        func_map(),
        func_map_rev(),
        func_atomics()
@@ -22,7 +22,7 @@ void ModelHistory::enter_function(const uint32_t func_id, thread_id_t tid)
        uint32_t id = id_to_int(tid);
        SnapVector<func_id_list_t *> * thrd_func_list = model->get_execution()->get_thrd_func_list();
        SnapVector< SnapList<func_inst_list_t *> *> *
-                       thrd_func_inst_lists = model->get_execution()->get_thrd_func_inst_lists();
+               thrd_func_inst_lists = model->get_execution()->get_thrd_func_inst_lists();
 
        if ( thrd_func_list->size() <= id ) {
                thrd_func_list->resize( id + 1 );
@@ -46,12 +46,13 @@ void ModelHistory::enter_function(const uint32_t func_id, thread_id_t tid)
        func_inst_lists->push_back( new func_inst_list_t() );
 }
 
+/* @param func_id a non-zero value */
 void ModelHistory::exit_function(const uint32_t func_id, thread_id_t tid)
 {
        uint32_t id = id_to_int(tid);
        SnapVector<func_id_list_t *> * thrd_func_list = model->get_execution()->get_thrd_func_list();
        SnapVector< SnapList<func_inst_list_t *> *> *
-                       thrd_func_inst_lists = model->get_execution()->get_thrd_func_inst_lists();
+               thrd_func_inst_lists = model->get_execution()->get_thrd_func_inst_lists();
 
        func_id_list_t * func_list = thrd_func_list->at(id);
        SnapList<func_inst_list_t *> * func_inst_lists = thrd_func_inst_lists->at(id);
@@ -78,7 +79,7 @@ void ModelHistory::add_func_atomic(ModelAction *act, thread_id_t tid)
           from all functions */
        SnapVector<func_id_list_t *> * thrd_func_list = model->get_execution()->get_thrd_func_list();
        SnapVector< SnapList<func_inst_list_t *> *> *
-                       thrd_func_inst_lists = model->get_execution()->get_thrd_func_inst_lists();
+               thrd_func_inst_lists = model->get_execution()->get_thrd_func_inst_lists();
 
        uint32_t id = id_to_int(tid);
        if ( thrd_func_list->size() <= id )
@@ -121,9 +122,17 @@ void ModelHistory::link_insts(func_inst_list_t * inst_list)
                return;
 
        func_inst_list_t::iterator it = inst_list->begin();
-       func_inst_list_t::iterator prev = inst_list->end();
-       it++;
+       func_inst_list_t::iterator prev;
+
+       if (inst_list->size() == 0)
+               return;
 
+       /* add the first instruction to the list of entry insts */
+       FuncInst * entry_inst = *it;
+       FuncNode * func_node = entry_inst->get_func_node();
+       func_node->add_entry_inst(entry_inst);
+
+       it++;
        while (it != inst_list->end()) {
                prev = it;
                prev--;
@@ -140,18 +149,29 @@ void ModelHistory::link_insts(func_inst_list_t * inst_list)
 
 void ModelHistory::print()
 {
-       for (uint32_t i = 0; i < func_atomics.size(); i++ ) {
+       for (uint32_t i = 0;i < func_atomics.size();i++ ) {
                FuncNode * funcNode = func_atomics[i];
-               func_inst_list_mt * inst_list = funcNode->get_inst_list();
-
                if (funcNode == NULL)
                        continue;
 
-               model_print("function %s has following actions\n", funcNode->get_func_name());
+               func_inst_list_mt * entry_insts = funcNode->get_entry_insts();
+
+               model_print("function %s has entry actions\n", funcNode->get_func_name());
                func_inst_list_mt::iterator it;
-               for (it = inst_list->begin(); it != inst_list->end(); it++) {
+               for (it = entry_insts->begin();it != entry_insts->end();it++) {
                        FuncInst *inst = *it;
                        model_print("type: %d, at: %s\n", inst->get_type(), inst->get_position());
                }
+
+/*
+                func_inst_list_mt * inst_list = funcNode->get_inst_list();
+
+                model_print("function %s has following actions\n", funcNode->get_func_name());
+                func_inst_list_mt::iterator it;
+                for (it = inst_list->begin(); it != inst_list->end(); it++) {
+                        FuncInst *inst = *it;
+                        model_print("type: %d, at: %s\n", inst->get_type(), inst->get_position());
+                }
+ */
        }
 }