forked from mindspore-Ecosystem/mindspore
!8894 Remove return node checking for SuccDeeperSimple() including function.
From: @zh_qh Reviewed-by: @stsuteng Signed-off-by: @stsuteng
This commit is contained in:
commit
f241fbcb8e
|
@ -34,18 +34,17 @@
|
||||||
|
|
||||||
namespace mindspore {
|
namespace mindspore {
|
||||||
std::vector<AnfNodePtr> TopoSort(const AnfNodePtr &root, const SuccFunc &succ, const IncludeFunc &include) {
|
std::vector<AnfNodePtr> TopoSort(const AnfNodePtr &root, const SuccFunc &succ, const IncludeFunc &include) {
|
||||||
|
std::vector<AnfNodePtr> res;
|
||||||
|
if (root == nullptr) {
|
||||||
|
return res;
|
||||||
|
}
|
||||||
size_t seen = NewSeenGeneration();
|
size_t seen = NewSeenGeneration();
|
||||||
std::deque<AnfNodePtr> todo(1024);
|
std::deque<AnfNodePtr> todo(1024);
|
||||||
std::vector<AnfNodePtr> res;
|
|
||||||
todo.clear();
|
todo.clear();
|
||||||
todo.push_back(root);
|
todo.push_back(root);
|
||||||
|
|
||||||
while (!todo.empty()) {
|
while (!todo.empty()) {
|
||||||
AnfNodePtr node = todo.back();
|
AnfNodePtr node = todo.back();
|
||||||
if (node == nullptr) {
|
|
||||||
todo.pop_back();
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (node->extra_seen_ == seen) { // We use extra_seen_ as finish flag
|
if (node->extra_seen_ == seen) { // We use extra_seen_ as finish flag
|
||||||
todo.pop_back();
|
todo.pop_back();
|
||||||
continue;
|
continue;
|
||||||
|
@ -65,10 +64,8 @@ std::vector<AnfNodePtr> TopoSort(const AnfNodePtr &root, const SuccFunc &succ, c
|
||||||
node->seen_ = seen;
|
node->seen_ = seen;
|
||||||
if (incl == FOLLOW) {
|
if (incl == FOLLOW) {
|
||||||
auto succs = succ(node);
|
auto succs = succ(node);
|
||||||
(void)std::copy_if(succs.begin(), succs.end(), std::back_inserter(todo), [seen](const AnfNodePtr &next) {
|
(void)std::copy_if(succs.begin(), succs.end(), std::back_inserter(todo),
|
||||||
return next != nullptr && next->seen_ != seen &&
|
[seen](const AnfNodePtr &next) { return next != nullptr && next->seen_ != seen; });
|
||||||
(next->func_graph() == nullptr || next->func_graph()->get_return() != next);
|
|
||||||
});
|
|
||||||
} else if (incl > EXCLUDE) { // Not NOFOLLOW or EXCLUDE
|
} else if (incl > EXCLUDE) { // Not NOFOLLOW or EXCLUDE
|
||||||
MS_LOG(EXCEPTION) << "The result of include(node) must be one of: \"follow\", \"nofollow\", \"exclude\"";
|
MS_LOG(EXCEPTION) << "The result of include(node) must be one of: \"follow\", \"nofollow\", \"exclude\"";
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue