xref: /llvm-project/mlir/test/python/dialects/gpu/dialect.py (revision 016e1eb9c86923bf6a9669697f6be8309d12b78c)
16995183eSJungwook Park# RUN: %PYTHON %s | FileCheck %s
26995183eSJungwook Park
36995183eSJungwook Parkfrom mlir.ir import *
46995183eSJungwook Parkimport mlir.dialects.gpu as gpu
56995183eSJungwook Parkimport mlir.dialects.gpu.passes
66995183eSJungwook Parkfrom mlir.passmanager import *
76995183eSJungwook Park
86995183eSJungwook Park
96995183eSJungwook Parkdef run(f):
106995183eSJungwook Park    print("\nTEST:", f.__name__)
116995183eSJungwook Park    with Context(), Location.unknown():
126995183eSJungwook Park        f()
136995183eSJungwook Park    return f
146995183eSJungwook Park
156995183eSJungwook Park
166995183eSJungwook Park# CHECK-LABEL: testGPUPass
176995183eSJungwook Park#       CHECK: SUCCESS
186995183eSJungwook Park@run
196995183eSJungwook Parkdef testGPUPass():
206995183eSJungwook Park    PassManager.parse("any(gpu-kernel-outlining)")
216995183eSJungwook Park    print("SUCCESS")
226995183eSJungwook Park
236995183eSJungwook Park
246995183eSJungwook Park# CHECK-LABEL: testMMAElementWiseAttr
256995183eSJungwook Park@run
266995183eSJungwook Parkdef testMMAElementWiseAttr():
276995183eSJungwook Park    module = Module.create()
286995183eSJungwook Park    with InsertionPoint(module.body):
296995183eSJungwook Park        gpu.BlockDimOp(gpu.Dimension.y)
30bfcd3fa8SAlexander Belyaev    # CHECK: %block_dim_y = gpu.block_dim  y
316995183eSJungwook Park    print(module)
326995183eSJungwook Park    pass
336e6da74cSMaksim Levental
346e6da74cSMaksim Levental
356e6da74cSMaksim Levental# CHECK-LABEL: testObjectAttr
366e6da74cSMaksim Levental@run
376e6da74cSMaksim Leventaldef testObjectAttr():
386e6da74cSMaksim Levental    target = Attribute.parse("#nvvm.target")
396e6da74cSMaksim Levental    format = gpu.CompilationTarget.Fatbin
406e6da74cSMaksim Levental    object = b"BC\xc0\xde5\x14\x00\x00\x05\x00\x00\x00b\x0c0$MY\xbef"
416e6da74cSMaksim Levental    properties = DictAttr.get({"O": IntegerAttr.get(IntegerType.get_signless(32), 2)})
426e6da74cSMaksim Levental    o = gpu.ObjectAttr.get(target, format, object, properties)
436e6da74cSMaksim Levental    # CHECK: #gpu.object<#nvvm.target, properties = {O = 2 : i32}, "BC\C0\DE5\14\00\00\05\00\00\00b\0C0$MY\BEf">
446e6da74cSMaksim Levental    print(o)
456e6da74cSMaksim Levental    assert o.object == object
466e6da74cSMaksim Levental
476e6da74cSMaksim Levental    o = gpu.ObjectAttr.get(target, format, object)
486e6da74cSMaksim Levental    # CHECK: #gpu.object<#nvvm.target, "BC\C0\DE5\14\00\00\05\00\00\00b\0C0$MY\BEf">
496e6da74cSMaksim Levental    print(o)
506e6da74cSMaksim Levental
516e6da74cSMaksim Levental    object = (
526e6da74cSMaksim Levental        b"//\n// Generated by LLVM NVPTX Back-End\n//\n\n.version 6.0\n.target sm_50"
536e6da74cSMaksim Levental    )
546e6da74cSMaksim Levental    o = gpu.ObjectAttr.get(target, format, object)
556e6da74cSMaksim Levental    # CHECK: #gpu.object<#nvvm.target, "//\0A// Generated by LLVM NVPTX Back-End\0A//\0A\0A.version 6.0\0A.target sm_50">
566e6da74cSMaksim Levental    print(o)
576e6da74cSMaksim Levental    assert o.object == object
58*016e1eb9SFabian Mora
59*016e1eb9SFabian Mora    object = b"BC\xc0\xde5\x14\x00\x00\x05\x00\x00\x00b\x0c0$MY\xbef"
60*016e1eb9SFabian Mora    kernelTable = Attribute.parse(
61*016e1eb9SFabian Mora        '#gpu.kernel_table<[#gpu.kernel_metadata<"kernel", () -> ()>]>'
62*016e1eb9SFabian Mora    )
63*016e1eb9SFabian Mora    o = gpu.ObjectAttr.get(target, format, object, kernels=kernelTable)
64*016e1eb9SFabian Mora    # CHECK: #gpu.object<#nvvm.target, kernels = <[#gpu.kernel_metadata<"kernel", () -> ()>]>, "BC\C0\DE5\14\00\00\05\00\00\00b\0C0$MY\BEf">
65*016e1eb9SFabian Mora    print(o)
66*016e1eb9SFabian Mora    assert o.kernels == kernelTable
67