@@ -1117,36 +1117,71 @@ extern "C" void acc_combined_data_clauses(int *arg1, int *arg2) {
1117
1117
1118
1118
#pragma acc parallel loop present(arg1)
1119
1119
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>>) {
1122
1122
// CHECK-NEXT: acc.loop combined(parallel) {
1123
1123
// CHECK: acc.yield
1124
1124
// CHECK-NEXT: } loc
1125
1125
// CHECK-NEXT: acc.yield
1126
1126
// 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"}
1128
1128
1129
1129
#pragma acc serial loop present(arg2)
1130
1130
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>>) {
1133
1133
// CHECK-NEXT: acc.loop combined(serial) {
1134
1134
// CHECK: acc.yield
1135
1135
// CHECK-NEXT: } loc
1136
1136
// CHECK-NEXT: acc.yield
1137
1137
// 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"}
1139
1139
1140
1140
#pragma acc kernels loop present(arg1, arg2) device_type(host) async
1141
1141
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>]) {
1145
1180
// CHECK-NEXT: acc.loop combined(kernels) {
1146
1181
// CHECK: acc.yield
1147
1182
// CHECK-NEXT: } loc
1148
1183
// CHECK-NEXT: acc.terminator
1149
1184
// 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"}
1152
1187
}
0 commit comments