@@ -1011,8 +1011,8 @@ extern "C" void acc_combined(int N, int cond) {
10111011 // CHECK-NEXT: acc.terminator
10121012 // CHECK-NEXT: } loc
10131013}
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>{{.*}}) {
10161016 // CHECK-NEXT: %[[ARG1:.*]] = cir.alloca !cir.ptr<!s32i>, !cir.ptr<!cir.ptr<!s32i>>, ["arg1", init]
10171017 // CHECK-NEXT: %[[ARG2:.*]] = cir.alloca !cir.ptr<!s32i>, !cir.ptr<!cir.ptr<!s32i>>, ["arg2", init]
10181018 // 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) {
10791079 // CHECK-NEXT: } loc
10801080 // CHECK-NEXT: acc.terminator
10811081 // 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"}
10821117}
0 commit comments