X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=funcnode.h;h=f4db0e86d6662cd8c43a2a51e6f7a71cd84f8432;hb=4d1d81928c3688fbcfb96ee68eab70e73f7771e5;hp=ea591a2e05ba5426c0e553b11cacfa609c0df078;hpb=a7b4dab68db8b1fc466a7ca4098d5a6fb006e353;p=c11tester.git diff --git a/funcnode.h b/funcnode.h index ea591a2e..f4db0e86 100644 --- a/funcnode.h +++ b/funcnode.h @@ -36,7 +36,7 @@ public: void update_tree(action_list_t * act_list); void update_inst_tree(func_inst_list_t * inst_list); void update_predicate_tree(action_list_t * act_list); - bool follow_branch(Predicate ** curr_pred, FuncInst * next_inst, ModelAction * next_act, SnapVector * unset_predicates); + bool follow_branch(Predicate ** curr_pred, FuncInst * next_inst, ModelAction * next_act, Predicate ** unset_predicate); void incr_exit_count() { exit_count++; } uint32_t get_exit_count() { return exit_count; } @@ -61,8 +61,6 @@ public: int compute_distance(FuncNode * target, int max_step = MAX_DIST); void print_predicate_tree(); - void print_val_loc_map(); - void print_last_read(thread_id_t tid); MEMALLOC private: @@ -72,7 +70,6 @@ private: Predicate * predicate_tree_entry; // A dummy node whose children are the real entries Predicate * predicate_tree_exit; // A dummy node - uint32_t exit_count; uint32_t marker; @@ -89,9 +86,18 @@ private: /* Possible entry atomic actions in this function */ func_inst_list_mt entry_insts; - void infer_predicates(FuncInst * next_inst, ModelAction * next_act, HashTable * loc_act_map, SnapVector * half_pred_expressions); - void generate_predicates(Predicate ** curr_pred, FuncInst * next_inst, SnapVector * half_pred_expressions); - bool amend_predicate_expr(Predicate ** curr_pred, FuncInst * next_inst, ModelAction * next_act); + /* Map a FuncInst to the its predicate when updating predicate trees */ + HashTable inst_pred_map; + + /* Number FuncInsts to detect loops when updating predicate trees */ + HashTable inst_id_map; + + /* Delect read actions at the same locations when updating predicate trees */ + HashTable loc_act_map; + + void infer_predicates(FuncInst * next_inst, ModelAction * next_act, SnapVector * half_pred_expressions); + void generate_predicates(Predicate * curr_pred, FuncInst * next_inst, SnapVector * half_pred_expressions); + bool amend_predicate_expr(Predicate * curr_pred, FuncInst * next_inst, ModelAction * next_act); /* Store action_lists when calls to update_tree are deferred */ SnapList * action_list_buffer; @@ -112,12 +118,16 @@ private: /* Run-time position in the predicate tree for each thread */ ModelVector predicate_tree_position; + PredSet predicate_leaves; /* Store the relation between this FuncNode and other FuncNodes */ HashTable edge_table; /* FuncNodes that follow this node */ ModelList out_edges; + + void assign_initial_weight(); + void update_predicate_tree_weight(); }; -#endif /* __FUNCNODE_H__ */ +#endif /* __FUNCNODE_H__ */