@@ -49,38 +49,61 @@ module attributes {dlti.dl_spec = #dlti.dl_spec<#dlti.dl_entry<"dlti.alloca_memo
49
49
}
50
50
omp.terminator
51
51
}
52
- llvm.return
53
- }
54
- }
55
-
56
- // CHECK: call i32 @__kmpc_target_init
57
- // CHECK: call void @[[OUTLINED_TARGET:__omp_offloading_[A-Za-z0-9_.]*]]
52
+ // CHECK: call i32 @__kmpc_target_init
53
+ // CHECK: call void @[[OUTLINED_TARGET:__omp_offloading_[A-Za-z0-9_.]*]]
58
54
55
+ // CHECK: define internal void @[[OUTLINED_TARGET]]
56
+ // CHECK: %[[X_PRIV:.*]] = call align 8 ptr @__kmpc_alloc_shared(i64 4)
57
+ // CHECK: %[[GEP_X:.*]] = getelementptr { {{.*}} }, ptr addrspace(5) %structArg
58
+ // CHECK-NEXT: store ptr %[[X_PRIV]], ptr addrspace(5) %[[GEP_X]]
59
+ // CHECK-NEXT: call void @[[OUTLINED_TEAMS:__omp_offloading_[A-Za-z0-9_.]*]](ptr %structArg.ascast)
59
60
60
- // CHECK: define internal void @[[OUTLINED_TARGET]]
61
- // CHECK: %[[X_PRIV:.*]] = call align 8 ptr @__kmpc_alloc_shared(i64 4)
62
- // CHECK: %[[GEP_X:.*]] = getelementptr { {{.*}} }, ptr addrspace(5) %structArg
63
- // CHECK-NEXT: store ptr %[[X_PRIV]], ptr addrspace(5) %[[GEP_X]]
64
- // CHECK-NEXT: call void @[[OUTLINED_TEAMS:__omp_offloading_[A-Za-z0-9_.]*]](ptr %structArg.ascast)
61
+ // CHECK: [[REDUCE_FINALIZE_BB:reduce\.finalize.*]]:
62
+ // CHECK-NEXT: %{{.*}} = call i32 @__kmpc_global_thread_num
63
+ // CHECK-NEXT: call void @__kmpc_barrier
64
+ // CHECK-NEXT: call void @__kmpc_free_shared(ptr %[[X_PRIV]], i64 4)
65
65
66
- // CHECK: [[REDUCE_FINALIZE_BB:reduce\.finalize.*]]:
67
- // CHECK-NEXT: %{{.*}} = call i32 @__kmpc_global_thread_num
68
- // CHECK-NEXT: call void @__kmpc_barrier
69
- // CHECK-NEXT: call void @__kmpc_free_shared(ptr %[[X_PRIV]], i64 4)
66
+ // CHECK: define internal void @[[OUTLINED_TEAMS]]
67
+ // CHECK: %[[Y_PRIV:.*]] = call align 8 ptr @__kmpc_alloc_shared(i64 4)
68
+ // CHECK: %[[Z_PRIV:.*]] = call align 8 ptr @__kmpc_alloc_shared(i64 4)
70
69
70
+ // %[[GEP_Y:.*]] = getelementptr { {{.*}} }, ptr addrspace(5) %structArg
71
+ // store ptr %[[Y_PRIV]], ptr addrspace(5) %[[GEP_Y]], align 8
72
+ // %[[GEP_Z:.*]] = getelementptr { {{.*}} }, ptr addrspace(5) %structArg
73
+ // store ptr %[[Z_PRIV]], ptr addrspace(5) %[[GEP_Z]], align 8
71
74
72
- // CHECK: define internal void @[[OUTLINED_TEAMS]]
73
- // CHECK: %[[Y_PRIV:.*]] = call align 8 ptr @__kmpc_alloc_shared( i64 4)
74
- // CHECK: %[[Z_PRIV :.*]] = call align 8 ptr @__kmpc_alloc_shared(i64 4)
75
+ // CHECK: call void @__kmpc_free_shared(ptr %[[Y_PRIV]], i64 4)
76
+ // CHECK-NEXT: call void @__kmpc_free_shared(ptr %[[Z_PRIV]], i64 4)
77
+ // CHECK-NEXT: br label %[[EXIT_BB :.*]]
75
78
76
- // %[[GEP_Y:.*]] = getelementptr { {{.*}} }, ptr addrspace(5) %structArg
77
- // store ptr %[[Y_PRIV]], ptr addrspace(5) %[[GEP_Y]], align 8
78
- // %[[GEP_Z:.*]] = getelementptr { {{.*}} }, ptr addrspace(5) %structArg
79
- // store ptr %[[Z_PRIV]], ptr addrspace(5) %[[GEP_Z]], align 8
79
+ // CHECK: [[EXIT_BB]]:
80
+ // CHECK-NEXT: ret void
80
81
81
- // CHECK: call void @__kmpc_free_shared(ptr %[[Y_PRIV]], i64 4)
82
- // CHECK-NEXT: call void @__kmpc_free_shared(ptr %[[Z_PRIV]], i64 4)
83
- // CHECK-NEXT: br label %[[EXIT_BB:.*]]
82
+ // Test that we don't misidentify a private `distribute` value as being
83
+ // located inside of a parallel region if that parallel region is not nested
84
+ // inside of `omp.distribute`.
85
+ omp.parallel {
86
+ %18 = omp.map.info var_ptr (%2 : !llvm.ptr , i32 ) map_clauses (tofrom ) capture (ByRef ) -> !llvm.ptr {name = " x" }
87
+ omp.target map_entries (%18 -> %arg0 : !llvm.ptr ) {
88
+ %19 = llvm.mlir.constant (10000 : i32 ) : i32
89
+ %20 = llvm.mlir.constant (1 : i32 ) : i32
90
+ omp.teams {
91
+ omp.distribute private (@privatizer %arg0 -> %arg1 : !llvm.ptr ) {
92
+ omp.loop_nest (%arg2 ) : i32 = (%20 ) to (%19 ) inclusive step (%20 ) {
93
+ llvm.store %arg2 , %arg1 : i32 , !llvm.ptr
94
+ omp.yield
95
+ }
96
+ }
97
+ omp.terminator
98
+ }
99
+ omp.terminator
100
+ }
101
+ omp.terminator
102
+ }
103
+ // CHECK: call i32 @__kmpc_target_init
104
+ // CHECK-NOT: call {{.*}} @__kmpc_alloc_shared
105
+ // CHECK-NOT: call {{.*}} @__kmpc_free_shared
84
106
85
- // CHECK: [[EXIT_BB]]:
86
- // CHECK-NEXT: ret void
107
+ llvm.return
108
+ }
109
+ }
0 commit comments