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