/** @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()
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 );
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);
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 )
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--;
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());
+ }
+ */
}
}