19f3f6d7bSStella Laurenzo# RUN: %PYTHON %s | FileCheck %s 29f3f6d7bSStella Laurenzo 39f3f6d7bSStella Laurenzoimport gc 49f3f6d7bSStella Laurenzofrom mlir.ir import * 59f3f6d7bSStella Laurenzo 69f3f6d7bSStella Laurenzo 79f3f6d7bSStella Laurenzodef run(f): 89f3f6d7bSStella Laurenzo print("\nTEST:", f.__name__) 99f3f6d7bSStella Laurenzo f() 109f3f6d7bSStella Laurenzo gc.collect() 119f3f6d7bSStella Laurenzo assert Context._get_live_count() == 0 129f3f6d7bSStella Laurenzo return f 139f3f6d7bSStella Laurenzo 149f3f6d7bSStella Laurenzo 159f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testDialectDescriptor 169f3f6d7bSStella Laurenzo@run 179f3f6d7bSStella Laurenzodef testDialectDescriptor(): 189f3f6d7bSStella Laurenzo ctx = Context() 199f3f6d7bSStella Laurenzo d = ctx.get_dialect_descriptor("std") 209f3f6d7bSStella Laurenzo # CHECK: <DialectDescriptor std> 219f3f6d7bSStella Laurenzo print(d) 229f3f6d7bSStella Laurenzo # CHECK: std 239f3f6d7bSStella Laurenzo print(d.namespace) 249f3f6d7bSStella Laurenzo try: 259f3f6d7bSStella Laurenzo _ = ctx.get_dialect_descriptor("not_existing") 269f3f6d7bSStella Laurenzo except ValueError: 279f3f6d7bSStella Laurenzo pass 289f3f6d7bSStella Laurenzo else: 299f3f6d7bSStella Laurenzo assert False, "Expected exception" 309f3f6d7bSStella Laurenzo 319f3f6d7bSStella Laurenzo 329f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testUserDialectClass 339f3f6d7bSStella Laurenzo@run 349f3f6d7bSStella Laurenzodef testUserDialectClass(): 359f3f6d7bSStella Laurenzo ctx = Context() 369f3f6d7bSStella Laurenzo # Access using attribute. 379f3f6d7bSStella Laurenzo d = ctx.dialects.std 38f8479d9dSRiver Riddle # CHECK: <Dialect std (class mlir.dialects._std_ops_gen._Dialect)> 399f3f6d7bSStella Laurenzo print(d) 409f3f6d7bSStella Laurenzo try: 419f3f6d7bSStella Laurenzo _ = ctx.dialects.not_existing 429f3f6d7bSStella Laurenzo except AttributeError: 439f3f6d7bSStella Laurenzo pass 449f3f6d7bSStella Laurenzo else: 459f3f6d7bSStella Laurenzo assert False, "Expected exception" 469f3f6d7bSStella Laurenzo 479f3f6d7bSStella Laurenzo # Access using index. 489f3f6d7bSStella Laurenzo d = ctx.dialects["std"] 49f8479d9dSRiver Riddle # CHECK: <Dialect std (class mlir.dialects._std_ops_gen._Dialect)> 509f3f6d7bSStella Laurenzo print(d) 519f3f6d7bSStella Laurenzo try: 529f3f6d7bSStella Laurenzo _ = ctx.dialects["not_existing"] 539f3f6d7bSStella Laurenzo except IndexError: 549f3f6d7bSStella Laurenzo pass 559f3f6d7bSStella Laurenzo else: 569f3f6d7bSStella Laurenzo assert False, "Expected exception" 579f3f6d7bSStella Laurenzo 589f3f6d7bSStella Laurenzo # Using the 'd' alias. 599f3f6d7bSStella Laurenzo d = ctx.d["std"] 60f8479d9dSRiver Riddle # CHECK: <Dialect std (class mlir.dialects._std_ops_gen._Dialect)> 619f3f6d7bSStella Laurenzo print(d) 629f3f6d7bSStella Laurenzo 639f3f6d7bSStella Laurenzo 649f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testCustomOpView 659f3f6d7bSStella Laurenzo# This test uses the standard dialect AddFOp as an example of a user op. 669f3f6d7bSStella Laurenzo# TODO: Op creation and access is still quite verbose: simplify this test as 679f3f6d7bSStella Laurenzo# additional capabilities come online. 689f3f6d7bSStella Laurenzo@run 699f3f6d7bSStella Laurenzodef testCustomOpView(): 709f3f6d7bSStella Laurenzo 719f3f6d7bSStella Laurenzo def createInput(): 729f3f6d7bSStella Laurenzo op = Operation.create("pytest_dummy.intinput", results=[f32]) 739f3f6d7bSStella Laurenzo # TODO: Auto result cast from operation 749f3f6d7bSStella Laurenzo return op.results[0] 759f3f6d7bSStella Laurenzo 769f3f6d7bSStella Laurenzo with Context() as ctx, Location.unknown(): 779f3f6d7bSStella Laurenzo ctx.allow_unregistered_dialects = True 789f3f6d7bSStella Laurenzo m = Module.create() 799f3f6d7bSStella Laurenzo 809f3f6d7bSStella Laurenzo with InsertionPoint(m.body): 819f3f6d7bSStella Laurenzo f32 = F32Type.get() 829f3f6d7bSStella Laurenzo # Create via dialects context collection. 839f3f6d7bSStella Laurenzo input1 = createInput() 849f3f6d7bSStella Laurenzo input2 = createInput() 85*2995d29bSAlex Zinenko op1 = ctx.dialects.arith.AddFOp(input1, input2) 869f3f6d7bSStella Laurenzo 879f3f6d7bSStella Laurenzo # Create via an import 88a54f4eaeSMogball from mlir.dialects.arith import AddFOp 89*2995d29bSAlex Zinenko AddFOp(input1, op1.result) 909f3f6d7bSStella Laurenzo 919f3f6d7bSStella Laurenzo # CHECK: %[[INPUT0:.*]] = "pytest_dummy.intinput" 929f3f6d7bSStella Laurenzo # CHECK: %[[INPUT1:.*]] = "pytest_dummy.intinput" 93a54f4eaeSMogball # CHECK: %[[R0:.*]] = arith.addf %[[INPUT0]], %[[INPUT1]] : f32 94a54f4eaeSMogball # CHECK: %[[R1:.*]] = arith.addf %[[INPUT0]], %[[R0]] : f32 959f3f6d7bSStella Laurenzo m.operation.print() 969f3f6d7bSStella Laurenzo 979f3f6d7bSStella Laurenzo 989f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testIsRegisteredOperation 999f3f6d7bSStella Laurenzo@run 1009f3f6d7bSStella Laurenzodef testIsRegisteredOperation(): 1019f3f6d7bSStella Laurenzo ctx = Context() 1029f3f6d7bSStella Laurenzo 1039f3f6d7bSStella Laurenzo # CHECK: std.cond_br: True 1049f3f6d7bSStella Laurenzo print(f"std.cond_br: {ctx.is_registered_operation('std.cond_br')}") 1059f3f6d7bSStella Laurenzo # CHECK: std.not_existing: False 1069f3f6d7bSStella Laurenzo print(f"std.not_existing: {ctx.is_registered_operation('std.not_existing')}") 107