[mlir][transform][structured][python] Allow str arg in match_op_names.

Allow the `names` argument in `MatchOp.match_op_names` to be of type
`str` in addition to `Sequence[str]`. In this case, the argument is
treated as a list with one name, i.e., it is possible to write
`MatchOp.match_op_names(..., "test.dummy")` instead of
`MatchOp.match_op_names(..., ["test.dummy"])`.

Reviewed By: ftynse

Differential Revision: https://reviews.llvm.org/D155807
This commit is contained in:
Ingo Müller 2023-07-20 09:58:41 +00:00
parent 522831384f
commit 8fd207fd0d
2 changed files with 23 additions and 6 deletions

View File

@ -195,7 +195,7 @@ class MatchOp:
def match_op_names(
cls,
target: Union[Operation, Value],
names: Sequence[str],
names: Union[str, Sequence[str]],
*,
loc=None,
ip=None,
@ -208,7 +208,7 @@ class MatchOp:
cls,
result_type: Type,
target: Union[Operation, Value],
names: Sequence[str],
names: Union[str, Sequence[str]],
*,
loc=None,
ip=None,
@ -219,8 +219,8 @@ class MatchOp:
def match_op_names(
cls,
result_type_or_target: Union[Type, Operation, Value],
target_or_names: Union[Operation, Value, Sequence[str]],
names_or_none: Optional[Sequence[str]] = None,
target_or_names: Union[Operation, Value, Sequence[str], str],
names_or_none: Optional[Union[Sequence[str], str]] = None,
*,
loc=None,
ip=None,
@ -234,6 +234,9 @@ class MatchOp:
target = result_type_or_target
names = target_or_names
if isinstance(names, str):
names = [names]
return cls(
result_type,
_get_op_result_or_value(target),

View File

@ -97,14 +97,28 @@ def testInterchange():
@run
def testMatchOpNames():
def testMatchOpNamesString():
sequence = transform.SequenceOp(
transform.FailurePropagationMode.PROPAGATE, [], transform.AnyOpType.get()
)
with InsertionPoint(sequence.body):
structured.MatchOp.match_op_names(sequence.bodyTarget, "test.dummy")
transform.YieldOp()
# CHECK-LABEL: TEST: testMatchOpNamesString
# CHECK: transform.structured.match ops
# CHECK-SAME: ["test.dummy"]
# CHECK-SAME: (!transform.any_op) -> !transform.any_op
@run
def testMatchOpNamesList():
sequence = transform.SequenceOp(
transform.FailurePropagationMode.PROPAGATE, [], transform.AnyOpType.get()
)
with InsertionPoint(sequence.body):
structured.MatchOp.match_op_names(sequence.bodyTarget, ["test.dummy"])
transform.YieldOp()
# CHECK-LABEL: TEST: testMatchOpNames
# CHECK-LABEL: TEST: testMatchOpNamesList
# CHECK: transform.structured.match ops
# CHECK-SAME: ["test.dummy"]
# CHECK-SAME: (!transform.any_op) -> !transform.any_op