5
5
6
6
llvm.func @parallel_op_1_private (%arg0: !llvm.ptr ) {
7
7
omp.parallel private (@x.privatizer %arg0 -> %arg2 : !llvm.ptr ) {
8
- %0 = llvm.load %arg2 : !llvm.ptr -> f32
8
+ // %0 = llvm.load %arg2 : !llvm.ptr -> f32
9
9
omp.terminator
10
10
}
11
11
llvm.return
12
12
}
13
13
14
- // CHECK-LABEL: @parallel_op_1_private
15
- // CHECK-SAME: (ptr %[[ORIG:.*]]) {
16
- // CHECK: %[[OMP_PAR_ARG:.*]] = alloca { ptr }, align 8
17
- // CHECK: %[[ORIG_GEP:.*]] = getelementptr { ptr }, ptr %[[OMP_PAR_ARG]], i32 0, i32 0
18
- // CHECK: store ptr %[[ORIG]], ptr %[[ORIG_GEP]], align 8
19
- // CHECK: call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @1, i32 1, ptr @parallel_op_1_private..omp_par, ptr %[[OMP_PAR_ARG]])
20
- // CHECK: }
21
-
22
- // CHECK-LABEL: void @parallel_op_1_private..omp_par
23
- // CHECK-SAME: (ptr noalias %{{.*}}, ptr noalias %{{.*}}, ptr %[[ARG:.*]])
24
- // CHECK: %[[ORIG_PTR_PTR:.*]] = getelementptr { ptr }, ptr %[[ARG]], i32 0, i32 0
25
- // CHECK: %[[ORIG_PTR:.*]] = load ptr, ptr %[[ORIG_PTR_PTR]], align 8
26
-
27
- // Check that the privatizer alloc region was inlined properly.
28
- // CHECK: %[[PRIV_ALLOC:.*]] = alloca float, align 4
29
- // CHECK: %[[ORIG_VAL:.*]] = load float, ptr %[[ORIG_PTR]], align 4
30
- // CHECK: store float %[[ORIG_VAL]], ptr %[[PRIV_ALLOC]], align 4
31
- // CHECK-NEXT: br
32
-
33
- // Check that the privatized value is used (rather than the original one).
34
- // CHECK: load float, ptr %[[PRIV_ALLOC]], align 4
35
- // CHECK: }
36
-
37
- llvm.func @parallel_op_2_privates (%arg0: !llvm.ptr , %arg1: !llvm.ptr ) {
38
- omp.parallel private (@x.privatizer %arg0 -> %arg2 : !llvm.ptr , @y.privatizer %arg1 -> %arg3 : !llvm.ptr ) {
39
- %0 = llvm.load %arg2 : !llvm.ptr -> f32
40
- %1 = llvm.load %arg3 : !llvm.ptr -> i32
41
- omp.terminator
42
- }
43
- llvm.return
44
- }
45
-
46
- // CHECK-LABEL: @parallel_op_2_privates
47
- // CHECK-SAME: (ptr %[[ORIG1:.*]], ptr %[[ORIG2:.*]]) {
48
- // CHECK: %[[OMP_PAR_ARG:.*]] = alloca { ptr, ptr }, align 8
49
- // CHECK: %[[ORIG1_GEP:.*]] = getelementptr { ptr, ptr }, ptr %[[OMP_PAR_ARG]], i32 0, i32 0
50
- // CHECK: store ptr %[[ORIG1]], ptr %[[ORIG1_GEP]], align 8
51
- // CHECK: call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @1, i32 1, ptr @parallel_op_2_privates..omp_par, ptr %[[OMP_PAR_ARG]])
52
- // CHECK: }
53
-
54
- // CHECK-LABEL: void @parallel_op_2_privates..omp_par
55
- // CHECK-SAME: (ptr noalias %{{.*}}, ptr noalias %{{.*}}, ptr %[[ARG:.*]])
56
- // CHECK: %[[ORIG1_PTR_PTR:.*]] = getelementptr { ptr, ptr }, ptr %[[ARG]], i32 0, i32 0
57
- // CHECK: %[[ORIG1_PTR:.*]] = load ptr, ptr %[[ORIG1_PTR_PTR]], align 8
58
- // CHECK: %[[ORIG2_PTR_PTR:.*]] = getelementptr { ptr, ptr }, ptr %[[ARG]], i32 0, i32 1
59
- // CHECK: %[[ORIG2_PTR:.*]] = load ptr, ptr %[[ORIG2_PTR_PTR]], align 8
60
-
61
- // Check that the privatizer alloc region was inlined properly.
62
- // CHECK: %[[PRIV1_ALLOC:.*]] = alloca float, align 4
63
- // CHECK: %[[ORIG1_VAL:.*]] = load float, ptr %[[ORIG1_PTR]], align 4
64
- // CHECK: store float %[[ORIG1_VAL]], ptr %[[PRIV1_ALLOC]], align 4
65
- // CHECK: %[[PRIV2_ALLOC:.*]] = alloca i32, align 4
66
- // CHECK: %[[ORIG2_VAL:.*]] = load i32, ptr %[[ORIG2_PTR]], align 4
67
- // CHECK: store i32 %[[ORIG2_VAL]], ptr %[[PRIV2_ALLOC]], align 4
68
- // CHECK-NEXT: br
69
-
70
- // Check that the privatized value is used (rather than the original one).
71
- // CHECK: load float, ptr %[[PRIV1_ALLOC]], align 4
72
- // CHECK: load i32, ptr %[[PRIV2_ALLOC]], align 4
73
- // CHECK: }
74
-
75
14
omp.private {type = private } @x.privatizer : !llvm.ptr alloc {
76
15
^bb0 (%arg0: !llvm.ptr ):
77
16
%c1 = llvm.mlir.constant (1 : i32 ) : i32
@@ -80,12 +19,3 @@ omp.private {type = private} @x.privatizer : !llvm.ptr alloc {
80
19
llvm.store %1 , %0 : f32 , !llvm.ptr
81
20
omp.yield (%0 : !llvm.ptr )
82
21
}
83
-
84
- omp.private {type = private } @y.privatizer : !llvm.ptr alloc {
85
- ^bb0 (%arg0: !llvm.ptr ):
86
- %c1 = llvm.mlir.constant (1 : i32 ) : i32
87
- %0 = llvm.alloca %c1 x i32 : (i32 ) -> !llvm.ptr
88
- %1 = llvm.load %arg0 : !llvm.ptr -> i32
89
- llvm.store %1 , %0 : i32 , !llvm.ptr
90
- omp.yield (%0 : !llvm.ptr )
91
- }
0 commit comments