diff --git a/mindspore/ccsrc/frontend/optimizer/irpass.cc b/mindspore/ccsrc/frontend/optimizer/irpass.cc index 18c2742a18..8a1b3736b5 100644 --- a/mindspore/ccsrc/frontend/optimizer/irpass.cc +++ b/mindspore/ccsrc/frontend/optimizer/irpass.cc @@ -69,7 +69,7 @@ OptimizeIRPassLib::OptimizeIRPassLib() { // ops eliminate item_tuple_eliminate_ = MakeSubstitution(std::make_shared(), "item_tuple_eliminate", {prim::kPrimTupleGetItem, prim::kPrimTupleSetItem, prim::kPrimListGetItem}); - tile_eliminate_ = MakeSubstitution(std::make_shared(), "tile_eliminate", prim::kPrimTile); + tile_eliminate_ = MakeSubstitution(std::make_shared(), "tile_eliminate", prim::kPrimTile); cast_eliminate_ = MakeSubstitution(std::make_shared(), "cast_eliminate", prim::kPrimCast); reshape_eliminate_ = MakeSubstitution(std::make_shared(), "reshape_eliminate", prim::kPrimReshape); transpose_eliminate_ = diff --git a/mindspore/ccsrc/frontend/optimizer/irpass/tile_eliminate.h b/mindspore/ccsrc/frontend/optimizer/irpass/tile_eliminate.h index decfd6a995..41efd25287 100644 --- a/mindspore/ccsrc/frontend/optimizer/irpass/tile_eliminate.h +++ b/mindspore/ccsrc/frontend/optimizer/irpass/tile_eliminate.h @@ -29,8 +29,9 @@ namespace mindspore { namespace opt { namespace irpass { // check if node is value tuple and all one. e.g. (1, 1, 1) -// {PrimTile, X, MultiOne} -class TileMultiplyByOne : public AnfVisitor { +// {PrimTile, X, MultiOne} -> X +// {PrimTile, X, Empty} -> X +class TileEliminater : public AnfVisitor { public: AnfNodePtr operator()(const OptimizerPtr &, const AnfNodePtr &node) override { Reset(); @@ -44,7 +45,7 @@ class TileMultiplyByOne : public AnfVisitor { auto value = GetValueNode(tuple_); auto elements = GetValue>(value); if (elements.empty()) { - return nullptr; + return x_; } auto cmp = std::all_of(elements.cbegin(), elements.cend(), [](int i) { return i == 1; });