|
| 1 | +// RUN: mlir-translate -mlir-to-llvmir %s | FileCheck %s |
| 2 | + |
| 3 | +module attributes {omp.is_target_device = true, llvm.target_triple = "amdgcn-amd-amdhsa", |
| 4 | + dlti.dl_spec = #dlti.dl_spec<#dlti.dl_entry<"dlti.alloca_memory_space", 5 : ui32>>} { |
| 5 | + llvm.func @_QQmain() attributes {fir.bindc_name = "main"} { |
| 6 | + |
| 7 | + %ga = llvm.mlir.addressof @global_a : !llvm.ptr |
| 8 | + %map_a = omp.map.info var_ptr(%ga : !llvm.ptr, i32) map_clauses(tofrom) capture(ByCopy) -> !llvm.ptr {name = "i"} |
| 9 | + omp.target map_entries(%map_a -> %arg1 : !llvm.ptr) { |
| 10 | + %loaded = llvm.load %arg1 : !llvm.ptr -> i32 |
| 11 | + |
| 12 | + %any_addr = llvm.mlir.addressof @global_any : !llvm.ptr |
| 13 | + %any_gp = omp.groupprivate %any_addr : !llvm.ptr, device_type(any) -> !llvm.ptr |
| 14 | + llvm.store %loaded, %any_gp : i32, !llvm.ptr |
| 15 | + |
| 16 | + %host_addr = llvm.mlir.addressof @global_host : !llvm.ptr |
| 17 | + %host_gp = omp.groupprivate %host_addr : !llvm.ptr, device_type(host) -> !llvm.ptr |
| 18 | + llvm.store %loaded, %host_gp : i32, !llvm.ptr |
| 19 | + |
| 20 | + %nohost_addr = llvm.mlir.addressof @global_nohost : !llvm.ptr |
| 21 | + %nohost_gp = omp.groupprivate %nohost_addr : !llvm.ptr, device_type(nohost) -> !llvm.ptr |
| 22 | + llvm.store %loaded, %nohost_gp : i32, !llvm.ptr |
| 23 | + |
| 24 | + omp.terminator |
| 25 | + } |
| 26 | + llvm.return |
| 27 | + } |
| 28 | + llvm.mlir.global internal @global_a() : i32 |
| 29 | + llvm.mlir.global internal @global_any() : i32 |
| 30 | + llvm.mlir.global internal @global_host() : i32 |
| 31 | + llvm.mlir.global internal @global_nohost() : i32 |
| 32 | +} |
| 33 | + |
| 34 | +// CHECK: define {{.*}} amdgpu_kernel void @__omp_offloading_{{.*}}_{{.*}}__QQmain_{{.*}}(ptr %{{.*}}, ptr %{{.*}}) #{{[0-9]+}} { |
| 35 | +// CHECK-LABEL: omp.target: |
| 36 | +// CHECK-NEXT : %[[LOAD:.*]] = load i32, ptr %3, align 4 |
| 37 | +// CHECK-NEXT : %[[ALLOC_any:.*]] = call ptr @__kmpc_alloc_shared(i64 4) |
| 38 | +// CHECK-NEXT : store i32 %[[LOAD]], ptr %[[ALLOC_any]], align 4 |
| 39 | +// CHECK-NEXT : store i32 %[[LOAD]], ptr @global_host, align 4 |
| 40 | +// CHECK-NEXT : %[[ALLOC_NOHOST:.*]] = call ptr @__kmpc_alloc_shared(i64 4) |
| 41 | +// CHECK-NEXT : store i32 %[[LOAD]], ptr %[[ALLOC_NOHOST]], align 4 |
0 commit comments