MCPcopy Create free account
hub / github.com/UbiquitousLearning/mllm / insertOpAtPos

Method insertOpAtPos

mllm/compile/ir/Node.cpp:345–383  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

343}
344
345void IRWriter::insertOpAtPos(const op_ptr_t& pos_op, Position pos, const op_ptr_t& new_op) {
346 // find the pos_op iter in region
347 auto& ops = cur_region_->ops();
348 auto pos_op_iter = std::find(ops.begin(), ops.end(), pos_op);
349 MLLM_RT_ASSERT(pos_op_iter != ops.end());
350 new_op->setBelongsTo(pos_op->belongsTo());
351
352 switch (pos) {
353 case AFTER: {
354 auto pre_op = *pos_op_iter;
355 pos_op_iter++;
356 auto next_op = (pos_op_iter != ops.end()) ? *pos_op_iter : nullptr;
357
358 pre_op->setNextOp(new_op);
359 new_op->setPrevOp(pre_op);
360 if (next_op) next_op->setPrevOp(new_op);
361
362 cur_op_iter_ = ops.insert(pos_op_iter, new_op);
363 break;
364 }
365 case BEFORE: {
366 auto next_op = *pos_op_iter;
367 op_ptr_t pre_op = nullptr;
368 if (pos_op_iter != ops.begin()) {
369 pos_op_iter--;
370 pre_op = *pos_op_iter;
371 }
372
373 if (pre_op) pre_op->setNextOp(new_op);
374 new_op->setPrevOp(pre_op);
375 new_op->setNextOp(next_op);
376 if (next_op) next_op->setPrevOp(new_op);
377
378 pos_op_iter = std::find(ops.begin(), ops.end(), next_op);
379 cur_op_iter_ = ops.insert(pos_op_iter, new_op);
380 break;
381 }
382 }
383}
384
385void IRWriter::insertOpAtLast(const op_ptr_t& new_op) {
386 MLLM_RT_ASSERT(new_op != nullptr);

Callers 1

runMethod · 0.80

Calls 7

setBelongsToMethod · 0.80
belongsToMethod · 0.80
setNextOpMethod · 0.80
setPrevOpMethod · 0.80
beginMethod · 0.45
endMethod · 0.45
insertMethod · 0.45

Tested by

no test coverage detected