| 450 | } |
| 451 | |
| 452 | void cg::DepOprIter::add(OperatorNodeBase* dest) { |
| 453 | if (!m_owner_graph) { |
| 454 | m_owner_graph = dest->owner_graph(); |
| 455 | } else { |
| 456 | mgb_assert( |
| 457 | m_owner_graph == dest->owner_graph(), |
| 458 | "dest oprs belong to different graphs"); |
| 459 | } |
| 460 | push_stack(dest); |
| 461 | while (!m_stack.empty()) { |
| 462 | auto&& frame = m_stack.back(); |
| 463 | if (frame.inp_idx == frame.nr_input + frame.nr_extra_dep) { |
| 464 | m_cb(frame.opr); |
| 465 | m_stack.pop_back(); |
| 466 | } else { |
| 467 | VarNode* inp = nullptr; |
| 468 | if (frame.inp_idx < frame.nr_input) { |
| 469 | inp = frame.inputs[frame.inp_idx++]; |
| 470 | } else { |
| 471 | inp = frame.extra_deps[frame.inp_idx - frame.nr_input]; |
| 472 | frame.inp_idx++; |
| 473 | } |
| 474 | push_stack(inp->owner_opr()); |
| 475 | } |
| 476 | } |
| 477 | } |
| 478 | |
| 479 | /* =================== InterGraphVarTransformer =================== */ |
| 480 |
no test coverage detected