@@ -1117,36 +1117,71 @@ extern "C" void acc_combined_data_clauses(int *arg1, int *arg2) {
11171117
11181118#pragma acc parallel loop present(arg1)
11191119 for (unsigned I = 0 ; I < 5 ; ++I);
1120- // CHECK-NEXT: %[[NOCREATE1 :.*]] = acc.present varPtr(%[[ARG1]] : !cir.ptr<!cir.ptr<!s32i>>) -> !cir.ptr<!cir.ptr<!s32i>> {name = "arg1"}
1121- // CHECK-NEXT: acc.parallel combined(loop) dataOperands(%[[NOCREATE1 ]] : !cir.ptr<!cir.ptr<!s32i>>) {
1120+ // CHECK-NEXT: %[[PRESENT1 :.*]] = acc.present varPtr(%[[ARG1]] : !cir.ptr<!cir.ptr<!s32i>>) -> !cir.ptr<!cir.ptr<!s32i>> {name = "arg1"}
1121+ // CHECK-NEXT: acc.parallel combined(loop) dataOperands(%[[PRESENT1 ]] : !cir.ptr<!cir.ptr<!s32i>>) {
11221122 // CHECK-NEXT: acc.loop combined(parallel) {
11231123 // CHECK: acc.yield
11241124 // CHECK-NEXT: } loc
11251125 // CHECK-NEXT: acc.yield
11261126 // CHECK-NEXT: } loc
1127- // CHECK-NEXT: acc.delete accPtr(%[[NOCREATE1 ]] : !cir.ptr<!cir.ptr<!s32i>>) {dataClause = #acc<data_clause acc_present>, name = "arg1"}
1127+ // CHECK-NEXT: acc.delete accPtr(%[[PRESENT1 ]] : !cir.ptr<!cir.ptr<!s32i>>) {dataClause = #acc<data_clause acc_present>, name = "arg1"}
11281128
11291129#pragma acc serial loop present(arg2)
11301130 for (unsigned I = 0 ; I < 5 ; ++I);
1131- // CHECK-NEXT: %[[NOCREATE2 :.*]] = acc.present varPtr(%[[ARG2]] : !cir.ptr<!cir.ptr<!s32i>>) -> !cir.ptr<!cir.ptr<!s32i>> {name = "arg2"}
1132- // CHECK-NEXT: acc.serial combined(loop) dataOperands(%[[NOCREATE2 ]] : !cir.ptr<!cir.ptr<!s32i>>) {
1131+ // CHECK-NEXT: %[[PRESENT2 :.*]] = acc.present varPtr(%[[ARG2]] : !cir.ptr<!cir.ptr<!s32i>>) -> !cir.ptr<!cir.ptr<!s32i>> {name = "arg2"}
1132+ // CHECK-NEXT: acc.serial combined(loop) dataOperands(%[[PRESENT2 ]] : !cir.ptr<!cir.ptr<!s32i>>) {
11331133 // CHECK-NEXT: acc.loop combined(serial) {
11341134 // CHECK: acc.yield
11351135 // CHECK-NEXT: } loc
11361136 // CHECK-NEXT: acc.yield
11371137 // CHECK-NEXT: } loc
1138- // CHECK-NEXT: acc.delete accPtr(%[[NOCREATE2 ]] : !cir.ptr<!cir.ptr<!s32i>>) {dataClause = #acc<data_clause acc_present>, name = "arg2"}
1138+ // CHECK-NEXT: acc.delete accPtr(%[[PRESENT2 ]] : !cir.ptr<!cir.ptr<!s32i>>) {dataClause = #acc<data_clause acc_present>, name = "arg2"}
11391139
11401140#pragma acc kernels loop present(arg1, arg2) device_type(host) async
11411141 for (unsigned I = 0 ; I < 5 ; ++I);
1142- // CHECK-NEXT: %[[NOCREATE1:.*]] = acc.present varPtr(%[[ARG1]] : !cir.ptr<!cir.ptr<!s32i>>) async([#acc.device_type<host>]) -> !cir.ptr<!cir.ptr<!s32i>> {name = "arg1"}
1143- // CHECK-NEXT: %[[NOCREATE2:.*]] = acc.present varPtr(%[[ARG2]] : !cir.ptr<!cir.ptr<!s32i>>) async([#acc.device_type<host>]) -> !cir.ptr<!cir.ptr<!s32i>> {name = "arg2"}
1144- // CHECK-NEXT: acc.kernels combined(loop) dataOperands(%[[NOCREATE1]], %[[NOCREATE2]] : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!cir.ptr<!s32i>>) async([#acc.device_type<host>]) {
1142+ // CHECK-NEXT: %[[PRESENT1:.*]] = acc.present varPtr(%[[ARG1]] : !cir.ptr<!cir.ptr<!s32i>>) async([#acc.device_type<host>]) -> !cir.ptr<!cir.ptr<!s32i>> {name = "arg1"}
1143+ // CHECK-NEXT: %[[PRESENT2:.*]] = acc.present varPtr(%[[ARG2]] : !cir.ptr<!cir.ptr<!s32i>>) async([#acc.device_type<host>]) -> !cir.ptr<!cir.ptr<!s32i>> {name = "arg2"}
1144+ // CHECK-NEXT: acc.kernels combined(loop) dataOperands(%[[PRESENT1]], %[[PRESENT2]] : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!cir.ptr<!s32i>>) async([#acc.device_type<host>]) {
1145+ // CHECK-NEXT: acc.loop combined(kernels) {
1146+ // CHECK: acc.yield
1147+ // CHECK-NEXT: } loc
1148+ // CHECK-NEXT: acc.terminator
1149+ // CHECK-NEXT: } loc
1150+ // CHECK-NEXT: acc.delete accPtr(%[[PRESENT2]] : !cir.ptr<!cir.ptr<!s32i>>) async([#acc.device_type<host>]) {dataClause = #acc<data_clause acc_present>, name = "arg2"}
1151+ // CHECK-NEXT: acc.delete accPtr(%[[PRESENT1]] : !cir.ptr<!cir.ptr<!s32i>>) async([#acc.device_type<host>]) {dataClause = #acc<data_clause acc_present>, name = "arg1"}
1152+
1153+ #pragma acc parallel loop attach(arg1)
1154+ for (unsigned I = 0 ; I < 5 ; ++I);
1155+ // CHECK-NEXT: %[[ATTACH1:.*]] = acc.attach varPtr(%[[ARG1]] : !cir.ptr<!cir.ptr<!s32i>>) -> !cir.ptr<!cir.ptr<!s32i>> {name = "arg1"}
1156+ // CHECK-NEXT: acc.parallel combined(loop) dataOperands(%[[ATTACH1]] : !cir.ptr<!cir.ptr<!s32i>>) {
1157+ // CHECK-NEXT: acc.loop combined(parallel) {
1158+ // CHECK: acc.yield
1159+ // CHECK-NEXT: } loc
1160+ // CHECK-NEXT: acc.yield
1161+ // CHECK-NEXT: } loc
1162+ // CHECK-NEXT: acc.detach accPtr(%[[ATTACH1]] : !cir.ptr<!cir.ptr<!s32i>>) {dataClause = #acc<data_clause acc_attach>, name = "arg1"}
1163+
1164+ #pragma acc serial loop attach(arg2)
1165+ for (unsigned I = 0 ; I < 5 ; ++I);
1166+ // CHECK-NEXT: %[[ATTACH2:.*]] = acc.attach varPtr(%[[ARG2]] : !cir.ptr<!cir.ptr<!s32i>>) -> !cir.ptr<!cir.ptr<!s32i>> {name = "arg2"}
1167+ // CHECK-NEXT: acc.serial combined(loop) dataOperands(%[[ATTACH2]] : !cir.ptr<!cir.ptr<!s32i>>) {
1168+ // CHECK-NEXT: acc.loop combined(serial) {
1169+ // CHECK: acc.yield
1170+ // CHECK-NEXT: } loc
1171+ // CHECK-NEXT: acc.yield
1172+ // CHECK-NEXT: } loc
1173+ // CHECK-NEXT: acc.detach accPtr(%[[ATTACH2]] : !cir.ptr<!cir.ptr<!s32i>>) {dataClause = #acc<data_clause acc_attach>, name = "arg2"}
1174+
1175+ #pragma acc kernels loop attach(arg1, arg2) device_type(host) async
1176+ for (unsigned I = 0 ; I < 5 ; ++I);
1177+ // CHECK-NEXT: %[[ATTACH1:.*]] = acc.attach varPtr(%[[ARG1]] : !cir.ptr<!cir.ptr<!s32i>>) async([#acc.device_type<host>]) -> !cir.ptr<!cir.ptr<!s32i>> {name = "arg1"}
1178+ // CHECK-NEXT: %[[ATTACH2:.*]] = acc.attach varPtr(%[[ARG2]] : !cir.ptr<!cir.ptr<!s32i>>) async([#acc.device_type<host>]) -> !cir.ptr<!cir.ptr<!s32i>> {name = "arg2"}
1179+ // CHECK-NEXT: acc.kernels combined(loop) dataOperands(%[[ATTACH1]], %[[ATTACH2]] : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!cir.ptr<!s32i>>) async([#acc.device_type<host>]) {
11451180 // CHECK-NEXT: acc.loop combined(kernels) {
11461181 // CHECK: acc.yield
11471182 // CHECK-NEXT: } loc
11481183 // CHECK-NEXT: acc.terminator
11491184 // CHECK-NEXT: } loc
1150- // CHECK-NEXT: acc.delete accPtr(%[[NOCREATE2 ]] : !cir.ptr<!cir.ptr<!s32i>>) async([#acc.device_type<host>]) {dataClause = #acc<data_clause acc_present >, name = "arg2"}
1151- // CHECK-NEXT: acc.delete accPtr(%[[NOCREATE1 ]] : !cir.ptr<!cir.ptr<!s32i>>) async([#acc.device_type<host>]) {dataClause = #acc<data_clause acc_present >, name = "arg1"}
1185+ // CHECK-NEXT: acc.detach accPtr(%[[ATTACH2 ]] : !cir.ptr<!cir.ptr<!s32i>>) async([#acc.device_type<host>]) {dataClause = #acc<data_clause acc_attach >, name = "arg2"}
1186+ // CHECK-NEXT: acc.detach accPtr(%[[ATTACH1 ]] : !cir.ptr<!cir.ptr<!s32i>>) async([#acc.device_type<host>]) {dataClause = #acc<data_clause acc_attach >, name = "arg1"}
11521187}
0 commit comments