13f71765aSAlex Zinenko# RUN: %PYTHON %s | FileCheck %s
23f71765aSAlex Zinenko
33f71765aSAlex Zinenkofrom mlir.ir import *
43f71765aSAlex Zinenkofrom mlir.dialects import transform
53f71765aSAlex Zinenkofrom mlir.dialects import pdl
63f71765aSAlex Zinenko
73f71765aSAlex Zinenko
83f71765aSAlex Zinenkodef run(f):
93f71765aSAlex Zinenko  with Context(), Location.unknown():
103f71765aSAlex Zinenko    module = Module.create()
113f71765aSAlex Zinenko    with InsertionPoint(module.body):
123f71765aSAlex Zinenko      print("\nTEST:", f.__name__)
133f71765aSAlex Zinenko      f()
143f71765aSAlex Zinenko    print(module)
153f71765aSAlex Zinenko  return f
163f71765aSAlex Zinenko
173f71765aSAlex Zinenko
183f71765aSAlex Zinenko@run
193f71765aSAlex Zinenkodef testSequenceOp():
203f71765aSAlex Zinenko  sequence = transform.SequenceOp([pdl.OperationType.get()])
213f71765aSAlex Zinenko  with InsertionPoint(sequence.body):
223f71765aSAlex Zinenko    transform.YieldOp([sequence.bodyTarget])
233f71765aSAlex Zinenko  # CHECK-LABEL: TEST: testSequenceOp
243f71765aSAlex Zinenko  # CHECK: = transform.sequence {
253f71765aSAlex Zinenko  # CHECK: ^{{.*}}(%[[ARG0:.+]]: !pdl.operation):
263f71765aSAlex Zinenko  # CHECK:   yield %[[ARG0]] : !pdl.operation
273f71765aSAlex Zinenko  # CHECK: } : !pdl.operation
283f71765aSAlex Zinenko
293f71765aSAlex Zinenko
303f71765aSAlex Zinenko@run
313f71765aSAlex Zinenkodef testNestedSequenceOp():
323f71765aSAlex Zinenko  sequence = transform.SequenceOp()
333f71765aSAlex Zinenko  with InsertionPoint(sequence.body):
343f71765aSAlex Zinenko    nested = transform.SequenceOp(sequence.bodyTarget)
353f71765aSAlex Zinenko    with InsertionPoint(nested.body):
363f71765aSAlex Zinenko      doubly_nested = transform.SequenceOp([pdl.OperationType.get()],
373f71765aSAlex Zinenko                                           nested.bodyTarget)
383f71765aSAlex Zinenko      with InsertionPoint(doubly_nested.body):
393f71765aSAlex Zinenko        transform.YieldOp([doubly_nested.bodyTarget])
403f71765aSAlex Zinenko      transform.YieldOp()
413f71765aSAlex Zinenko    transform.YieldOp()
423f71765aSAlex Zinenko  # CHECK-LABEL: TEST: testNestedSequenceOp
433f71765aSAlex Zinenko  # CHECK: transform.sequence {
443f71765aSAlex Zinenko  # CHECK: ^{{.*}}(%[[ARG0:.+]]: !pdl.operation):
453f71765aSAlex Zinenko  # CHECK:   sequence %[[ARG0]] {
463f71765aSAlex Zinenko  # CHECK:   ^{{.*}}(%[[ARG1:.+]]: !pdl.operation):
473f71765aSAlex Zinenko  # CHECK:     = sequence %[[ARG1]] {
483f71765aSAlex Zinenko  # CHECK:     ^{{.*}}(%[[ARG2:.+]]: !pdl.operation):
493f71765aSAlex Zinenko  # CHECK:       yield %[[ARG2]] : !pdl.operation
503f71765aSAlex Zinenko  # CHECK:     } : !pdl.operation
513f71765aSAlex Zinenko  # CHECK:   }
523f71765aSAlex Zinenko  # CHECK: }
533f71765aSAlex Zinenko
543f71765aSAlex Zinenko
553f71765aSAlex Zinenko@run
563f71765aSAlex Zinenkodef testTransformPDLOps():
573f71765aSAlex Zinenko  withPdl = transform.WithPDLPatternsOp()
583f71765aSAlex Zinenko  with InsertionPoint(withPdl.body):
593f71765aSAlex Zinenko    sequence = transform.SequenceOp([pdl.OperationType.get()],
603f71765aSAlex Zinenko                                    withPdl.bodyTarget)
613f71765aSAlex Zinenko    with InsertionPoint(sequence.body):
623f71765aSAlex Zinenko      match = transform.PDLMatchOp(sequence.bodyTarget, "pdl_matcher")
633f71765aSAlex Zinenko      transform.YieldOp(match)
643f71765aSAlex Zinenko  # CHECK-LABEL: TEST: testTransformPDLOps
653f71765aSAlex Zinenko  # CHECK: transform.with_pdl_patterns {
663f71765aSAlex Zinenko  # CHECK: ^{{.*}}(%[[ARG0:.+]]: !pdl.operation):
673f71765aSAlex Zinenko  # CHECK:   = sequence %[[ARG0]] {
683f71765aSAlex Zinenko  # CHECK:   ^{{.*}}(%[[ARG1:.+]]: !pdl.operation):
693f71765aSAlex Zinenko  # CHECK:     %[[RES:.+]] = pdl_match @pdl_matcher in %[[ARG1]]
703f71765aSAlex Zinenko  # CHECK:     yield %[[RES]] : !pdl.operation
713f71765aSAlex Zinenko  # CHECK:   } : !pdl.operation
723f71765aSAlex Zinenko  # CHECK: }
733f71765aSAlex Zinenko
743f71765aSAlex Zinenko
753f71765aSAlex Zinenko@run
763f71765aSAlex Zinenkodef testGetClosestIsolatedParentOp():
773f71765aSAlex Zinenko  sequence = transform.SequenceOp()
783f71765aSAlex Zinenko  with InsertionPoint(sequence.body):
793f71765aSAlex Zinenko    transform.GetClosestIsolatedParentOp(sequence.bodyTarget)
803f71765aSAlex Zinenko    transform.YieldOp()
813f71765aSAlex Zinenko  # CHECK-LABEL: TEST: testGetClosestIsolatedParentOp
823f71765aSAlex Zinenko  # CHECK: transform.sequence
833f71765aSAlex Zinenko  # CHECK: ^{{.*}}(%[[ARG1:.+]]: !pdl.operation):
843f71765aSAlex Zinenko  # CHECK:   = get_closest_isolated_parent %[[ARG1]]
858e03bfc3SAlex Zinenko
868e03bfc3SAlex Zinenko
878e03bfc3SAlex Zinenko@run
888e03bfc3SAlex Zinenkodef testMergeHandlesOp():
898e03bfc3SAlex Zinenko  sequence = transform.SequenceOp()
908e03bfc3SAlex Zinenko  with InsertionPoint(sequence.body):
918e03bfc3SAlex Zinenko    transform.MergeHandlesOp([sequence.bodyTarget])
928e03bfc3SAlex Zinenko    transform.YieldOp()
938e03bfc3SAlex Zinenko  # CHECK-LABEL: TEST: testMergeHandlesOp
948e03bfc3SAlex Zinenko  # CHECK: transform.sequence
958e03bfc3SAlex Zinenko  # CHECK: ^{{.*}}(%[[ARG1:.+]]: !pdl.operation):
968e03bfc3SAlex Zinenko  # CHECK:   = merge_handles %[[ARG1]]
97*00d1a1a2SAlex Zinenko
98*00d1a1a2SAlex Zinenko
99*00d1a1a2SAlex Zinenko@run
100*00d1a1a2SAlex Zinenkodef testReplicateOp():
101*00d1a1a2SAlex Zinenko  with_pdl = transform.WithPDLPatternsOp()
102*00d1a1a2SAlex Zinenko  with InsertionPoint(with_pdl.body):
103*00d1a1a2SAlex Zinenko    sequence = transform.SequenceOp(with_pdl.bodyTarget)
104*00d1a1a2SAlex Zinenko    with InsertionPoint(sequence.body):
105*00d1a1a2SAlex Zinenko      m1 = transform.PDLMatchOp(sequence.bodyTarget, "first")
106*00d1a1a2SAlex Zinenko      m2 = transform.PDLMatchOp(sequence.bodyTarget, "second")
107*00d1a1a2SAlex Zinenko      transform.ReplicateOp(m1, [m2])
108*00d1a1a2SAlex Zinenko      transform.YieldOp()
109*00d1a1a2SAlex Zinenko  # CHECK-LABEL: TEST: testReplicateOp
110*00d1a1a2SAlex Zinenko  # CHECK: %[[FIRST:.+]] = pdl_match
111*00d1a1a2SAlex Zinenko  # CHECK: %[[SECOND:.+]] = pdl_match
112*00d1a1a2SAlex Zinenko  # CHECK: %{{.*}} = replicate num(%[[FIRST]]) %[[SECOND]]
113