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