Skip to content

Commit 1291991

Browse files
author
Sunil Kuravinakop
committed
lit test case changes for :
"Changes for array elements in reduction e.g. 'reduction (+:a[1])' "
1 parent 23b1560 commit 1291991

File tree

1 file changed

+32
-1
lines changed

1 file changed

+32
-1
lines changed

clang/test/OpenMP/for_reduction_codegen.cpp

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ struct S {
2727
~S() {}
2828
};
2929

30-
3130
template <typename T, int length>
3231
T tmain() {
3332
T t;
@@ -60,6 +59,15 @@ T tmain() {
6059
}
6160

6261
extern S<float> **foo();
62+
int g_arr[10];
63+
64+
void reductionArrayElement() {
65+
#pragma omp parallel
66+
#pragma omp for reduction(+:g_arr[1])
67+
for (int i = 0; i < 10; i++) {
68+
g_arr[1] += i;
69+
}
70+
}
6371

6472
int main() {
6573
#ifdef LAMBDA
@@ -164,6 +172,7 @@ int main() {
164172
#pragma omp for reduction(& : var3)
165173
for (int i = 0; i < 10; ++i)
166174
;
175+
reductionArrayElement();
167176
return tmain<int, 42>();
168177
#endif
169178
}
@@ -527,6 +536,7 @@ int main() {
527536

528537

529538
#endif
539+
530540
//.
531541
// CHECK1: @.gomp_critical_user_.reduction.var = common global [8 x i32] zeroinitializer, align 8
532542
// CHECK1: @.gomp_critical_user_.atomic_reduction.var = common global [8 x i32] zeroinitializer, align 8
@@ -535,6 +545,26 @@ int main() {
535545
//.
536546
// CHECK4: @.gomp_critical_user_.reduction.var = common global [8 x i32] zeroinitializer, align 8
537547
//.
548+
549+
// CHECK1-LABEL: define {{.*}}reductionArrayElement{{.*}}.omp_outlined{{.*}}
550+
// CHECK1-NEXT: entry:
551+
// CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
552+
// CHECK1: [[G_ARR:%.*]] = alloca i32, align 4
553+
// CHECK1: [[TMP0:%.*]] = sdiv exact i64 sub (i64 ptrtoint (ptr @g_arr to i64){{.*}}
554+
// CHECK1-NEXT: [[TMP1:%.*]] = getelementptr i32, ptr [[G_ARR:%.*]], i64 [[TMP0]]
555+
// CHECK1: omp.inner.for.body:
556+
// CHECK1: [[ARRAYIDX:%.*]] = getelementptr inbounds [10 x i32], ptr [[TMP1]], i64 0, i64 1
557+
// CHECK1-NEXT: [[TMP11:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
558+
// CHECK1-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP11]],{{.+}}
559+
// CHECK1-NEXT: store i32 [[ADD2]], ptr [[ARRAYIDX]], align 4
560+
// CHECK1: omp.loop.exit:
561+
// CHECK1-NEXT: call void {{.*}}__kmpc_for_static_fini{{.+}}
562+
// CHECK1: {{.*}}call i32 {{.*}}__kmpc_reduce{{.+}}
563+
// CHECK1: omp.reduction.default:
564+
// CHECK1-NEXT: call void @__kmpc_barrier{{.+}}
565+
// CHECK1-NEXT: ret void
566+
//
567+
538568
// CHECK1-LABEL: define {{[^@]+}}@main
539569
// CHECK1-SAME: () #[[ATTR0:[0-9]+]] {
540570
// CHECK1-NEXT: entry:
@@ -614,6 +644,7 @@ int main() {
614644
// CHECK1-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 1, ptr @main.omp_outlined.11, ptr [[TMP7]])
615645
// CHECK1-NEXT: [[TMP8:%.*]] = load ptr, ptr [[VAR3]], align 8
616646
// CHECK1-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 1, ptr @main.omp_outlined.12, ptr [[TMP8]])
647+
// CHECK1-NEXT: call void {{.*}}reductionArrayElement{{.*}}
617648
// CHECK1-NEXT: [[CALL10:%.*]] = call noundef i32 @_Z5tmainIiLi42EET_v()
618649
// CHECK1-NEXT: store i32 [[CALL10]], ptr [[RETVAL]], align 4
619650
// CHECK1-NEXT: [[TMP9:%.*]] = load ptr, ptr [[SAVED_STACK]], align 8

0 commit comments

Comments
 (0)