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