Skip to content

Commit 6682a44

Browse files
[NFC][OpenMP][MLIR] Add MLIR test for lowering parallel if
Add test for clause omp target parallel if (parallel : cond ) Test checks if corresponding MLIR construct is correctly lowered to LLVM IR.
1 parent 0515ccc commit 6682a44

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed

mlir/test/Target/LLVMIR/omptarget-parallel-llvm.mlir

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,26 @@ module attributes {dlti.dl_spec = #dlti.dl_spec<#dlti.dl_entry<"dlti.alloca_memo
3232
}
3333
llvm.return
3434
}
35+
36+
llvm.func @parallel_if(%arg0: !llvm.ptr {fir.bindc_name = "ifcond"}) {
37+
%0 = llvm.mlir.constant(1 : i64) : i64
38+
%1 = llvm.alloca %0 x i32 {bindc_name = "d"} : (i64) -> !llvm.ptr
39+
%2 = omp.map_info var_ptr(%1 : !llvm.ptr, i32) map_clauses(from) capture(ByRef) -> !llvm.ptr {name = "d"}
40+
%3 = omp.map_info var_ptr(%arg0 : !llvm.ptr, i32) map_clauses(implicit, exit_release_or_enter_alloc) capture(ByCopy) -> !llvm.ptr {name = "ifcond"}
41+
omp.target map_entries(%2 -> %arg1, %3 -> %arg2 : !llvm.ptr, !llvm.ptr) {
42+
^bb0(%arg1: !llvm.ptr, %arg2: !llvm.ptr):
43+
%4 = llvm.mlir.constant(10 : i32) : i32
44+
%5 = llvm.load %arg2 : !llvm.ptr -> i32
45+
%6 = llvm.mlir.constant(0 : i64) : i32
46+
%7 = llvm.icmp "ne" %5, %6 : i32
47+
omp.parallel if(%7 : i1) {
48+
llvm.store %4, %arg1 : i32, !llvm.ptr
49+
omp.terminator
50+
}
51+
omp.terminator
52+
}
53+
llvm.return
54+
}
3555
}
3656

3757
// CHECK: define weak_odr protected amdgpu_kernel void [[FUNC0:@.*]](
@@ -64,3 +84,14 @@ module attributes {dlti.dl_spec = #dlti.dl_spec<#dlti.dl_entry<"dlti.alloca_memo
6484
// CHECK-SAME: ptr addrspace(1) @[[NUM_THREADS_GLOB:[0-9]+]] to ptr),
6585
// CHECK-SAME: i32 [[NUM_THREADS_TMP0:%.*]], i32 1, i32 156,
6686
// CHECK-SAME: i32 -1, ptr [[FUNC_NUM_THREADS1:@.*]], ptr null, ptr [[NUM_THREADS_TMP1:%.*]], i64 1)
87+
88+
// CHECK: define weak_odr protected amdgpu_kernel void [[FUNC2:@.*]](
89+
// CHECK-SAME: ptr [[IFCOND_ARG0:%.*]], ptr [[IFCOND_ARG1:.*]], ptr [[IFCOND_ARG2:.*]]) {
90+
// CHECK: store ptr [[IFCOND_ARG2]], ptr [[IFCOND_TMP1:%.]], align 8
91+
// CHECK: [[IFCOND_TMP2:%.*]] = load i32, ptr [[IFCOND_TMP1]], align 4
92+
// CHECK: [[IFCOND_TMP3:%.*]] = icmp ne i32 [[IFCOND_TMP2]], 0
93+
// CHECK: [[IFCOND_TMP4:%.*]] = sext i1 [[IFCOND_TMP3]] to i32
94+
// CHECK: call void @__kmpc_parallel_51(ptr addrspacecast (
95+
// CHECK-SAME: ptr addrspace(1) @[[IFCOND_GLOB:[0-9]+]] to ptr),
96+
// CHECK-SAME: i32 [[IFCOND_THREAD_NUM:%.*]], i32 [[IFCOND_TMP4]], i32 -1,
97+
// CHECK-SAME: i32 -1, ptr [[FUNC1:@.*]], ptr null, ptr [[IFCOND_TMP5:%.*]], i64 1)

0 commit comments

Comments
 (0)