{
predicate_tree_entry = new Predicate(NULL, true);
predicate_tree_entry->add_predicate_expr(NOPREDICATE, NULL, true);
+ predicate_tree_exit = new Predicate(NULL, false, true);
- // Memories that are reclaimed after each execution
+ /* Snapshot data structures below */
action_list_buffer = new SnapList<action_list_t *>();
read_locations = new loc_set_t();
write_locations = new loc_set_t();
- val_loc_map = new HashTable<uint64_t, loc_set_t *, uint64_t, 0>();
+ val_loc_map = new HashTable<uint64_t, loc_set_t *, uint64_t, 0, snapshot_malloc, snapshot_calloc, snapshot_free, int64_hash>();
loc_may_equal_map = new HashTable<void *, loc_set_t *, uintptr_t, 0>();
//values_may_read_from = new value_set_t();
action_list_buffer = new SnapList<action_list_t *>();
read_locations = new loc_set_t();
write_locations = new loc_set_t();
- val_loc_map = new HashTable<uint64_t, loc_set_t *, uint64_t, 0>();
+ val_loc_map = new HashTable<uint64_t, loc_set_t *, uint64_t, 0, snapshot_malloc, snapshot_calloc, snapshot_free, int64_hash>();
loc_may_equal_map = new HashTable<void *, loc_set_t *, uintptr_t, 0>();
//values_may_read_from = new value_set_t();
curr_pred->add_backedge(back_pred);
curr_pred = back_pred;
-
continue;
}
}
inst_id_map.put(next_inst, inst_counter++);
it = it->getNext();
+ /*-- curr_pred->incr_expl_count(); */
}
+
+ curr_pred->set_exit(predicate_tree_exit);
}
/* Given curr_pred and next_inst, find the branch following curr_pred that
{
model_print("digraph function_%s {\n", func_name);
predicate_tree_entry->print_pred_subtree();
+ predicate_tree_exit->print_predicate();
model_print("}\n"); // end of graph
}