X-Git-Url: http://plrg.eecs.uci.edu/git/?p=c11tester.git;a=blobdiff_plain;f=predicate.h;h=dbb959ea4b0cb84cee1bcbc198f71bf741547654;hp=6d0dbc4be4232e4a37e0537bde79894db83fecb5;hb=6b105d0bea24fa7a534d7f83e4c34dadc9d4b02d;hpb=9807d4fb3a539caff50f125402bd0bddb7478cc6 diff --git a/predicate.h b/predicate.h index 6d0dbc4b..dbb959ea 100644 --- a/predicate.h +++ b/predicate.h @@ -6,8 +6,8 @@ unsigned int pred_expr_hash (struct pred_expr *); bool pred_expr_equal(struct pred_expr *, struct pred_expr *); -typedef HashSet PredSet; -typedef HSIterator PredSetIter; +typedef HashSet PredExprSet; +typedef HSIterator PredExprSetIter; typedef enum predicate_token { EQUALITY, NULLITY @@ -34,13 +34,22 @@ struct pred_expr { class Predicate { public: - Predicate(FuncInst * func_inst); + Predicate(FuncInst * func_inst, bool is_entry = false); ~Predicate(); FuncInst * get_func_inst() { return func_inst; } - PredSet * get_predicates() { return &predicates; } + PredExprSet * get_pred_expressions() { return &pred_expressions; } void add_predicate(token_t token, void * location, bool value); void add_child(Predicate * child); + void set_parent(Predicate * parent_pred) { parent = parent_pred; } + void set_backedge(Predicate * back_pred) { backedge = back_pred; } + + ModelVector * get_children() { return &children; } + Predicate * get_parent() { return parent; } + Predicate * get_backedge() { return backedge; } + + bool is_entry_predicate() { return entry_predicate; } + void set_entry_predicate() { entry_predicate = true; } void print_predicate(); void print_pred_subtree(); @@ -48,9 +57,17 @@ public: MEMALLOC private: FuncInst * func_inst; - /* may have multiple precicates */ - PredSet predicates; + bool entry_predicate; + + /* may have multiple predicates */ + PredExprSet pred_expressions; ModelVector children; + + /* only a single parent may exist */ + Predicate * parent; + + /* assume almost one back edge exists */ + Predicate * backedge; }; #endif /* __PREDICATE_H__ */