X-Git-Url: http://plrg.eecs.uci.edu/git/?p=c11tester.git;a=blobdiff_plain;f=funcinst.h;h=3b2890f0bdafa33ea9e041b23ddfa47987eb3fac;hp=6cb8c1a1510ac7df84ca76f6d2fce05a91297592;hb=6b105d0bea24fa7a534d7f83e4c34dadc9d4b02d;hpb=6ded70495d74d65f8c6261b11685156b2325e709 diff --git a/funcinst.h b/funcinst.h index 6cb8c1a1..3b2890f0 100644 --- a/funcinst.h +++ b/funcinst.h @@ -1,3 +1,6 @@ +#ifndef __FUNCINST_H__ +#define __FUNCINST_H__ + #include "action.h" #include "hashtable.h" @@ -10,34 +13,53 @@ 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; } 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); + //FuncInst * search_in_collision(ModelAction *act); + //func_inst_list_mt * get_collisions() { return &collisions; } - 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 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; action_type type; + memory_order order; FuncNode * func_node; - /* collisions store a list of FuncInsts with the same position + bool single_location; + + /* Currently not in use. May remove this field later + * + * 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 */ - func_inst_list_mt collisions; + // func_inst_list_mt collisions; func_inst_list_mt predecessors; func_inst_list_mt successors; }; + +#endif /* __FUNCINST_H__ */ +