diff --git a/mindspore/ccsrc/backend/session/ascend_auto_monad.cc b/mindspore/ccsrc/backend/session/ascend_auto_monad.cc index 080d0de7bb..c11c344240 100644 --- a/mindspore/ccsrc/backend/session/ascend_auto_monad.cc +++ b/mindspore/ccsrc/backend/session/ascend_auto_monad.cc @@ -673,7 +673,7 @@ class AscendAutoMonadConverter { // No assign for single monad argument, return it. return value; } - return Assign(paras.front(), value, true); + return AssignAll(paras.front(), value, true); } // Multi arguments. AnfNodePtrList tuple_inputs; @@ -691,7 +691,7 @@ class AscendAutoMonadConverter { if (target == value) { continue; } - tuple_inputs.emplace_back(Assign(target, value, true)); + tuple_inputs.emplace_back(AssignAll(target, value, true)); } return kernel_graph_->NewCNode(tuple_inputs); } @@ -721,10 +721,10 @@ class AscendAutoMonadConverter { } // AissgnAll support tuple to tuple assign. - AnfNodePtr AssignAll(const AnfNodePtr &target, const AnfNodePtr &source) { + AnfNodePtr AssignAll(const AnfNodePtr &target, const AnfNodePtr &source, bool is_link = false) { if (!AnfAlgo::CheckPrimitiveType(target, prim::kPrimMakeTuple)) { // Assign single value. - return Assign(target, source); + return Assign(target, source, is_link); } // Assign tuple. std::vector targets = AnfAlgo::GetAllOutput(target, {prim::kPrimTupleGetItem}); @@ -736,7 +736,7 @@ class AscendAutoMonadConverter { tuple_inputs.reserve(targets.size() + 1); tuple_inputs.emplace_back(NewValueNode(prim::kPrimMakeTuple)); for (size_t i = 0; i < targets.size(); ++i) { - tuple_inputs.emplace_back(Assign(targets[i], sources[i])); + tuple_inputs.emplace_back(Assign(targets[i], sources[i], is_link)); } return kernel_graph_->NewCNode(tuple_inputs); }