diff --git a/mlir/include/mlir/Dialect/PDL/IR/PDLOps.td b/mlir/include/mlir/Dialect/PDL/IR/PDLOps.td --- a/mlir/include/mlir/Dialect/PDL/IR/PDLOps.td +++ b/mlir/include/mlir/Dialect/PDL/IR/PDLOps.td @@ -268,8 +268,7 @@ // pdl::OperationOp //===----------------------------------------------------------------------===// -def PDL_OperationOp - : PDL_Op<"operation", [AttrSizedOperandSegments, NoSideEffect]> { +def PDL_OperationOp : PDL_Op<"operation", [AttrSizedOperandSegments]> { let summary = "Define an operation within a pattern"; let description = [{ `pdl.operation` operations define operation nodes within a pattern. Within diff --git a/mlir/test/Conversion/PDLToPDLInterp/pdl-to-pdl-interp-rewriter.mlir b/mlir/test/Conversion/PDLToPDLInterp/pdl-to-pdl-interp-rewriter.mlir --- a/mlir/test/Conversion/PDLToPDLInterp/pdl-to-pdl-interp-rewriter.mlir +++ b/mlir/test/Conversion/PDLToPDLInterp/pdl-to-pdl-interp-rewriter.mlir @@ -202,3 +202,21 @@ } } } + +// ----- + +// CHECK-LABEL: module @unbound_rewrite_op +module @unbound_rewrite_op { + // CHECK: module @rewriters + // CHECK: func @pdl_generated_rewriter() + // CHECK: %[[UNUSED:.*]] = pdl_interp.create_operation "bar.op" + // CHECK: pdl_interp.finalize + pdl.pattern : benefit(1) { + %root = pdl.operation "foo.op" + pdl.rewrite %root { + %unused = pdl.operation "bar.op" + } + } +} + +// ----- diff --git a/mlir/test/Dialect/PDL/canonicalize.mlir b/mlir/test/Dialect/PDL/canonicalize.mlir new file mode 100644 --- /dev/null +++ b/mlir/test/Dialect/PDL/canonicalize.mlir @@ -0,0 +1,10 @@ +// RUN: mlir-opt -canonicalize %s | FileCheck %s + +pdl.pattern @operation_op : benefit(1) { + %root = pdl.operation "foo.op" + pdl.rewrite %root { + // CHECK: pdl.operation "bar.unused" + %unused_rewrite = pdl.operation "bar.unused" + pdl.erase %root + } +}