@@ -1011,3 +1011,41 @@ 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>{{.*}}) {
1016+ // CHECK-NEXT: %[[ARG1:.*]] = cir.alloca !cir.ptr<!s32i>, !cir.ptr<!cir.ptr<!s32i>>, ["arg1", init]
1017+ // CHECK-NEXT: %[[ARG2:.*]] = cir.alloca !cir.ptr<!s32i>, !cir.ptr<!cir.ptr<!s32i>>, ["arg2", init]
1018+ // CHECK-NEXT: cir.store %[[ARG1_PARAM]], %[[ARG1]] : !cir.ptr<!s32i>, !cir.ptr<!cir.ptr<!s32i>>
1019+ // CHECK-NEXT: cir.store %[[ARG2_PARAM]], %[[ARG2]] : !cir.ptr<!s32i>, !cir.ptr<!cir.ptr<!s32i>>
1020+
1021+ #pragma acc parallel loop deviceptr(arg1)
1022+ for (unsigned I = 0 ; I < 5 ; ++I);
1023+ // CHECK-NEXT: %[[DEVPTR1:.*]] = acc.deviceptr varPtr(%[[ARG1]] : !cir.ptr<!cir.ptr<!s32i>>) -> !cir.ptr<!cir.ptr<!s32i>> {name = "arg1"}
1024+ // CHECK-NEXT: acc.parallel combined(loop) dataOperands(%[[DEVPTR1]] : !cir.ptr<!cir.ptr<!s32i>>) {
1025+ // CHECK-NEXT: acc.loop combined(parallel) {
1026+ // CHECK: acc.yield
1027+ // CHECK-NEXT: } loc
1028+ // CHECK-NEXT: acc.yield
1029+ // CHECK-NEXT: } loc
1030+
1031+ #pragma acc serial loop deviceptr(arg2)
1032+ for (unsigned I = 0 ; I < 5 ; ++I);
1033+ // CHECK-NEXT: %[[DEVPTR2:.*]] = acc.deviceptr varPtr(%[[ARG2]] : !cir.ptr<!cir.ptr<!s32i>>) -> !cir.ptr<!cir.ptr<!s32i>> {name = "arg2"}
1034+ // CHECK-NEXT: acc.serial combined(loop) dataOperands(%[[DEVPTR2]] : !cir.ptr<!cir.ptr<!s32i>>) {
1035+ // CHECK-NEXT: acc.loop combined(serial) {
1036+ // CHECK: acc.yield
1037+ // CHECK-NEXT: } loc
1038+ // CHECK-NEXT: acc.yield
1039+ // CHECK-NEXT: } loc
1040+
1041+ #pragma acc kernels loop deviceptr(arg1, arg2)
1042+ for (unsigned I = 0 ; I < 5 ; ++I);
1043+ // CHECK-NEXT: %[[DEVPTR1:.*]] = acc.deviceptr varPtr(%[[ARG1]] : !cir.ptr<!cir.ptr<!s32i>>) -> !cir.ptr<!cir.ptr<!s32i>> {name = "arg1"}
1044+ // CHECK-NEXT: %[[DEVPTR2:.*]] = acc.deviceptr varPtr(%[[ARG2]] : !cir.ptr<!cir.ptr<!s32i>>) -> !cir.ptr<!cir.ptr<!s32i>> {name = "arg2"}
1045+ // CHECK-NEXT: acc.kernels combined(loop) dataOperands(%[[DEVPTR1]], %[[DEVPTR2]] : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!cir.ptr<!s32i>>) {
1046+ // CHECK-NEXT: acc.loop combined(kernels) {
1047+ // CHECK: acc.yield
1048+ // CHECK-NEXT: } loc
1049+ // CHECK-NEXT: acc.terminator
1050+ // CHECK-NEXT: } loc
1051+ }
0 commit comments