Skip to content

Commit a1b3851

Browse files
committed
add llvm translation tests for groupprivate
1 parent 33483d5 commit a1b3851

File tree

2 files changed

+56
-26
lines changed

2 files changed

+56
-26
lines changed

mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6137,13 +6137,13 @@ convertOmpGroupprivate(Operation &opInst, llvm::IRBuilderBase &builder,
61376137

61386138
if (failed(checkImplementationStatus(opInst)))
61396139
return failure();
6140-
6140+
61416141
bool isTargetDevice = ompBuilder->Config.isTargetDevice();
61426142
auto deviceType = groupprivateOp.getDeviceType();
6143-
6143+
61446144
// skip allocation based on device_type
61456145
bool shouldAllocate = true;
6146-
if (deviceType.has_value()) {
6146+
if (deviceType.has_value()) {
61476147
switch (*deviceType) {
61486148
case mlir::omp::DeclareTargetDeviceType::host:
61496149
// Only allocate on host
@@ -6187,10 +6187,8 @@ convertOmpGroupprivate(Operation &opInst, llvm::IRBuilderBase &builder,
61876187
// Call runtime to allocate shared memory for this group
61886188
llvm::Value *groupPrivatePtr =
61896189
builder.CreateCall(allocSharedFn, {builder.getInt64(typeSize)});
6190-
resultPtr =
6191-
builder.CreateBitCast(groupPrivatePtr, globalValue->getType());
6192-
}
6193-
else {
6190+
resultPtr = builder.CreateBitCast(groupPrivatePtr, globalValue->getType());
6191+
} else {
61946192
// Use original global address when not allocating group-private storage
61956193
resultPtr = moduleTranslation.lookupValue(symAddr);
61966194
if (!resultPtr) {

mlir/test/Target/LLVMIR/openmp-llvm.mlir

Lines changed: 51 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3452,36 +3452,68 @@ llvm.func @nested_task_with_deps() {
34523452

34533453
// -----
34543454

3455-
// CHECK: @_QFsubEx = internal global i32 undef
3455+
module attributes {omp.is_target_device = false} {
3456+
llvm.mlir.global internal @any() : i32
3457+
llvm.mlir.global internal @host() : i32
3458+
llvm.mlir.global internal @nohost() : i32
3459+
llvm.func @omp_groupprivate_host() {
3460+
%0 = llvm.mlir.constant(1 : i32) : i32
3461+
%1 = llvm.mlir.addressof @any : !llvm.ptr
3462+
%2 = omp.groupprivate %1 : !llvm.ptr, device_type(any) -> !llvm.ptr
3463+
llvm.store %0, %2 : i32, !llvm.ptr
3464+
3465+
%3 = llvm.mlir.addressof @host : !llvm.ptr
3466+
%4 = omp.groupprivate %3 : !llvm.ptr, device_type(host) -> !llvm.ptr
3467+
llvm.store %0, %4 : i32, !llvm.ptr
3468+
3469+
%5 = llvm.mlir.addressof @nohost : !llvm.ptr
3470+
%6 = omp.groupprivate %5 : !llvm.ptr, device_type(nohost) -> !llvm.ptr
3471+
llvm.store %0, %6 : i32, !llvm.ptr
3472+
llvm.return
3473+
}
3474+
}
34563475

3457-
// CHECK-LABEL: @omp_groupprivate
3458-
llvm.func @omp_groupprivate() {
3476+
// CHECK: @any = internal global i32 undef
3477+
// CHECK: @host = internal global i32 undef
3478+
// CHECK: @nohost = internal global i32 undef
3479+
// CHECK-LABEL: @omp_groupprivate_host
34593480
// CHECK: [[TMP1:%.*]] = call ptr @__kmpc_alloc_shared(i64 4)
34603481
// CHECK: store i32 1, ptr [[TMP1]], align 4
3461-
3462-
// CHECK-LABEL: omp.teams.region{{.*}}
34633482
// CHECK: [[TMP2:%.*]] = call ptr @__kmpc_alloc_shared(i64 4)
3464-
// CHECK: store i32 2, ptr [[TMP2]], align 4
3483+
// CHECK: store i32 1, ptr [[TMP2]], align 4
3484+
// CHECK: store i32 1, ptr @nohost, align 4
34653485

3466-
%0 = llvm.mlir.constant(1 : i32) : i32
3467-
%1 = llvm.mlir.constant(2 : i32) : i32
3468-
%2 = llvm.mlir.constant(3 : i32) : i32
3486+
// -----
34693487

3470-
%3 = llvm.mlir.addressof @_QFsubEx : !llvm.ptr
3471-
%4 = omp.groupprivate %3 : !llvm.ptr -> !llvm.ptr
3488+
module attributes {omp.is_target_device = true} {
3489+
llvm.mlir.global internal @any() : i32
3490+
llvm.mlir.global internal @host() : i32
3491+
llvm.mlir.global internal @nohost() : i32
3492+
llvm.func @omp_groupprivate_device() {
3493+
%0 = llvm.mlir.constant(1 : i32) : i32
3494+
%1 = llvm.mlir.addressof @any : !llvm.ptr
3495+
%2 = omp.groupprivate %1 : !llvm.ptr, device_type(any) -> !llvm.ptr
3496+
llvm.store %0, %2 : i32, !llvm.ptr
34723497

3498+
%3 = llvm.mlir.addressof @host : !llvm.ptr
3499+
%4 = omp.groupprivate %3 : !llvm.ptr, device_type(host) -> !llvm.ptr
34733500
llvm.store %0, %4 : i32, !llvm.ptr
34743501

3475-
omp.teams {
3476-
%5 = omp.groupprivate %3 : !llvm.ptr -> !llvm.ptr
3477-
llvm.store %1, %5 : i32, !llvm.ptr
3478-
omp.terminator
3479-
}
3480-
3481-
llvm.store %2, %4 : i32, !llvm.ptr
3502+
%5 = llvm.mlir.addressof @nohost : !llvm.ptr
3503+
%6 = omp.groupprivate %5 : !llvm.ptr, device_type(nohost) -> !llvm.ptr
3504+
llvm.store %0, %6 : i32, !llvm.ptr
34823505
llvm.return
34833506
}
3507+
}
34843508

3485-
llvm.mlir.global internal @_QFsubEx() : i32
3509+
// CHECK: @any = internal global i32 undef
3510+
// CHECK: @host = internal global i32 undef
3511+
// CHECK: @nohost = internal global i32 undef
3512+
// CHECK-LABEL: @omp_groupprivate_device
3513+
// CHECK: [[TMP1:%.*]] = call ptr @__kmpc_alloc_shared(i64 4)
3514+
// CHECK: store i32 1, ptr [[TMP1]], align 4
3515+
// CHECK: store i32 1, ptr @host, align 4
3516+
// CHECK: [[TMP2:%.*]] = call ptr @__kmpc_alloc_shared(i64 4)
3517+
// CHECK: store i32 1, ptr [[TMP2]], align 4
34863518

34873519
// -----

0 commit comments

Comments
 (0)