sllnode<ModelAction *>* insertIntoActionList(action_list_t *list, ModelAction *act) {
sllnode<ModelAction*> * rit = list->end();
modelclock_t next_seq = act->get_seq_number();
- if (rit == NULL || (rit->getVal()->get_seq_number() == next_seq))
+ if (rit == NULL || (rit->getVal()->get_seq_number() <= next_seq))
return list->add_back(act);
else {
for(;rit != NULL;rit=rit->getPrev()) {
- if (rit->getVal()->get_seq_number() == next_seq) {
+ if (rit->getVal()->get_seq_number() <= next_seq) {
return list->insertAfter(rit, act);
}
}
if (rit == NULL) {
act->create_cv(NULL);
return NULL;
- } else if (rit->getVal()->get_seq_number() == next_seq) {
+ } else if (rit->getVal()->get_seq_number() <= next_seq) {
act->create_cv(rit->getVal());
return list->add_back(act);
} else {
for(;rit != NULL;rit=rit->getPrev()) {
- if (rit->getVal()->get_seq_number() == next_seq) {
+ if (rit->getVal()->get_seq_number() <= next_seq) {
act->create_cv(rit->getVal());
return list->insertAfter(rit, act);
}
* @return true if branch found, false otherwise.
*/
bool FuncNode::follow_branch(Predicate ** curr_pred, FuncInst * next_inst,
-ModelAction * next_act, Predicate ** unset_predicate)
+ ModelAction * next_act, Predicate ** unset_predicate)
{
/* Check if a branch with func_inst and corresponding predicate exists */
bool branch_found = false;
bool equality;
switch(pred_expression->token) {
- case NOPREDICATE:
- predicate_correct = true;
- break;
- case EQUALITY:
- FuncInst * to_be_compared;
- ModelAction * last_act;
+ case NOPREDICATE:
+ predicate_correct = true;
+ break;
+ case EQUALITY:
+ FuncInst * to_be_compared;
+ ModelAction * last_act;
- to_be_compared = pred_expression->func_inst;
- last_act = to_be_compared->get_associated_act(marker);
+ to_be_compared = pred_expression->func_inst;
+ last_act = to_be_compared->get_associated_act(marker);
- last_read = last_act->get_reads_from_value();
- next_read = next_act->get_reads_from_value();
- equality = (last_read == next_read);
- if (equality != pred_expression->value)
- predicate_correct = false;
+ last_read = last_act->get_reads_from_value();
+ next_read = next_act->get_reads_from_value();
+ equality = (last_read == next_read);
+ if (equality != pred_expression->value)
+ predicate_correct = false;
- break;
- case NULLITY:
- next_read = next_act->get_reads_from_value();
- // TODO: implement likely to be null
- equality = ( (void*) (next_read & 0xffffffff) == NULL);
- if (equality != pred_expression->value)
- predicate_correct = false;
- break;
- default:
+ break;
+ case NULLITY:
+ next_read = next_act->get_reads_from_value();
+ // TODO: implement likely to be null
+ equality = ( (void*) (next_read & 0xffffffff) == NULL);
+ if (equality != pred_expression->value)
predicate_correct = false;
- model_print("unkown predicate token\n");
- break;
+ break;
+ default:
+ predicate_correct = false;
+ model_print("unkown predicate token\n");
+ break;
}
}
/* Infer predicate expressions, which are generated in FuncNode::generate_predicates */
void FuncNode::infer_predicates(FuncInst * next_inst, ModelAction * next_act,
-SnapVector<struct half_pred_expr *> * half_pred_expressions)
+ SnapVector<struct half_pred_expr *> * half_pred_expressions)
{
void * loc = next_act->get_location();
/* Able to generate complex predicates when there are multiple predciate expressions */
void FuncNode::generate_predicates(Predicate * curr_pred, FuncInst * next_inst,
-SnapVector<struct half_pred_expr *> * half_pred_expressions)
+ SnapVector<struct half_pred_expr *> * half_pred_expressions)
{
if (half_pred_expressions->size() == 0) {
Predicate * new_pred = new Predicate(next_inst);
ModelVector<Predicate *> * children = curr_pred->get_children();
Predicate * unset_pred = NULL;
- for (uint i = 0; i < children->size(); i++) {
+ for (uint i = 0;i < children->size();i++) {
Predicate * child = (*children)[i];
if (child->get_func_inst() == next_inst) {
unset_pred = child;
template<typename _Tp>
static int partition(ModelVector<_Tp *> * arr, int low, int high)
{
- unsigned int pivot = (*arr)[high]->get_depth();
+ unsigned int pivot = (*arr)[high] -> get_depth();
int i = low - 1;
- for (int j = low; j <= high - 1; j++) {
- if ( (*arr)[j]->get_depth() < pivot ) {
- i++;
+ for (int j = low;j <= high - 1;j ++) {
+ if ( (*arr)[j] -> get_depth() < pivot ) {
+ i ++;
_Tp * tmp = (*arr)[i];
(*arr)[i] = (*arr)[j];
(*arr)[j] = tmp;
double weight_sum = 0;
bool has_unassigned_node = false;
- for (uint i = 0; i < children->size(); i++) {
+ for (uint i = 0;i < children->size();i++) {
Predicate * child = (*children)[i];
// If a child has unassigned weight
failed_predicates.reset();
quickSort(&leaves_tmp_storage, 0, leaves_tmp_storage.size() - 1);
- for (uint i = 0; i < leaves_tmp_storage.size(); i++) {
+ for (uint i = 0;i < leaves_tmp_storage.size();i++) {
Predicate * pred = leaves_tmp_storage[i];
double weight = 100.0 / sqrt(pred->get_expl_count() + pred->get_fail_count() + 1);
pred->set_weight(weight);
double weight_sum = 0;
bool has_unassigned_node = false;
- for (uint i = 0; i < children->size(); i++) {
+ for (uint i = 0;i < children->size();i++) {
Predicate * child = (*children)[i];
double weight = child->get_weight();
}
}
- for (uint i = 0; i < weight_debug_vec.size(); i++) {
+ for (uint i = 0;i < weight_debug_vec.size();i++) {
Predicate * tmp = weight_debug_vec[i];
ASSERT( tmp->get_weight() != 0 );
}