X-Git-Url: http://plrg.eecs.uci.edu/git/?p=c11tester.git;a=blobdiff_plain;f=funcnode.h;h=58fcc7a01ab77a4078429602cc7ed39b73580fc8;hp=08e07fb188ffcbd009f2ee6b160f0b674fd97935;hb=332eb3dfeb0f0272f4dbe3a3b10a8ff4bf3bb188;hpb=a177614511b9244854659a8d5f304d3e912c1658 diff --git a/funcnode.h b/funcnode.h index 08e07fb1..58fcc7a0 100644 --- a/funcnode.h +++ b/funcnode.h @@ -4,6 +4,8 @@ #include "action.h" #include "funcinst.h" #include "hashtable.h" +#include "hashset.h" +#include "predicate.h" typedef ModelList func_inst_list_mt; typedef HashTable read_map_t; @@ -18,20 +20,25 @@ public: void set_func_id(uint32_t id) { func_id = id; } void set_func_name(const char * name) { func_name = name; } - FuncInst * get_or_add_action(ModelAction *act); + void add_inst(ModelAction *act); + FuncInst * get_inst(ModelAction *act); HashTable * getFuncInstMap() { return &func_inst_map; } func_inst_list_mt * get_inst_list() { return &inst_list; } func_inst_list_mt * get_entry_insts() { return &entry_insts; } void add_entry_inst(FuncInst * inst); - void link_insts(func_inst_list_t * inst_list); + + void update_tree(action_list_t * act_list); + void update_inst_tree(func_inst_list_t * inst_list); void store_read(ModelAction * act, uint32_t tid); uint64_t query_last_read(void * location, uint32_t tid); void clear_read_map(uint32_t tid); /* TODO: generate EQUALITY or NULLITY predicate based on write_history in history.cc */ - void generate_predicate(FuncInst * func_inst); + void update_predicate_tree(func_inst_list_t * inst_list, HashTable * read_val_map); + bool follow_branch(Predicate ** curr_pred, FuncInst * next_inst, HashTable * read_val_map, HashTable* loc_inst_map); + void print_predicate_tree(); void print_last_read(uint32_t tid); @@ -39,6 +46,7 @@ public: private: uint32_t func_id; const char * func_name; + bool predicate_tree_initialized; /* Use source line number as the key of hashtable, to check if * atomic operation with this line number has been added or not @@ -53,7 +61,11 @@ private: /* Store the values read by atomic read actions per memory location for each thread */ ModelVector thrd_read_map; - ModelList read_locations; + + PredSet predicate_tree_entry; + + /* A FuncInst may correspond to multiple Predicates, so collect them into a PredSet */ + HashTable inst_pred_map; }; #endif /* __FUNCNODE_H__ */