X-Git-Url: http://plrg.eecs.uci.edu/git/?p=c11tester.git;a=blobdiff_plain;f=predicate.cc;h=77f362dafd9c4f8ea29e465a3c01f5f99ea9172c;hp=00eaaa0259642aa0b590b67e999638107dd2f0f8;hb=7ecb1872e35ceba59b6949aa3942521e01920bd6;hpb=7594d7ae8eda38fbb5a3ac3d6f33fffbb365b7bd diff --git a/predicate.cc b/predicate.cc index 00eaaa02..77f362da 100644 --- a/predicate.cc +++ b/predicate.cc @@ -1,11 +1,17 @@ #include "predicate.h" -Predicate::Predicate(FuncInst * func_inst) : - func_inst(func_inst) +Predicate::Predicate(FuncInst * func_inst, bool is_entry) : + func_inst(func_inst), + entry_predicate(is_entry), + pred_expressions(), + children(), + parents(), + backedge(NULL) {} -unsigned int pred_expr_hash(struct pred_expr * expr) { - return (unsigned int)((uintptr_t)hash); +unsigned int pred_expr_hash(struct pred_expr * expr) +{ + return (unsigned int)((uintptr_t)expr); } bool pred_expr_equal(struct pred_expr * p1, struct pred_expr * p2) @@ -21,6 +27,53 @@ bool pred_expr_equal(struct pred_expr * p1, struct pred_expr * p2) void Predicate::add_predicate(token_t token, void * location, bool value) { - struct pred_expr = {token, location, value}; - predicates.add(&predicate); + struct pred_expr *ptr = new pred_expr(token, location, value); + pred_expressions.add(ptr); +} + +void Predicate::add_child(Predicate * child) +{ + /* check duplication? */ + children.push_back(child); +} + +void Predicate::add_parent(Predicate * parent) +{ + /* check duplication? */ + parents.push_back(parent); +} + +void Predicate::print_predicate() +{ + model_print("\"%p\" [shape=box, label=\"\n", this); + if (entry_predicate) { + model_print("entry node\"];\n"); + return; + } + + func_inst->print(); + + PredExprSetIter * it = pred_expressions.iterator(); + + if (pred_expressions.getSize() == 0) + model_print("no predicate\n"); + + while (it->hasNext()) { + struct pred_expr * expr = it->next(); + model_print("predicate: token: %d, location: %p, value: %d\n", expr->token, expr->location, expr->value); + } + model_print("\"];\n"); +} + +void Predicate::print_pred_subtree() +{ + print_predicate(); + for (uint i = 0; i < children.size(); i++) { + Predicate * child = children[i]; + child->print_pred_subtree(); + model_print("\"%p\" -> \"%p\"\n", this, child); + } + + if (backedge != NULL) + model_print("\"%p\" -> \"%p\"[style=dashed, color=grey]\n", this, backedge); }