- Predicate * pred1 = new Predicate(curr_inst);
- pred1->add_predicate(EQUALITY, curr_inst->get_location(), 0);
-
- Predicate * pred2 = new Predicate(curr_inst);
- pred2->add_predicate(EQUALITY, curr_inst->get_location(), 1);
+// model_print("new predicate created at location: %p\n", curr_inst->get_location());
+ Predicate * new_pred1 = new Predicate(curr_inst);
+ new_pred1->add_predicate(EQUALITY, curr_inst->get_location(), true);
+
+ Predicate * new_pred2 = new Predicate(curr_inst);
+ new_pred2->add_predicate(EQUALITY, curr_inst->get_location(), false);
+
+ curr_pred->add_child(new_pred1);
+ curr_pred->add_child(new_pred2);
+
+ uint64_t last_read = read_val_map->get(prev_inst);
+ if ( last_read == read_val_map->get(curr_inst) )
+ curr_pred = new_pred1;
+ else
+ curr_pred = new_pred2;
+ } else {
+ Predicate * new_pred = new Predicate(curr_inst);
+ curr_pred->add_child(new_pred);
+ curr_pred = new_pred;