Browse Source

Set abstract for new node in GetitemDependReorder pass

tags/v1.2.0-rc1
yujianfeng 4 years ago
parent
commit
aa76c2b455
1 changed files with 20 additions and 1 deletions
  1. +20
    -1
      mindspore/ccsrc/frontend/optimizer/irpass/item_tuple_or_list_eliminate.h

+ 20
- 1
mindspore/ccsrc/frontend/optimizer/irpass/item_tuple_or_list_eliminate.h View File

@@ -360,7 +360,26 @@ class GetitemDependReorder : public AnfVisitor {

auto fg = node->func_graph();
auto item_node = NewCNode({NewValueNode(prim::kPrimTupleGetItem), x_, c_}, fg);
return NewCNode({NewValueNode(prim::kPrimDepend), item_node, y_}, fg);
auto depend_node = NewCNode({NewValueNode(prim::kPrimDepend), item_node, y_}, fg);
auto abs = x_->abstract();
if (abs == nullptr) {
return depend_node;
}
auto idx_value = GetValueNode<Int64ImmPtr>(c_);
MS_EXCEPTION_IF_NULL(idx_value);
int64_t idx = idx_value->value();
if (abs->isa<abstract::AbstractTuple>()) {
auto abs_tuple = abs->cast<abstract::AbstractTuplePtr>();
if (LongToSize(idx) >= abs_tuple->elements().size() || idx < 0) {
MS_LOG(EXCEPTION) << "The idx value " << idx << " of tuple_getitem node " << c_->DebugString()
<< " is out of range.";
}
item_node->set_abstract(abs_tuple->elements()[idx]);
} else {
item_node->set_abstract(abs);
}
depend_node->set_abstract(item_node->abstract());
return depend_node;
}

void Visit(const CNodePtr &cnode) override {


Loading…
Cancel
Save