本文整理汇总了C++中Dlist::push_tail方法的典型用法代码示例。如果您正苦于以下问题:C++ Dlist::push_tail方法的具体用法?C++ Dlist::push_tail怎么用?C++ Dlist::push_tail使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Dlist
的用法示例。
在下文中一共展示了Dlist::push_tail方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: El_collapse_compare_chain
/*
* Note, to_branch is included in the collapse!!
*/
void El_collapse_compare_chain(Hyperblock *hb, Dlist< Pair<Op*, Op*> > &cpr_block,
Op *target_branch, Op *to_branch)
{
Pair<Op*,Op*> cur_pair;
Op *target_cmpp, *to_cmpp, *cur_branch, *cur_cmpp;
Operand incoming_pred, br_pred, ft_pred;
bool flag, last_br;
target_cmpp = to_cmpp = NULL;
for (Dlist_iterator<Pair<Op*, Op*> > dl_i(cpr_block); dl_i!=0; dl_i++) {
cur_pair = *dl_i;
cur_branch = cur_pair.first;
cur_cmpp = cur_pair.second;
if (cur_branch == target_branch)
target_cmpp = cur_cmpp;
if (cur_branch == to_branch)
to_cmpp = cur_cmpp;
}
/* Figure out the value of incoming predicate */
if (to_cmpp != NULL)
incoming_pred = to_cmpp->src(PRED1);
else {
Pred_lit* new_pred_lit = new Pred_lit(true);
Operand pred_true(new_pred_lit);
incoming_pred = pred_true;
}
/* Create the collapsed pred and initialize it */
El_create_collapsed_predicates(br_pred, ft_pred);
El_insert_initializer_for_collapsed_predicate(hb, br_pred, ft_pred,
incoming_pred, to_cmpp);
/* Walk the chain in reverse order, insert collapsed cmpp ops */
flag = false;
for (Dlist_iterator<Pair<Op*, Op*> > dl_i2(cpr_block, true); dl_i2!=0; dl_i2--) {
cur_pair = *dl_i2;
cur_branch = cur_pair.first;
cur_cmpp = cur_pair.second;
last_br = false;
if (cur_branch == target_branch) {
flag = true;
last_br = true;
}
if (flag == false)
continue;
El_insert_collapsed_cmpp_op(hb, cur_cmpp, br_pred, ft_pred, incoming_pred,
last_br);
if (cur_branch == to_branch)
break;
}
El_reassociate_branch_pred(target_branch, br_pred);
if (target_cmpp != NULL) {
El_reassociate_input_operand(hb, target_cmpp->dest(DEST1), br_pred);
El_reassociate_input_operand(hb, target_cmpp->dest(DEST2), ft_pred);
}
hb_br_preds.push_tail(br_pred);
hb_ft_preds.push_tail(ft_pred);
}
示例2: El_max_reduce_cpr_blocks
void El_max_reduce_cpr_blocks(Hyperblock *hb, Cont_cpr_match_result &match_result)
{
Dlist<Dlist< Pair<Op*, Op*> > > hb_cprblocks;
Dlist< Pair<Op*, Op*> > cur_cprblock;
Pair<Op*, Op*> cur_tuple;
Op *first_branch, *cur_branch, *cur_cmpp;
hb_cprblocks = match_result.cpr_blk_list;
if (hb_cprblocks.size() == 0) {
if (dbg(cpr, 2))
cdbg << "HB " << hb->id() << " has no cpr blocks" << endl;
return;
}
hb_br_preds.clear();
hb_ft_preds.clear();
for (Dlist_iterator<Dlist< Pair<Op*, Op*> > > d_iter(hb_cprblocks);
d_iter!=0; d_iter++) {
cur_cprblock = *d_iter;
El_normalize_cprblock(cur_cprblock);
first_branch = NULL;
for (Dlist_iterator<Pair<Op*, Op*> > d2_iter(cur_cprblock);
d2_iter!=0; d2_iter++) {
cur_tuple = *d2_iter;
cur_branch = cur_tuple.first;
cur_cmpp = cur_tuple.second;
if (first_branch == NULL) {
first_branch = cur_branch;
hb_br_preds.push_tail(cur_cmpp->dest(DEST1));
hb_ft_preds.push_tail(cur_cmpp->dest(DEST2));
continue;
}
El_collapse_compare_chain(hb, cur_cprblock, cur_branch, first_branch);
}
}
El_record_maxreduce_info_in_attr(hb);
}