| @@ -396,8 +396,6 @@ void FunctionBlock::FindIsolatedNodes() { | |||||
| } | } | ||||
| auto &var_name = var.first; | auto &var_name = var.first; | ||||
| if (used.find(node) == used.end() && CanBeIsolatedNode(var_name, node)) { | if (used.find(node) == used.end() && CanBeIsolatedNode(var_name, node)) { | ||||
| // We don't call AddIsolatedNode(node) anymore. | |||||
| // If need, to call FindIsolatedNodes() in appropriate place. | |||||
| MS_LOG(INFO) << "Isolated node found(NoUse), node: " << node->DebugString(2) << ", var_name: " << var_name | MS_LOG(INFO) << "Isolated node found(NoUse), node: " << node->DebugString(2) << ", var_name: " << var_name | ||||
| << ", block: " << this << "/" << (func_graph() ? func_graph()->ToString() : "FG(Null)") | << ", block: " << this << "/" << (func_graph() ? func_graph()->ToString() : "FG(Null)") | ||||
| << ", Line: " << trace::GetDebugInfo(node->debug_info(), "", kSourceLineTipDiscard); | << ", Line: " << trace::GetDebugInfo(node->debug_info(), "", kSourceLineTipDiscard); | ||||
| @@ -417,13 +415,21 @@ void FunctionBlock::AttachIsolatedNodesBeforeReturn() { | |||||
| states.emplace_back(NewValueNode(prim::kPrimMakeTuple)); | states.emplace_back(NewValueNode(prim::kPrimMakeTuple)); | ||||
| for (auto &node : isolated_nodes_) { | for (auto &node : isolated_nodes_) { | ||||
| MS_LOG(DEBUG) << "Adding dependency, node: " << node->DebugString(2) << " in " << func_graph()->ToString(); | MS_LOG(DEBUG) << "Adding dependency, node: " << node->DebugString(2) << " in " << func_graph()->ToString(); | ||||
| states.emplace_back(node); | |||||
| if (node->func_graph() == func_graph()) { | |||||
| states.emplace_back(node); | |||||
| } else { | |||||
| MS_LOG(INFO) << "Ignored FV dependency, node: " << node->DebugString(2) << " in " << func_graph()->ToString(); | |||||
| } | |||||
| } | } | ||||
| isolated_nodes_.clear(); | |||||
| AnfNodePtr state = nullptr; | AnfNodePtr state = nullptr; | ||||
| // If there are only make_tuple and another node in states(the states size is 2), | |||||
| // do not need to make_tuple, just use the node. | |||||
| if (states.size() == 2) { | |||||
| if (states.size() == 1) { | |||||
| // Only MakeTuple, no state left. | |||||
| return; | |||||
| } else if (states.size() == 2) { | |||||
| // If there are only MakeTuple and another node in states(the states size is 2), | |||||
| // do not need to MakeTuple, just use the node. | |||||
| state = states[1]; | state = states[1]; | ||||
| } else { | } else { | ||||
| state = func_graph()->NewCNode(states); | state = func_graph()->NewCNode(states); | ||||