|
|
|
@ -985,40 +985,14 @@ void ParentComputer::RealRecompute(FuncGraphPtr fg) {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// children include:
|
|
|
|
|
// A. func graphs which use variables in fg as free variables; (child_direct_)
|
|
|
|
|
// B. func graphs which call func func graph in A. (all_users_)
|
|
|
|
|
FuncGraphSetPtr ChildrenComputer::SeekChildren(const FuncGraphPtr& fg, const FuncGraphSetPtr& path) {
|
|
|
|
|
if (path == nullptr || path->contains(fg)) {
|
|
|
|
|
return std::make_shared<FuncGraphSet>();
|
|
|
|
|
}
|
|
|
|
|
std::shared_ptr<FuncGraphSet> children = std::make_shared<FuncGraphSet>();
|
|
|
|
|
auto& deps = *child_direct_;
|
|
|
|
|
auto& users = *all_users_;
|
|
|
|
|
MS_LOG(DEBUG) << "" << fg->ToString() << " start func graph dep size:" << deps[fg].size();
|
|
|
|
|
for (auto& dep : deps[fg]) {
|
|
|
|
|
FuncGraphPtr child = dep.first;
|
|
|
|
|
children->add(child);
|
|
|
|
|
path->add(child);
|
|
|
|
|
MS_LOG(DEBUG) << "Child func graph:" << fg->ToString() << " child " << child->ToString();
|
|
|
|
|
for (auto& user : users[child]) {
|
|
|
|
|
auto user_func_graph = user.first;
|
|
|
|
|
MS_LOG(DEBUG) << "Func graph:" << fg->ToString() << " user " << user_func_graph->ToString();
|
|
|
|
|
children->add(user_func_graph);
|
|
|
|
|
path->add(user_func_graph);
|
|
|
|
|
}
|
|
|
|
|
children->update(SeekChildren(child, path));
|
|
|
|
|
}
|
|
|
|
|
(void)children->erase(fg);
|
|
|
|
|
MS_LOG(DEBUG) << "End in children: " << children->size();
|
|
|
|
|
return children;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ChildrenComputer::RealRecompute(FuncGraphPtr fg) {
|
|
|
|
|
MS_EXCEPTION_IF_NULL(manager_);
|
|
|
|
|
child_direct_ = &manager_->func_graph_child_direct();
|
|
|
|
|
all_users_ = &manager_->func_graph_users();
|
|
|
|
|
children_analysis_[fg].update(SeekChildren(fg));
|
|
|
|
|
auto used_fg_total = manager_->func_graphs_used_total(fg);
|
|
|
|
|
for (auto& used_fg : used_fg_total) {
|
|
|
|
|
if (manager_->parent(used_fg) == fg) {
|
|
|
|
|
children_analysis_[fg].add(used_fg);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ScopeComputer::RealRecompute(FuncGraphPtr fg) {
|
|
|
|
|