X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=funcinst.h;h=79ec01adaaffbfc84397aba37c878253b819b49e;hb=7d1b8dbe8d1839862c3db07e67a313d0e6efce81;hp=efdb43b4dbe88c9250cb62ecaca8848bbfce1f95;hpb=a177614511b9244854659a8d5f304d3e912c1658;p=c11tester.git diff --git a/funcinst.h b/funcinst.h index efdb43b4..79ec01ad 100644 --- a/funcinst.h +++ b/funcinst.h @@ -13,40 +13,70 @@ public: FuncInst(ModelAction *act, FuncNode *func_node); ~FuncInst(); - //ModelAction * get_action() const { return action; } const char * get_position() const { return position; } + void * get_location() const { return location; } + void set_location(void * loc) { location = loc; } + action_type get_type() const { return type; } + memory_order get_mo() const { return order; } FuncNode * get_func_node() const { return func_node; } bool add_pred(FuncInst * other); bool add_succ(FuncInst * other); FuncInst * search_in_collision(ModelAction *act); + void add_to_collision(FuncInst * inst); - func_inst_list_mt * get_collisions() { return &collisions; } func_inst_list_mt * get_preds() { return &predecessors; } func_inst_list_mt * get_succs() { return &successors; } bool is_read() const; bool is_write() const; + bool is_single_location() { return single_location; } + void not_single_location() { single_location = false; } + + void set_execution_number(int new_number) { execution_number = new_number; } + int get_execution_number() { return execution_number; } + + void set_associated_act(ModelAction * act, uint32_t marker); + ModelAction * get_associated_act(uint32_t marker); + + void print(); MEMALLOC private: - //ModelAction * const action; const char * position; + + /* Atomic operations with the same source line number may act at different + * memory locations, such as the next field of the head pointer in ms-queue. + * location only stores the memory location when this FuncInst was constructed. + */ void * location; + + /* NOTE: for rmw actions, func_inst and act may have different + * action types because of action type conversion in ModelExecution */ action_type type; + + memory_order order; FuncNode * func_node; - /* collisions store a list of FuncInsts with the same position - * but different action types. For example, CAS is broken down - * as three different atomic operations in cmodelint.cc */ + bool single_location; + int execution_number; + + ModelAction * associated_act; + uint32_t action_marker; + + /** + * Collisions store a list of FuncInsts with the same position + * but different action types. For example, + * volatile int x; x++; produces read and write + * actions with the same position. + */ func_inst_list_mt collisions; func_inst_list_mt predecessors; func_inst_list_mt successors; }; -#endif /* __FUNCINST_H__ */ - +#endif /* __FUNCINST_H__ */