!8163 Add irpass related to PrimTile.

Merge pull request !8163 from huangbingjian/add_irpass_tile
pull/8163/MERGE
mindspore-ci-bot 4 years ago committed by Gitee
commit e62c116277

@ -69,7 +69,7 @@ OptimizeIRPassLib::OptimizeIRPassLib() {
// ops eliminate
item_tuple_eliminate_ = MakeSubstitution(std::make_shared<ItemTupleEliminater>(), "item_tuple_eliminate",
{prim::kPrimTupleGetItem, prim::kPrimTupleSetItem, prim::kPrimListGetItem});
tile_eliminate_ = MakeSubstitution(std::make_shared<TileMultiplyByOne>(), "tile_eliminate", prim::kPrimTile);
tile_eliminate_ = MakeSubstitution(std::make_shared<TileEliminater>(), "tile_eliminate", prim::kPrimTile);
cast_eliminate_ = MakeSubstitution(std::make_shared<CastEliminater>(), "cast_eliminate", prim::kPrimCast);
reshape_eliminate_ = MakeSubstitution(std::make_shared<ReshapeEliminater>(), "reshape_eliminate", prim::kPrimReshape);
transpose_eliminate_ =

@ -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<std::vector<int>>(value);
if (elements.empty()) {
return nullptr;
return x_;
}
auto cmp = std::all_of(elements.cbegin(), elements.cend(), [](int i) { return i == 1; });

Loading…
Cancel
Save