Skip to content

Commit c14cfdd

Browse files
author
git apple-llvm automerger
committed
Merge commit 'e4d8e06f83f8' from llvm.org/main into next
2 parents 949c524 + e4d8e06 commit c14cfdd

File tree

2 files changed

+54
-6
lines changed

2 files changed

+54
-6
lines changed

clang/lib/CIR/CodeGen/CIRGenOpenACCClause.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -922,7 +922,7 @@ class OpenACCClauseCIREmitter final
922922

923923
void VisitDevicePtrClause(const OpenACCDevicePtrClause &clause) {
924924
if constexpr (isOneOfTypes<OpTy, mlir::acc::ParallelOp, mlir::acc::SerialOp,
925-
mlir::acc::KernelsOp>) {
925+
mlir::acc::KernelsOp, mlir::acc::DataOp>) {
926926
for (const Expr *var : clause.getVarList())
927927
addDataOperand<mlir::acc::DevicePtrOp>(
928928
var, mlir::acc::DataClause::acc_deviceptr, {},
@@ -932,7 +932,7 @@ class OpenACCClauseCIREmitter final
932932
applyToComputeOp(clause);
933933
} else {
934934
// TODO: When we've implemented this for everything, switch this to an
935-
// unreachable. data, declare remain.
935+
// unreachable. declare remains.
936936
return clauseNotImplemented(clause);
937937
}
938938
}
@@ -953,7 +953,7 @@ class OpenACCClauseCIREmitter final
953953

954954
void VisitPresentClause(const OpenACCPresentClause &clause) {
955955
if constexpr (isOneOfTypes<OpTy, mlir::acc::ParallelOp, mlir::acc::SerialOp,
956-
mlir::acc::KernelsOp>) {
956+
mlir::acc::KernelsOp, mlir::acc::DataOp>) {
957957
for (const Expr *var : clause.getVarList())
958958
addDataOperand<mlir::acc::PresentOp, mlir::acc::DeleteOp>(
959959
var, mlir::acc::DataClause::acc_present, {}, /*structured=*/true,
@@ -962,14 +962,14 @@ class OpenACCClauseCIREmitter final
962962
applyToComputeOp(clause);
963963
} else {
964964
// TODO: When we've implemented this for everything, switch this to an
965-
// unreachable. data & declare remain.
965+
// unreachable. declare remains.
966966
return clauseNotImplemented(clause);
967967
}
968968
}
969969

970970
void VisitAttachClause(const OpenACCAttachClause &clause) {
971971
if constexpr (isOneOfTypes<OpTy, mlir::acc::ParallelOp, mlir::acc::SerialOp,
972-
mlir::acc::KernelsOp>) {
972+
mlir::acc::KernelsOp, mlir::acc::DataOp>) {
973973
for (const Expr *var : clause.getVarList())
974974
addDataOperand<mlir::acc::AttachOp, mlir::acc::DetachOp>(
975975
var, mlir::acc::DataClause::acc_attach, {}, /*structured=*/true,
@@ -978,7 +978,7 @@ class OpenACCClauseCIREmitter final
978978
applyToComputeOp(clause);
979979
} else {
980980
// TODO: When we've implemented this for everything, switch this to an
981-
// unreachable. data, enter data remain.
981+
// unreachable. enter data remains.
982982
return clauseNotImplemented(clause);
983983
}
984984
}

clang/test/CIR/CodeGenOpenACC/data.c

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
void acc_data(int cond) {
44
// CHECK: cir.func{{.*}} @acc_data(%[[ARG:.*]]: !s32i{{.*}}) {
55
// CHECK-NEXT: %[[COND:.*]] = cir.alloca !s32i, !cir.ptr<!s32i>, ["cond", init]
6+
7+
int *ptr;
8+
// CHECK-NEXT: %[[PTR:.*]] = cir.alloca !cir.ptr<!s32i>, !cir.ptr<!cir.ptr<!s32i>>, ["ptr"]
69
// CHECK-NEXT: cir.store %[[ARG]], %[[COND]] : !s32i, !cir.ptr<!s32i>
710

811
#pragma acc data default(none)
@@ -221,5 +224,50 @@ void acc_data(int cond) {
221224
// CHECK-NEXT: acc.terminator
222225
// CHECK-NEXT: attributes {defaultAttr = #acc<defaultvalue none>}
223226

227+
#pragma acc data deviceptr(ptr)
228+
{}
229+
// CHECK-NEXT: %[[DEV_PTR:.*]] = acc.deviceptr varPtr(%[[PTR]] : !cir.ptr<!cir.ptr<!s32i>>) -> !cir.ptr<!cir.ptr<!s32i>> {name = "ptr"}
230+
// CHECK-NEXT: acc.data dataOperands(%[[DEV_PTR]] : !cir.ptr<!cir.ptr<!s32i>>) {
231+
// CHECK-NEXT: acc.terminator
232+
// CHECK-NEXT: } loc
233+
#pragma acc data deviceptr(ptr) device_type(radeon) async
234+
{}
235+
// CHECK-NEXT: %[[DEV_PTR:.*]] = acc.deviceptr varPtr(%[[PTR]] : !cir.ptr<!cir.ptr<!s32i>>) async([#acc.device_type<radeon>]) -> !cir.ptr<!cir.ptr<!s32i>> {name = "ptr"}
236+
// CHECK-NEXT: acc.data async([#acc.device_type<radeon>]) dataOperands(%[[DEV_PTR]] : !cir.ptr<!cir.ptr<!s32i>>) {
237+
// CHECK-NEXT: acc.terminator
238+
// CHECK-NEXT: } loc
239+
240+
#pragma acc data present(cond)
241+
{}
242+
// CHECK-NEXT: %[[PRESENT:.*]] = acc.present varPtr(%[[COND]] : !cir.ptr<!s32i>) -> !cir.ptr<!s32i> {name = "cond"}
243+
// CHECK-NEXT: acc.data dataOperands(%[[PRESENT]] : !cir.ptr<!s32i>) {
244+
// CHECK-NEXT: acc.terminator
245+
// CHECK-NEXT: } loc
246+
// CHECK-NEXT: acc.delete accPtr(%[[PRESENT]] : !cir.ptr<!s32i>) {dataClause = #acc<data_clause acc_present>, name = "cond"}
247+
248+
#pragma acc data present(cond) device_type(radeon) async
249+
{}
250+
// CHECK-NEXT: %[[PRESENT:.*]] = acc.present varPtr(%[[COND]] : !cir.ptr<!s32i>) async([#acc.device_type<radeon>]) -> !cir.ptr<!s32i> {name = "cond"}
251+
// CHECK-NEXT: acc.data async([#acc.device_type<radeon>]) dataOperands(%[[PRESENT]] : !cir.ptr<!s32i>) {
252+
// CHECK-NEXT: acc.terminator
253+
// CHECK-NEXT: } loc
254+
// CHECK-NEXT: acc.delete accPtr(%[[PRESENT]] : !cir.ptr<!s32i>) async([#acc.device_type<radeon>]) {dataClause = #acc<data_clause acc_present>, name = "cond"}
255+
256+
#pragma acc data attach(ptr)
257+
{}
258+
// CHECK-NEXT: %[[ATTACH:.*]] = acc.attach varPtr(%[[PTR]] : !cir.ptr<!cir.ptr<!s32i>>) -> !cir.ptr<!cir.ptr<!s32i>> {name = "ptr"}
259+
// CHECK-NEXT: acc.data dataOperands(%[[ATTACH]] : !cir.ptr<!cir.ptr<!s32i>>) {
260+
// CHECK-NEXT: acc.terminator
261+
// CHECK-NEXT: } loc
262+
// CHECK-NEXT: acc.detach accPtr(%[[ATTACH]] : !cir.ptr<!cir.ptr<!s32i>>) {dataClause = #acc<data_clause acc_attach>, name = "ptr"}
263+
264+
#pragma acc data attach(ptr) device_type(radeon) async
265+
{}
266+
// CHECK-NEXT: %[[ATTACH:.*]] = acc.attach varPtr(%[[PTR]] : !cir.ptr<!cir.ptr<!s32i>>) async([#acc.device_type<radeon>]) -> !cir.ptr<!cir.ptr<!s32i>> {name = "ptr"}
267+
// CHECK-NEXT: acc.data async([#acc.device_type<radeon>]) dataOperands(%[[ATTACH]] : !cir.ptr<!cir.ptr<!s32i>>) {
268+
// CHECK-NEXT: acc.terminator
269+
// CHECK-NEXT: } loc
270+
// CHECK-NEXT: acc.detach accPtr(%[[ATTACH]] : !cir.ptr<!cir.ptr<!s32i>>) async([#acc.device_type<radeon>]) {dataClause = #acc<data_clause acc_attach>, name = "ptr"}
271+
224272
// CHECK-NEXT: cir.return
225273
}

0 commit comments

Comments
 (0)