Filter FV out from isolated nodes list.

pull/13188/head
Zhang Qinghua 4 years ago
parent cb90c963a8
commit 46485439c1

@ -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), if (states.size() == 1) {
// do not need to make_tuple, just use the node. // Only MakeTuple, no state left.
if (states.size() == 2) { 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);

Loading…
Cancel
Save