xref: /llvm-project/mlir/test/Target/LLVMIR/omptarget-nowait-llvm.mlir (revision d0d03805f8829a1a2f3fba2c2d2a54c827021f00)
1// RUN: mlir-translate -mlir-to-llvmir %s 2>&1 | FileCheck %s
2
3// Set a dummy target triple to enable target region outlining.
4module attributes {omp.target_triples = ["dummy-target-triple"]} {
5  llvm.func @_QPfoo() {
6    %0 = llvm.mlir.constant(1 : i64) : i64
7    %1 = llvm.alloca %0 x i32 : (i64) -> !llvm.ptr
8    %2 = omp.map.info var_ptr(%1 : !llvm.ptr, i32) map_clauses(implicit) capture(ByCopy) -> !llvm.ptr
9    omp.target nowait map_entries(%2 -> %arg0 : !llvm.ptr) {
10      %3 = llvm.mlir.constant(2 : i32) : i32
11      llvm.store %3, %arg0 : i32, !llvm.ptr
12      omp.terminator
13    }
14    llvm.return
15  }
16
17
18// CHECK: define void @_QPfoo() {
19
20// CHECK:   %[[TASK:.*]] = call ptr @__kmpc_omp_target_task_alloc
21// CHECK-SAME:     (ptr @{{.*}}, i32 %{{.*}}, i32 {{.*}}, i64 {{.*}}, i64 {{.*}}, ptr
22// CHECK-SAME:     @[[TASK_PROXY_FUNC:.*]], i64 {{.*}})
23
24// CHECK:   call i32 @__kmpc_omp_task(ptr {{.*}}, i32 %{{.*}}, ptr %[[TASK]])
25// CHECK: }
26
27
28// CHECK: define internal void @[[TASK_PROXY_FUNC]](i32 %{{.*}}, ptr %{{.*}}) {
29// CHECK:   call void @_QPfoo..omp_par(i32 %{{.*}}, ptr %{{.*}})
30// CHECK: }
31}
32