@@ -1071,3 +1071,34 @@ void acc_compute_members() {
10711071 // CHECK-NEXT: } loc
10721072 // CHECK-NEXT: acc.copyout accPtr(%[[COPYIN1]] : !cir.ptr<!cir.ptr<!cir.ptr<!cir.double>>>) bounds(%[[BOUNDS1]], %[[BOUNDS2]]) to varPtr(%[[GETPTRPTRMEMBER]] : !cir.ptr<!cir.ptr<!cir.ptr<!cir.double>>>) {dataClause = #acc<data_clause acc_copy>, name = "localStruct.ptrPtrMember[1:3][1:1]"}
10731073}
1074+
1075+ typedef struct InnerTy {
1076+ int a ;
1077+ int b ;
1078+ } Inner ;
1079+
1080+ typedef struct OuterTy {
1081+ Inner inner [4 ];
1082+ } Outer ;
1083+
1084+ void copy_member_of_array_element_member () {
1085+ // CHECK: cir.func @copy_member_of_array_element_member() {
1086+ Outer outer ;
1087+ // CHECK-NEXT: %[[OUTER:.*]] = cir.alloca !rec_OuterTy, !cir.ptr<!rec_OuterTy>, ["outer"]
1088+
1089+ #pragma acc parallel loop copy(outer.inner[2].b)
1090+ for (int i = 0 ; i < 5 ; ++ i );
1091+ // CHECK-NEXT: %[[TWO:.*]] = cir.const #cir.int<2> : !s32i
1092+ // CHECK-NEXT: %[[GETINNER:.*]] = cir.get_member %[[OUTER]][0] {name = "inner"} : !cir.ptr<!rec_OuterTy> -> !cir.ptr<!cir.array<!rec_InnerTy x 4>>
1093+ // CHECK-NEXT: %[[INNERDECAY:.*]] = cir.cast(array_to_ptrdecay, %[[GETINNER]] : !cir.ptr<!cir.array<!rec_InnerTy x 4>>), !cir.ptr<!rec_InnerTy>
1094+ // CHECK-NEXT: %[[STRIDE:.*]] = cir.ptr_stride(%[[INNERDECAY]] : !cir.ptr<!rec_InnerTy>, %[[TWO]] : !s32i), !cir.ptr<!rec_InnerTy>
1095+ // CHECK-NEXT: %[[GETB:.*]] = cir.get_member %[[STRIDE]][1] {name = "b"} : !cir.ptr<!rec_InnerTy> -> !cir.ptr<!s32i>
1096+ // CHECK-NEXT: %[[COPYIN1:.*]] = acc.copyin varPtr(%[[GETB]] : !cir.ptr<!s32i>) -> !cir.ptr<!s32i> {dataClause = #acc<data_clause acc_copy>, name = "outer.inner[2].b"}
1097+ // CHECK-NEXT: acc.parallel combined(loop) dataOperands(%[[COPYIN1]] : !cir.ptr<!s32i>) {
1098+ // CHECK-NEXT: acc.loop combined(parallel) {
1099+ // CHECK: acc.yield
1100+ // CHECK-NEXT: }
1101+ // CHECK-NEXT: acc.yield
1102+ // CHECK-NEXT: } loc
1103+ // CHECK-NEXT: acc.copyout accPtr(%[[COPYIN1]] : !cir.ptr<!s32i>) to varPtr(%[[GETB]] : !cir.ptr<!s32i>) {dataClause = #acc<data_clause acc_copy>, name = "outer.inner[2].b"}
1104+ }
0 commit comments