Skip to content
This repository was archived by the owner on Jan 25, 2023. It is now read-only.
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
PropagateBuildTupleTypes
  • Loading branch information
Butygin
Butygin committed Feb 16, 2021
commit 8e0cd98ffb90350be667c644eb5d584875f7539a
22 changes: 22 additions & 0 deletions mlir-compiler/mlir-compiler/src/pipelines/plier_to_std.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1105,6 +1105,27 @@ struct FixupWhileTypes : public mlir::OpRewritePattern<mlir::scf::WhileOp>
}
};

struct PropagateBuildTupleTypes : public mlir::OpRewritePattern<plier::BuildTupleOp>
{
PropagateBuildTupleTypes(mlir::TypeConverter &/*typeConverter*/,
mlir::MLIRContext *context):
OpRewritePattern(context) {}

mlir::LogicalResult matchAndRewrite(
plier::BuildTupleOp op, mlir::PatternRewriter &rewriter) const override
{
if (op.getType().isa<mlir::TupleType>() ||
llvm::any_of(op.getOperandTypes(), [](mlir::Type type){ return type.isa<plier::PyType>(); }))
{
return mlir::failure();
}

auto new_type = mlir::TupleType::get(op.getContext(), op.getOperandTypes());
rewriter.replaceOpWithNewOp<plier::BuildTupleOp>(op, new_type, op.getOperands());
return mlir::success();
}
};

template<typename Op>
struct FoldTupleGetitem : public mlir::OpRewritePattern<Op>
{
Expand Down Expand Up @@ -1352,6 +1373,7 @@ void PlierToStdPass::runOnOperation()
ScfIfRewrite,
ScfWhileRewrite,
FixupWhileTypes,
PropagateBuildTupleTypes,
FoldTupleGetitem<plier::GetItemOp>,
FoldTupleGetitem<plier::StaticGetItemOp>
>(type_converter, context);
Expand Down