Skip to content

Commit 2557f99

Browse files
committed
[OpenACC][CIR] Implement 'no_create' lowering for data
This lowering ends up being identical to 'create', except it is a acc.nocreate for the start operation, and it doesn't permit modifier list. This patch implements this by adding it to the list of permitted handlers (along with compute), plus adds tests.
1 parent f03782d commit 2557f99

File tree

2 files changed

+30
-4
lines changed

2 files changed

+30
-4
lines changed

clang/lib/CIR/CodeGen/CIRGenOpenACCClause.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -939,17 +939,15 @@ class OpenACCClauseCIREmitter final
939939

940940
void VisitNoCreateClause(const OpenACCNoCreateClause &clause) {
941941
if constexpr (isOneOfTypes<OpTy, mlir::acc::ParallelOp, mlir::acc::SerialOp,
942-
mlir::acc::KernelsOp>) {
942+
mlir::acc::KernelsOp, mlir::acc::DataOp>) {
943943
for (const Expr *var : clause.getVarList())
944944
addDataOperand<mlir::acc::NoCreateOp, mlir::acc::DeleteOp>(
945945
var, mlir::acc::DataClause::acc_no_create, {}, /*structured=*/true,
946946
/*implicit=*/false);
947947
} else if constexpr (isCombinedType<OpTy>) {
948948
applyToComputeOp(clause);
949949
} else {
950-
// TODO: When we've implemented this for everything, switch this to an
951-
// unreachable. data remains.
952-
return clauseNotImplemented(clause);
950+
llvm_unreachable("Unknown construct kind in VisitNoCreateClause");
953951
}
954952
}
955953

clang/test/CIR/CodeGenOpenACC/data-copy-copyin-copyout-create.c

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,4 +187,32 @@ void acc_data(int parmVar) {
187187
// CHECK-NEXT: } loc
188188
// CHECK-NEXT: acc.delete accPtr(%[[CREATE2]] : !cir.ptr<!s32i>) {dataClause = #acc<data_clause acc_create>, modifiers = #acc<data_clause_modifier zero>, name = "parmVar"}
189189
// CHECK-NEXT: acc.delete accPtr(%[[CREATE1]] : !cir.ptr<!s32i>) {dataClause = #acc<data_clause acc_create>, modifiers = #acc<data_clause_modifier capture>, name = "parmVar"}
190+
191+
#pragma acc data no_create(parmVar)
192+
;
193+
// CHECK-NEXT: %[[NOCREATE1:.*]] = acc.nocreate varPtr(%[[PARM]] : !cir.ptr<!s32i>) -> !cir.ptr<!s32i> {name = "parmVar"}
194+
// CHECK-NEXT: acc.data dataOperands(%[[NOCREATE1]] : !cir.ptr<!s32i>) {
195+
// CHECK-NEXT: acc.terminator
196+
// CHECK-NEXT: } loc
197+
// CHECK-NEXT: acc.delete accPtr(%[[NOCREATE1]] : !cir.ptr<!s32i>) {dataClause = #acc<data_clause acc_no_create>, name = "parmVar"}
198+
199+
#pragma acc data no_create(parmVar) no_create(localVar1)
200+
;
201+
// CHECK-NEXT: %[[NOCREATE1:.*]] = acc.nocreate varPtr(%[[PARM]] : !cir.ptr<!s32i>) -> !cir.ptr<!s32i> {name = "parmVar"}
202+
// CHECK-NEXT: %[[NOCREATE2:.*]] = acc.nocreate varPtr(%[[LV1]] : !cir.ptr<!s32i>) -> !cir.ptr<!s32i> {name = "localVar1"}
203+
// CHECK-NEXT: acc.data dataOperands(%[[NOCREATE1]], %[[NOCREATE2]] : !cir.ptr<!s32i>, !cir.ptr<!s32i>) {
204+
// CHECK-NEXT: acc.terminator
205+
// CHECK-NEXT: } loc
206+
// CHECK-NEXT: acc.delete accPtr(%[[NOCREATE2]] : !cir.ptr<!s32i>) {dataClause = #acc<data_clause acc_no_create>, name = "localVar1"}
207+
// CHECK-NEXT: acc.delete accPtr(%[[NOCREATE1]] : !cir.ptr<!s32i>) {dataClause = #acc<data_clause acc_no_create>, name = "parmVar"}
208+
209+
#pragma acc data no_create(parmVar, localVar1)
210+
;
211+
// CHECK-NEXT: %[[NOCREATE1:.*]] = acc.nocreate varPtr(%[[PARM]] : !cir.ptr<!s32i>) -> !cir.ptr<!s32i> {name = "parmVar"}
212+
// CHECK-NEXT: %[[NOCREATE2:.*]] = acc.nocreate varPtr(%[[LV1]] : !cir.ptr<!s32i>) -> !cir.ptr<!s32i> {name = "localVar1"}
213+
// CHECK-NEXT: acc.data dataOperands(%[[NOCREATE1]], %[[NOCREATE2]] : !cir.ptr<!s32i>, !cir.ptr<!s32i>) {
214+
// CHECK-NEXT: acc.terminator
215+
// CHECK-NEXT: } loc
216+
// CHECK-NEXT: acc.delete accPtr(%[[NOCREATE2]] : !cir.ptr<!s32i>) {dataClause = #acc<data_clause acc_no_create>, name = "localVar1"}
217+
// CHECK-NEXT: acc.delete accPtr(%[[NOCREATE1]] : !cir.ptr<!s32i>) {dataClause = #acc<data_clause acc_no_create>, name = "parmVar"}
190218
}

0 commit comments

Comments
 (0)