Skip to content

Commit 57ad1f6

Browse files
committed
add suggested test, which has a stride in it!
1 parent 536813e commit 57ad1f6

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed

clang/test/CIR/CodeGenOpenACC/combined-copy.c

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)