xref: /llvm-project/mlir/test/python/dialects/gpu/module-to-binary-rocdl.py (revision 7ed96b1c0d9751efcf72591b36edd11a3ea97284)
16995183eSJungwook Park# REQUIRES: host-supports-amdgpu
26995183eSJungwook Park# RUN: %PYTHON %s | FileCheck %s
36995183eSJungwook Park
46995183eSJungwook Parkfrom mlir.ir import *
56995183eSJungwook Parkimport mlir.dialects.gpu as gpu
66995183eSJungwook Parkimport mlir.dialects.gpu.passes
76995183eSJungwook Parkfrom mlir.passmanager import *
86995183eSJungwook Park
96995183eSJungwook Park
106995183eSJungwook Parkdef run(f):
116995183eSJungwook Park    print("\nTEST:", f.__name__)
126995183eSJungwook Park    with Context(), Location.unknown():
136995183eSJungwook Park        f()
146995183eSJungwook Park    return f
156995183eSJungwook Park
166995183eSJungwook Park
176995183eSJungwook Park# CHECK-LABEL: testGPUToLLVMBin
186995183eSJungwook Park@run
196995183eSJungwook Parkdef testGPUToLLVMBin():
206995183eSJungwook Park    with Context():
216995183eSJungwook Park        module = Module.parse(
226995183eSJungwook Park            r"""
236995183eSJungwook Parkmodule attributes {gpu.container_module} {
246995183eSJungwook Park  gpu.module @kernel_module1 [#rocdl.target<chip = "gfx90a">] {
25*7ed96b1cSChristian Ulmann    llvm.func @kernel(%arg0: i32, %arg1: !llvm.ptr,
26*7ed96b1cSChristian Ulmann        %arg2: !llvm.ptr, %arg3: i64, %arg4: i64,
276995183eSJungwook Park        %arg5: i64) attributes {gpu.kernel} {
286995183eSJungwook Park      llvm.return
296995183eSJungwook Park    }
306995183eSJungwook Park  }
316995183eSJungwook Park}
326995183eSJungwook Park    """
336995183eSJungwook Park        )
346995183eSJungwook Park    pm = PassManager("any")
356995183eSJungwook Park    pm.add("gpu-module-to-binary{format=llvm}")
366995183eSJungwook Park    pm.run(module.operation)
376995183eSJungwook Park    print(module)
386995183eSJungwook Park    # CHECK-LABEL:gpu.binary @kernel_module1
396995183eSJungwook Park    # CHECK:[#gpu.object<#rocdl.target<chip = "gfx90a">, offload = "{{.*}}">]
406995183eSJungwook Park
416995183eSJungwook Park
426995183eSJungwook Park# CHECK-LABEL: testGPUToASMBin
436995183eSJungwook Park@run
446995183eSJungwook Parkdef testGPUToASMBin():
456995183eSJungwook Park    with Context():
466995183eSJungwook Park        module = Module.parse(
476995183eSJungwook Park            r"""
486995183eSJungwook Parkmodule attributes {gpu.container_module} {
496995183eSJungwook Park  gpu.module @kernel_module2 [#rocdl.target<flags = {fast}>, #rocdl.target] {
50*7ed96b1cSChristian Ulmann    llvm.func @kernel(%arg0: i32, %arg1: !llvm.ptr,
51*7ed96b1cSChristian Ulmann        %arg2: !llvm.ptr, %arg3: i64, %arg4: i64,
526995183eSJungwook Park        %arg5: i64) attributes {gpu.kernel} {
536995183eSJungwook Park      llvm.return
546995183eSJungwook Park    }
556995183eSJungwook Park  }
566995183eSJungwook Park}
576995183eSJungwook Park    """
586995183eSJungwook Park        )
596995183eSJungwook Park    pm = PassManager("any")
606995183eSJungwook Park    pm.add("gpu-module-to-binary{format=isa}")
616995183eSJungwook Park    pm.run(module.operation)
626995183eSJungwook Park    print(module)
636995183eSJungwook Park    # CHECK-LABEL:gpu.binary @kernel_module2
646995183eSJungwook Park    # CHECK:[#gpu.object<#rocdl.target<flags = {fast}>, assembly = "{{.*}}">, #gpu.object<#rocdl.target, assembly = "{{.*}}">]
65