@@ -1011,8 +1011,8 @@ extern "C" void acc_combined(int N, int cond) {
1011
1011
// CHECK-NEXT: acc.terminator
1012
1012
// CHECK-NEXT: } loc
1013
1013
}
1014
- extern " C" void acc_combined_deviceptr (int *arg1, int *arg2) {
1015
- // CHECK: cir.func @acc_combined_deviceptr (%[[ARG1_PARAM:.*]]: !cir.ptr<!s32i>{{.*}}, %[[ARG2_PARAM:.*]]: !cir.ptr<!s32i>{{.*}}) {
1014
+ extern " C" void acc_combined_data_clauses (int *arg1, int *arg2) {
1015
+ // CHECK: cir.func @acc_combined_data_clauses (%[[ARG1_PARAM:.*]]: !cir.ptr<!s32i>{{.*}}, %[[ARG2_PARAM:.*]]: !cir.ptr<!s32i>{{.*}}) {
1016
1016
// CHECK-NEXT: %[[ARG1:.*]] = cir.alloca !cir.ptr<!s32i>, !cir.ptr<!cir.ptr<!s32i>>, ["arg1", init]
1017
1017
// CHECK-NEXT: %[[ARG2:.*]] = cir.alloca !cir.ptr<!s32i>, !cir.ptr<!cir.ptr<!s32i>>, ["arg2", init]
1018
1018
// CHECK-NEXT: cir.store %[[ARG1_PARAM]], %[[ARG1]] : !cir.ptr<!s32i>, !cir.ptr<!cir.ptr<!s32i>>
@@ -1079,4 +1079,39 @@ extern "C" void acc_combined_deviceptr(int *arg1, int *arg2) {
1079
1079
// CHECK-NEXT: } loc
1080
1080
// CHECK-NEXT: acc.terminator
1081
1081
// CHECK-NEXT: } loc
1082
+
1083
+ #pragma acc parallel loop no_create(arg1)
1084
+ for (unsigned I = 0 ; I < 5 ; ++I);
1085
+ // CHECK-NEXT: %[[NOCREATE1:.*]] = acc.nocreate varPtr(%[[ARG1]] : !cir.ptr<!cir.ptr<!s32i>>) -> !cir.ptr<!cir.ptr<!s32i>> {name = "arg1"}
1086
+ // CHECK-NEXT: acc.parallel combined(loop) dataOperands(%[[NOCREATE1]] : !cir.ptr<!cir.ptr<!s32i>>) {
1087
+ // CHECK-NEXT: acc.loop combined(parallel) {
1088
+ // CHECK: acc.yield
1089
+ // CHECK-NEXT: } loc
1090
+ // CHECK-NEXT: acc.yield
1091
+ // CHECK-NEXT: } loc
1092
+ // CHECK-NEXT: acc.delete accPtr(%[[NOCREATE1]] : !cir.ptr<!cir.ptr<!s32i>>) {dataClause = #acc<data_clause acc_no_create>, name = "arg1"}
1093
+
1094
+ #pragma acc serial loop no_create(arg2)
1095
+ for (unsigned I = 0 ; I < 5 ; ++I);
1096
+ // CHECK-NEXT: %[[NOCREATE2:.*]] = acc.nocreate varPtr(%[[ARG2]] : !cir.ptr<!cir.ptr<!s32i>>) -> !cir.ptr<!cir.ptr<!s32i>> {name = "arg2"}
1097
+ // CHECK-NEXT: acc.serial combined(loop) dataOperands(%[[NOCREATE2]] : !cir.ptr<!cir.ptr<!s32i>>) {
1098
+ // CHECK-NEXT: acc.loop combined(serial) {
1099
+ // CHECK: acc.yield
1100
+ // CHECK-NEXT: } loc
1101
+ // CHECK-NEXT: acc.yield
1102
+ // CHECK-NEXT: } loc
1103
+ // CHECK-NEXT: acc.delete accPtr(%[[NOCREATE2]] : !cir.ptr<!cir.ptr<!s32i>>) {dataClause = #acc<data_clause acc_no_create>, name = "arg2"}
1104
+
1105
+ #pragma acc kernels loop no_create(arg1, arg2) device_type(host) async
1106
+ for (unsigned I = 0 ; I < 5 ; ++I);
1107
+ // CHECK-NEXT: %[[NOCREATE1:.*]] = acc.nocreate varPtr(%[[ARG1]] : !cir.ptr<!cir.ptr<!s32i>>) async([#acc.device_type<host>]) -> !cir.ptr<!cir.ptr<!s32i>> {name = "arg1"}
1108
+ // CHECK-NEXT: %[[NOCREATE2:.*]] = acc.nocreate varPtr(%[[ARG2]] : !cir.ptr<!cir.ptr<!s32i>>) async([#acc.device_type<host>]) -> !cir.ptr<!cir.ptr<!s32i>> {name = "arg2"}
1109
+ // CHECK-NEXT: acc.kernels combined(loop) dataOperands(%[[NOCREATE1]], %[[NOCREATE2]] : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!cir.ptr<!s32i>>) async([#acc.device_type<host>]) {
1110
+ // CHECK-NEXT: acc.loop combined(kernels) {
1111
+ // CHECK: acc.yield
1112
+ // CHECK-NEXT: } loc
1113
+ // CHECK-NEXT: acc.terminator
1114
+ // CHECK-NEXT: } loc
1115
+ // CHECK-NEXT: acc.delete accPtr(%[[NOCREATE2]] : !cir.ptr<!cir.ptr<!s32i>>) async([#acc.device_type<host>]) {dataClause = #acc<data_clause acc_no_create>, name = "arg2"}
1116
+ // CHECK-NEXT: acc.delete accPtr(%[[NOCREATE1]] : !cir.ptr<!cir.ptr<!s32i>>) async([#acc.device_type<host>]) {dataClause = #acc<data_clause acc_no_create>, name = "arg1"}
1082
1117
}
0 commit comments