1*9f3f6d7bSStella Laurenzo# RUN: %PYTHON %s | FileCheck %s 2*9f3f6d7bSStella Laurenzo 3*9f3f6d7bSStella Laurenzoimport gc 4*9f3f6d7bSStella Laurenzofrom mlir.ir import * 5*9f3f6d7bSStella Laurenzo 6*9f3f6d7bSStella Laurenzo 7*9f3f6d7bSStella Laurenzodef run(f): 8*9f3f6d7bSStella Laurenzo print("\nTEST:", f.__name__) 9*9f3f6d7bSStella Laurenzo f() 10*9f3f6d7bSStella Laurenzo gc.collect() 11*9f3f6d7bSStella Laurenzo assert Context._get_live_count() == 0 12*9f3f6d7bSStella Laurenzo return f 13*9f3f6d7bSStella Laurenzo 14*9f3f6d7bSStella Laurenzo 15*9f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testDialectDescriptor 16*9f3f6d7bSStella Laurenzo@run 17*9f3f6d7bSStella Laurenzodef testDialectDescriptor(): 18*9f3f6d7bSStella Laurenzo ctx = Context() 19*9f3f6d7bSStella Laurenzo d = ctx.get_dialect_descriptor("std") 20*9f3f6d7bSStella Laurenzo # CHECK: <DialectDescriptor std> 21*9f3f6d7bSStella Laurenzo print(d) 22*9f3f6d7bSStella Laurenzo # CHECK: std 23*9f3f6d7bSStella Laurenzo print(d.namespace) 24*9f3f6d7bSStella Laurenzo try: 25*9f3f6d7bSStella Laurenzo _ = ctx.get_dialect_descriptor("not_existing") 26*9f3f6d7bSStella Laurenzo except ValueError: 27*9f3f6d7bSStella Laurenzo pass 28*9f3f6d7bSStella Laurenzo else: 29*9f3f6d7bSStella Laurenzo assert False, "Expected exception" 30*9f3f6d7bSStella Laurenzo 31*9f3f6d7bSStella Laurenzo 32*9f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testUserDialectClass 33*9f3f6d7bSStella Laurenzo@run 34*9f3f6d7bSStella Laurenzodef testUserDialectClass(): 35*9f3f6d7bSStella Laurenzo ctx = Context() 36*9f3f6d7bSStella Laurenzo # Access using attribute. 37*9f3f6d7bSStella Laurenzo d = ctx.dialects.std 38*9f3f6d7bSStella Laurenzo # Note that the standard dialect namespace prints as ''. Others will print 39*9f3f6d7bSStella Laurenzo # as "<Dialect %namespace (..." 40*9f3f6d7bSStella Laurenzo # CHECK: <Dialect (class mlir.dialects._std_ops_gen._Dialect)> 41*9f3f6d7bSStella Laurenzo print(d) 42*9f3f6d7bSStella Laurenzo try: 43*9f3f6d7bSStella Laurenzo _ = ctx.dialects.not_existing 44*9f3f6d7bSStella Laurenzo except AttributeError: 45*9f3f6d7bSStella Laurenzo pass 46*9f3f6d7bSStella Laurenzo else: 47*9f3f6d7bSStella Laurenzo assert False, "Expected exception" 48*9f3f6d7bSStella Laurenzo 49*9f3f6d7bSStella Laurenzo # Access using index. 50*9f3f6d7bSStella Laurenzo d = ctx.dialects["std"] 51*9f3f6d7bSStella Laurenzo # CHECK: <Dialect (class mlir.dialects._std_ops_gen._Dialect)> 52*9f3f6d7bSStella Laurenzo print(d) 53*9f3f6d7bSStella Laurenzo try: 54*9f3f6d7bSStella Laurenzo _ = ctx.dialects["not_existing"] 55*9f3f6d7bSStella Laurenzo except IndexError: 56*9f3f6d7bSStella Laurenzo pass 57*9f3f6d7bSStella Laurenzo else: 58*9f3f6d7bSStella Laurenzo assert False, "Expected exception" 59*9f3f6d7bSStella Laurenzo 60*9f3f6d7bSStella Laurenzo # Using the 'd' alias. 61*9f3f6d7bSStella Laurenzo d = ctx.d["std"] 62*9f3f6d7bSStella Laurenzo # CHECK: <Dialect (class mlir.dialects._std_ops_gen._Dialect)> 63*9f3f6d7bSStella Laurenzo print(d) 64*9f3f6d7bSStella Laurenzo 65*9f3f6d7bSStella Laurenzo 66*9f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testCustomOpView 67*9f3f6d7bSStella Laurenzo# This test uses the standard dialect AddFOp as an example of a user op. 68*9f3f6d7bSStella Laurenzo# TODO: Op creation and access is still quite verbose: simplify this test as 69*9f3f6d7bSStella Laurenzo# additional capabilities come online. 70*9f3f6d7bSStella Laurenzo@run 71*9f3f6d7bSStella Laurenzodef testCustomOpView(): 72*9f3f6d7bSStella Laurenzo 73*9f3f6d7bSStella Laurenzo def createInput(): 74*9f3f6d7bSStella Laurenzo op = Operation.create("pytest_dummy.intinput", results=[f32]) 75*9f3f6d7bSStella Laurenzo # TODO: Auto result cast from operation 76*9f3f6d7bSStella Laurenzo return op.results[0] 77*9f3f6d7bSStella Laurenzo 78*9f3f6d7bSStella Laurenzo with Context() as ctx, Location.unknown(): 79*9f3f6d7bSStella Laurenzo ctx.allow_unregistered_dialects = True 80*9f3f6d7bSStella Laurenzo m = Module.create() 81*9f3f6d7bSStella Laurenzo 82*9f3f6d7bSStella Laurenzo with InsertionPoint(m.body): 83*9f3f6d7bSStella Laurenzo f32 = F32Type.get() 84*9f3f6d7bSStella Laurenzo # Create via dialects context collection. 85*9f3f6d7bSStella Laurenzo input1 = createInput() 86*9f3f6d7bSStella Laurenzo input2 = createInput() 87*9f3f6d7bSStella Laurenzo op1 = ctx.dialects.std.AddFOp(input1.type, input1, input2) 88*9f3f6d7bSStella Laurenzo 89*9f3f6d7bSStella Laurenzo # Create via an import 90*9f3f6d7bSStella Laurenzo from mlir.dialects.std import AddFOp 91*9f3f6d7bSStella Laurenzo AddFOp(input1.type, input1, op1.result) 92*9f3f6d7bSStella Laurenzo 93*9f3f6d7bSStella Laurenzo # CHECK: %[[INPUT0:.*]] = "pytest_dummy.intinput" 94*9f3f6d7bSStella Laurenzo # CHECK: %[[INPUT1:.*]] = "pytest_dummy.intinput" 95*9f3f6d7bSStella Laurenzo # CHECK: %[[R0:.*]] = addf %[[INPUT0]], %[[INPUT1]] : f32 96*9f3f6d7bSStella Laurenzo # CHECK: %[[R1:.*]] = addf %[[INPUT0]], %[[R0]] : f32 97*9f3f6d7bSStella Laurenzo m.operation.print() 98*9f3f6d7bSStella Laurenzo 99*9f3f6d7bSStella Laurenzo 100*9f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testIsRegisteredOperation 101*9f3f6d7bSStella Laurenzo@run 102*9f3f6d7bSStella Laurenzodef testIsRegisteredOperation(): 103*9f3f6d7bSStella Laurenzo ctx = Context() 104*9f3f6d7bSStella Laurenzo 105*9f3f6d7bSStella Laurenzo # CHECK: std.cond_br: True 106*9f3f6d7bSStella Laurenzo print(f"std.cond_br: {ctx.is_registered_operation('std.cond_br')}") 107*9f3f6d7bSStella Laurenzo # CHECK: std.not_existing: False 108*9f3f6d7bSStella Laurenzo print(f"std.not_existing: {ctx.is_registered_operation('std.not_existing')}") 109