Predicate * selectBranch(thread_id_t tid, Predicate * curr_pred, FuncInst * read_inst);
bool prune_writes(thread_id_t tid, Predicate * pred, SnapVector<ModelAction *> * rf_set, inst_act_map_t * inst_act_map);
int choose_branch_index(SnapVector<Predicate *> * branches);
Predicate * selectBranch(thread_id_t tid, Predicate * curr_pred, FuncInst * read_inst);
bool prune_writes(thread_id_t tid, Predicate * pred, SnapVector<ModelAction *> * rf_set, inst_act_map_t * inst_act_map);
int choose_branch_index(SnapVector<Predicate *> * branches);