| 399 | } |
| 400 | |
| 401 | void SeqModifierForDTR::apply_action( |
| 402 | SeqModifyAction& action, const OprNodeArray& oprseq) { |
| 403 | auto cur_priority = std::numeric_limits< |
| 404 | decltype(OperatorNodeBase::NodeProp::Attribute::priority)>::min(); |
| 405 | |
| 406 | ThinHashSet<OperatorNodeBase*> modified_opr; |
| 407 | ThinHashMap<OperatorNodeBase*, size_t> recomp_id; |
| 408 | auto set_priority = [&](OperatorNodeBase* opr) { |
| 409 | mgb_assert(modified_opr.insert(opr).second); |
| 410 | mem_opt().set_priority(opr, cur_priority++); |
| 411 | }; |
| 412 | |
| 413 | auto on_opr_visited = [&](OperatorNodeBase* opr) { |
| 414 | if (replace_vars(opr->input())) { |
| 415 | recomp_id[opr]++; |
| 416 | opr = copy_opr_from_new_inputs(opr, true, recomp_id[opr] - 1); |
| 417 | } |
| 418 | set_priority(opr); |
| 419 | }; |
| 420 | |
| 421 | DepOprIter dep_iter{on_opr_visited}; |
| 422 | |
| 423 | for (auto opr : oprseq) { |
| 424 | auto iter = action.find(opr); |
| 425 | if (iter != action.end()) { |
| 426 | for (auto i : iter->second) { |
| 427 | replace_vars(i->input()); |
| 428 | recomp_id[i]++; |
| 429 | auto opr_new = copy_opr_from_new_inputs(i, false, recomp_id[i] - 1); |
| 430 | set_priority(opr_new); |
| 431 | } |
| 432 | action.erase(iter); |
| 433 | } |
| 434 | dep_iter.add(opr); |
| 435 | } |
| 436 | mgb_assert(action.empty()); |
| 437 | } |
| 438 | |
| 439 | #endif // !MGB_ENABLE_DTR |
| 440 |
nothing calls this directly
no test coverage detected