|
|
|
@ -375,7 +375,7 @@ class IncorporateGetitemSwitch : public AnfVisitor {
|
|
|
|
|
}
|
|
|
|
|
auto tuple_getitem = node->cast<CNodePtr>();
|
|
|
|
|
MS_EXCEPTION_IF_NULL(tuple_getitem);
|
|
|
|
|
if (MultipleUseOfSwitch(tuple_getitem->input(1), fg)) {
|
|
|
|
|
if (MultipleUseOfSwitch(tuple_getitem->input(1), fg) && !ExistEnvNode(fg)) {
|
|
|
|
|
return nullptr;
|
|
|
|
|
}
|
|
|
|
|
auto new_g1 = getitem_transform_(g1_, idx_);
|
|
|
|
@ -446,6 +446,14 @@ class IncorporateGetitemSwitch : public AnfVisitor {
|
|
|
|
|
return tuple_getitem_num > 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static bool inline ExistEnvNode(const FuncGraphPtr &fg) {
|
|
|
|
|
MS_EXCEPTION_IF_NULL(fg);
|
|
|
|
|
auto &nodes = fg->value_nodes();
|
|
|
|
|
return std::any_of(nodes.begin(), nodes.end(), [](const auto &node) {
|
|
|
|
|
return IsPrimitive(node.first, prim::kPrimEnvSetItem) || IsPrimitive(node.first, prim::kPrimEnvGetItem);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int64_t idx_{-1};
|
|
|
|
|
AnfNodePtr switch_{nullptr}, x_{nullptr};
|
|
|
|
|
FuncGraphPtr g1_{nullptr}, g2_{nullptr};
|
|
|
|
|