@@ -32,6 +32,26 @@ module attributes {dlti.dl_spec = #dlti.dl_spec<#dlti.dl_entry<"dlti.alloca_memo
32
32
}
33
33
llvm.return
34
34
}
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
+ }
35
55
}
36
56
37
57
// 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
64
84
// CHECK-SAME: ptr addrspace(1) @[[NUM_THREADS_GLOB:[0-9]+]] to ptr),
65
85
// CHECK-SAME: i32 [[NUM_THREADS_TMP0:%.*]], i32 1, i32 156,
66
86
// 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