Skip to content

Commit 2c4ac5a

Browse files
committed
Move finalization block creation to helpers
Justifications for where it is safe to re-use an existing block for finalization: - omp sections: the finalization block here is the one already containing the loop finalization code. The structure of wsloop codegen ensures this only ever contains loop finalization code, and the existing cancellation implementation already relied upon this. - emitCommonDirectiveExit: the block is created afresh especially for this call. I got rid of the merge with the predecessor block. This leads to most of the test updates. This simplifies omp sections code slightly because we handle branches better than before and don't need to create a dummy that is then touched up.
1 parent 6e78b7a commit 2c4ac5a

21 files changed

+288
-174
lines changed

clang/test/OpenMP/cancel_codegen.cpp

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -774,8 +774,6 @@ for (int i = 0; i < argc; ++i) {
774774
// CHECK3-NEXT: call void @__kmpc_barrier(ptr @[[GLOB2:[0-9]+]], i32 [[OMP_GLOBAL_THREAD_NUM12]])
775775
// CHECK3-NEXT: br label [[OMP_SECTION_LOOP_AFTER:%.*]]
776776
// CHECK3: omp_section_loop.after:
777-
// CHECK3-NEXT: br label [[OMP_SECTION_LOOP_AFTERSECTIONS_FINI:%.*]]
778-
// CHECK3: omp_section_loop.aftersections.fini:
779777
// CHECK3-NEXT: br label [[OMP_SECTION_LOOP_PREHEADER13:%.*]]
780778
// CHECK3: omp_section_loop.preheader13:
781779
// CHECK3-NEXT: store i32 0, ptr [[P_LOWERBOUND29]], align 4
@@ -833,8 +831,6 @@ for (int i = 0; i < argc; ++i) {
833831
// CHECK3-NEXT: call void @__kmpc_barrier(ptr @[[GLOB2]], i32 [[OMP_GLOBAL_THREAD_NUM33]])
834832
// CHECK3-NEXT: br label [[OMP_SECTION_LOOP_AFTER19:%.*]]
835833
// CHECK3: omp_section_loop.after19:
836-
// CHECK3-NEXT: br label [[OMP_SECTION_LOOP_AFTER19SECTIONS_FINI:%.*]]
837-
// CHECK3: omp_section_loop.after19sections.fini:
838834
// CHECK3-NEXT: [[TMP20:%.*]] = load i32, ptr [[ARGC_ADDR]], align 4
839835
// CHECK3-NEXT: store i32 [[TMP20]], ptr [[DOTCAPTURE_EXPR_]], align 4
840836
// CHECK3-NEXT: [[TMP21:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 4
@@ -891,13 +887,11 @@ for (int i = 0; i < argc; ++i) {
891887
// CHECK3: .cancel.exit:
892888
// CHECK3-NEXT: br label [[CANCEL_EXIT:%.*]]
893889
// CHECK3: omp_section_loop.body.case.cncl:
894-
// CHECK3-NEXT: br label [[FINI10:.*]]
895-
// CHECK3: .fini25:
890+
// CHECK3-NEXT: br label [[OMP_SECTION_LOOP_EXIT]]
891+
// CHECK3: omp_section_loop.body.case23.cncl:
896892
// CHECK3-NEXT: br label [[OMP_SECTION_LOOP_EXIT18]]
897893
// CHECK3: omp_section_loop.body.case26.cncl:
898-
// CHECK3-NEXT: br label [[FINI29:.*]]
899-
// CHECK3: .fini29:
900-
// CHECK3-NEXT: br label [[OMP_SECTION_LOOP_EXIT18]]
894+
// CHECK3-NEXT: br label [[OMP_REGION_FINALIZE:.*]]
901895
// CHECK3: .cancel.continue:
902896
// CHECK3-NEXT: br label [[OMP_IF_END:%.*]]
903897
// CHECK3: omp_if.else:
@@ -1166,7 +1160,9 @@ for (int i = 0; i < argc; ++i) {
11661160
// CHECK3: .omp.sections.case2.split:
11671161
// CHECK3-NEXT: br label [[DOTOMP_SECTIONS_CASE2_SECTION_AFTER:%.*]]
11681162
// CHECK3: .omp.sections.case2.section.after:
1169-
// CHECK3-NEXT: br label [[DOTOMP_SECTIONS_EXIT]]
1163+
// CHECK3-NEXT: br label [[OMP_REGION_FINALIZE]]
1164+
// CHECK3: omp_region.finalize:
1165+
// CHECK3-NEXT: br label [[OMP_SECTIONS_EXIT:.*]]
11701166
// CHECK3: .omp.sections.case2.cncl:
11711167
// CHECK3-NEXT: br label [[FINI:.*]]
11721168
// CHECK3: .omp.sections.exit:

clang/test/OpenMP/critical_codegen.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ int main() {
3535
// ALL-NEXT: store i8 2, ptr [[A_ADDR]]
3636
// IRBUILDER-NEXT: br label %[[AFTER:[^ ,]+]]
3737
// IRBUILDER: [[AFTER]]
38+
// IRBUILDER-NEXT: br label %[[OMP_REGION_FINALIZE:[^ ,]+]]
39+
// IRBUILDER: [[OMP_REGION_FINALIZE]]
3840
// ALL-NEXT: call {{.*}}void @__kmpc_end_critical(ptr [[DEFAULT_LOC]], i32 [[GTID]], ptr [[UNNAMED_LOCK]])
3941
#pragma omp critical
4042
a = 2;

clang/test/OpenMP/critical_codegen_attr.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ int main() {
3535
// ALL-NEXT: store i8 2, ptr [[A_ADDR]]
3636
// IRBUILDER-NEXT: br label %[[AFTER:[^ ,]+]]
3737
// IRBUILDER: [[AFTER]]
38+
// IRBUILDER-NEXT: br label %[[OMP_REGION_FINALIZE:[^ ,]+]]
39+
// IRBUILDER: [[OMP_REGION_FINALIZE]]
3840
// ALL-NEXT: call {{.*}}void @__kmpc_end_critical(ptr [[DEFAULT_LOC]], i32 [[GTID]], ptr [[UNNAMED_LOCK]])
3941
[[omp::directive(critical)]]
4042
a = 2;

clang/test/OpenMP/irbuilder_nested_parallel_for.c

Lines changed: 61 additions & 47 deletions
Large diffs are not rendered by default.

clang/test/OpenMP/masked_codegen.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ int main() {
3535
// ALL-NEXT: store i8 2, ptr [[A_ADDR]]
3636
// IRBUILDER-NEXT: br label %[[AFTER:[^ ,]+]]
3737
// IRBUILDER: [[AFTER]]
38+
// IRBUILDER-NEXT: br label %[[OMP_REGION_FINALIZE:[^ ,]+]]
39+
// IRBUILDER: [[OMP_REGION_FINALIZE]]
3840
// ALL-NEXT: call {{.*}}void @__kmpc_end_masked(ptr [[DEFAULT_LOC]], i32 [[GTID]])
3941
// ALL-NEXT: br label {{%?}}[[EXIT]]
4042
// ALL: [[EXIT]]

clang/test/OpenMP/master_codegen.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ int main() {
3535
// ALL-NEXT: store i8 2, ptr [[A_ADDR]]
3636
// IRBUILDER-NEXT: br label %[[AFTER:[^ ,]+]]
3737
// IRBUILDER: [[AFTER]]
38+
// IRBUILDER-NEXT: br label %[[OMP_REGION_FINALIZE:[^ ,]+]]
39+
// IRBUILDER: [[OMP_REGION_FINALIZE]]
3840
// ALL-NEXT: call {{.*}}void @__kmpc_end_master(ptr [[DEFAULT_LOC]], i32 [[GTID]])
3941
// ALL-NEXT: br label {{%?}}[[EXIT]]
4042
// ALL: [[EXIT]]

clang/test/OpenMP/nested_loop_codegen.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -904,6 +904,8 @@ int inline_decl() {
904904
// CHECK4: omp.par.region.parallel.after:
905905
// CHECK4-NEXT: br label [[OMP_PAR_PRE_FINALIZE:%.*]]
906906
// CHECK4: omp.par.pre_finalize:
907+
// CHECK4-NEXT: br label [[FINI:%.*]]
908+
// CHECK4: .fini:
907909
// CHECK4-NEXT: br label [[OMP_PAR_OUTLINED_EXIT_EXITSTUB:%.*]], !dbg [[DBG27]]
908910
// CHECK4: for.body:
909911
// CHECK4-NEXT: store i32 0, ptr [[LOADGEP_K]], align 4, !dbg [[DBG28:![0-9]+]]
@@ -1083,6 +1085,8 @@ int inline_decl() {
10831085
// CHECK4: omp.par.region.parallel.after:
10841086
// CHECK4-NEXT: br label [[OMP_PAR_PRE_FINALIZE:%.*]]
10851087
// CHECK4: omp.par.pre_finalize:
1088+
// CHECK4-NEXT: br label [[FINI:%.*]]
1089+
// CHECK4: .fini:
10861090
// CHECK4-NEXT: br label [[OMP_PAR_OUTLINED_EXIT_EXITSTUB:%.*]], !dbg [[DBG90]]
10871091
// CHECK4: for.body:
10881092
// CHECK4-NEXT: #dbg_declare(ptr [[K]], [[META91:![0-9]+]], !DIExpression(), [[META95:![0-9]+]])

clang/test/OpenMP/ordered_codegen.cpp

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -794,6 +794,8 @@ void foo_simd(int low, int up) {
794794
// CHECK1-IRBUILDER-NEXT: store float [[MUL8]], ptr [[ARRAYIDX10]], align 4
795795
// CHECK1-IRBUILDER-NEXT: br label [[OMP_INNER_FOR_BODY_ORDERED_AFTER:%.*]]
796796
// CHECK1-IRBUILDER: omp.inner.for.body.ordered.after:
797+
// CHECK1-IRBUILDER-NEXT: br label [[OMP_REGION_FINALIZE:%.*]]
798+
// CHECK1-IRBUILDER: omp_region.finalize:
797799
// CHECK1-IRBUILDER-NEXT: call void @__kmpc_end_ordered(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM2]])
798800
// CHECK1-IRBUILDER-NEXT: br label [[OMP_BODY_CONTINUE:%.*]]
799801
// CHECK1-IRBUILDER: omp.body.continue:
@@ -884,6 +886,8 @@ void foo_simd(int low, int up) {
884886
// CHECK1-IRBUILDER-NEXT: store float [[MUL7]], ptr [[ARRAYIDX8]], align 4
885887
// CHECK1-IRBUILDER-NEXT: br label [[OMP_INNER_FOR_BODY_ORDERED_AFTER:%.*]]
886888
// CHECK1-IRBUILDER: omp.inner.for.body.ordered.after:
889+
// CHECK1-IRBUILDER-NEXT: br label [[OMP_REGION_FINALIZE:%.*]]
890+
// CHECK1-IRBUILDER: omp_region.finalize:
887891
// CHECK1-IRBUILDER-NEXT: call void @__kmpc_end_ordered(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM3]])
888892
// CHECK1-IRBUILDER-NEXT: br label [[OMP_BODY_CONTINUE:%.*]]
889893
// CHECK1-IRBUILDER: omp.body.continue:
@@ -1022,6 +1026,8 @@ void foo_simd(int low, int up) {
10221026
// CHECK1-IRBUILDER-NEXT: store float [[MUL29]], ptr [[ARRAYIDX31]], align 4
10231027
// CHECK1-IRBUILDER-NEXT: br label [[OMP_INNER_FOR_BODY_ORDERED_AFTER:%.*]]
10241028
// CHECK1-IRBUILDER: omp.inner.for.body.ordered.after:
1029+
// CHECK1-IRBUILDER-NEXT: br label [[OMP_REGION_FINALIZE:%.*]]
1030+
// CHECK1-IRBUILDER: omp_region.finalize:
10251031
// CHECK1-IRBUILDER-NEXT: call void @__kmpc_end_ordered(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM23]])
10261032
// CHECK1-IRBUILDER-NEXT: br label [[OMP_BODY_CONTINUE:%.*]]
10271033
// CHECK1-IRBUILDER: omp.body.continue:
@@ -1131,6 +1137,8 @@ void foo_simd(int low, int up) {
11311137
// CHECK1-IRBUILDER-NEXT: store float [[MUL14]], ptr [[ARRAYIDX16]], align 4
11321138
// CHECK1-IRBUILDER-NEXT: br label [[OMP_INNER_FOR_BODY_ORDERED_AFTER:%.*]]
11331139
// CHECK1-IRBUILDER: omp.inner.for.body.ordered.after:
1140+
// CHECK1-IRBUILDER-NEXT: br label [[OMP_REGION_FINALIZE:%.*]]
1141+
// CHECK1-IRBUILDER: omp_region.finalize:
11341142
// CHECK1-IRBUILDER-NEXT: call void @__kmpc_end_ordered(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM8]])
11351143
// CHECK1-IRBUILDER-NEXT: br label [[OMP_BODY_CONTINUE:%.*]]
11361144
// CHECK1-IRBUILDER: omp.body.continue:
@@ -1296,17 +1304,19 @@ void foo_simd(int low, int up) {
12961304
// CHECK1-IRBUILDER-NEXT: call void @__captured_stmt.1(ptr [[I28]])
12971305
// CHECK1-IRBUILDER-NEXT: br label [[OMP_INNER_FOR_BODY33_ORDERED_AFTER:%.*]]
12981306
// CHECK1-IRBUILDER: omp.inner.for.body33.ordered.after:
1299-
// CHECK1-IRBUILDER-NEXT: br label [[OMP_BODY_CONTINUE38:%.*]]
1300-
// CHECK1-IRBUILDER: omp.body.continue38:
1301-
// CHECK1-IRBUILDER-NEXT: br label [[OMP_INNER_FOR_INC39:%.*]]
1302-
// CHECK1-IRBUILDER: omp.inner.for.inc39:
1307+
// CHECK1-IRBUILDER-NEXT: br label [[OMP_REGION_FINALIZE38:%.*]]
1308+
// CHECK1-IRBUILDER: omp_region.finalize38:
1309+
// CHECK1-IRBUILDER-NEXT: br label [[OMP_BODY_CONTINUE39:%.*]]
1310+
// CHECK1-IRBUILDER: omp.body.continue39:
1311+
// CHECK1-IRBUILDER-NEXT: br label [[OMP_INNER_FOR_INC40:%.*]]
1312+
// CHECK1-IRBUILDER: omp.inner.for.inc40:
13031313
// CHECK1-IRBUILDER-NEXT: [[TMP32:%.*]] = load i32, ptr [[DOTOMP_IV16]], align 4
13041314
// CHECK1-IRBUILDER-NEXT: [[ADD40:%.*]] = add i32 [[TMP32]], 1
13051315
// CHECK1-IRBUILDER-NEXT: store i32 [[ADD40]], ptr [[DOTOMP_IV16]], align 4
13061316
// CHECK1-IRBUILDER-NEXT: [[OMP_GLOBAL_THREAD_NUM41:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB12]])
13071317
// CHECK1-IRBUILDER-NEXT: call void @__kmpc_dispatch_fini_4u(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM41]])
13081318
// CHECK1-IRBUILDER-NEXT: br label [[OMP_INNER_FOR_COND30]], !llvm.loop [[LOOP5:![0-9]+]]
1309-
// CHECK1-IRBUILDER: omp.inner.for.end42:
1319+
// CHECK1-IRBUILDER: omp.inner.for.end43:
13101320
// CHECK1-IRBUILDER-NEXT: br label [[OMP_DISPATCH_INC:%.*]]
13111321
// CHECK1-IRBUILDER: omp.dispatch.inc:
13121322
// CHECK1-IRBUILDER-NEXT: br label [[OMP_DISPATCH_COND]]
@@ -2034,6 +2044,8 @@ void foo_simd(int low, int up) {
20342044
// CHECK3-IRBUILDER-NEXT: store float [[MUL8]], ptr [[ARRAYIDX10]], align 4
20352045
// CHECK3-IRBUILDER-NEXT: br label [[OMP_INNER_FOR_BODY_ORDERED_AFTER:%.*]]
20362046
// CHECK3-IRBUILDER: omp.inner.for.body.ordered.after:
2047+
// CHECK3-IRBUILDER-NEXT: br label [[OMP_REGION_FINALIZE:%.*]]
2048+
// CHECK3-IRBUILDER: omp_region.finalize:
20372049
// CHECK3-IRBUILDER-NEXT: call void @__kmpc_end_ordered(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM2]])
20382050
// CHECK3-IRBUILDER-NEXT: br label [[OMP_BODY_CONTINUE:%.*]]
20392051
// CHECK3-IRBUILDER: omp.body.continue:
@@ -2124,6 +2136,8 @@ void foo_simd(int low, int up) {
21242136
// CHECK3-IRBUILDER-NEXT: store float [[MUL7]], ptr [[ARRAYIDX8]], align 4
21252137
// CHECK3-IRBUILDER-NEXT: br label [[OMP_INNER_FOR_BODY_ORDERED_AFTER:%.*]]
21262138
// CHECK3-IRBUILDER: omp.inner.for.body.ordered.after:
2139+
// CHECK3-IRBUILDER-NEXT: br label [[OMP_REGION_FINALIZE:%.*]]
2140+
// CHECK3-IRBUILDER: omp_region.finalize:
21272141
// CHECK3-IRBUILDER-NEXT: call void @__kmpc_end_ordered(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM3]])
21282142
// CHECK3-IRBUILDER-NEXT: br label [[OMP_BODY_CONTINUE:%.*]]
21292143
// CHECK3-IRBUILDER: omp.body.continue:
@@ -2262,6 +2276,8 @@ void foo_simd(int low, int up) {
22622276
// CHECK3-IRBUILDER-NEXT: store float [[MUL29]], ptr [[ARRAYIDX31]], align 4
22632277
// CHECK3-IRBUILDER-NEXT: br label [[OMP_INNER_FOR_BODY_ORDERED_AFTER:%.*]]
22642278
// CHECK3-IRBUILDER: omp.inner.for.body.ordered.after:
2279+
// CHECK3-IRBUILDER-NEXT: br label [[OMP_REGION_FINALIZE:%.*]]
2280+
// CHECK3-IRBUILDER: omp_region.finalize:
22652281
// CHECK3-IRBUILDER-NEXT: call void @__kmpc_end_ordered(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM23]])
22662282
// CHECK3-IRBUILDER-NEXT: br label [[OMP_BODY_CONTINUE:%.*]]
22672283
// CHECK3-IRBUILDER: omp.body.continue:
@@ -2371,6 +2387,8 @@ void foo_simd(int low, int up) {
23712387
// CHECK3-IRBUILDER-NEXT: store float [[MUL14]], ptr [[ARRAYIDX16]], align 4
23722388
// CHECK3-IRBUILDER-NEXT: br label [[OMP_INNER_FOR_BODY_ORDERED_AFTER:%.*]]
23732389
// CHECK3-IRBUILDER: omp.inner.for.body.ordered.after:
2390+
// CHECK3-IRBUILDER-NEXT: br label [[OMP_REGION_FINALIZE:%.*]]
2391+
// CHECK3-IRBUILDER: omp_region.finalize:
23742392
// CHECK3-IRBUILDER-NEXT: call void @__kmpc_end_ordered(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM8]])
23752393
// CHECK3-IRBUILDER-NEXT: br label [[OMP_BODY_CONTINUE:%.*]]
23762394
// CHECK3-IRBUILDER: omp.body.continue:
@@ -2536,17 +2554,19 @@ void foo_simd(int low, int up) {
25362554
// CHECK3-IRBUILDER-NEXT: call void @__captured_stmt.1(ptr [[I28]])
25372555
// CHECK3-IRBUILDER-NEXT: br label [[OMP_INNER_FOR_BODY33_ORDERED_AFTER:%.*]]
25382556
// CHECK3-IRBUILDER: omp.inner.for.body33.ordered.after:
2539-
// CHECK3-IRBUILDER-NEXT: br label [[OMP_BODY_CONTINUE38:%.*]]
2540-
// CHECK3-IRBUILDER: omp.body.continue38:
2541-
// CHECK3-IRBUILDER-NEXT: br label [[OMP_INNER_FOR_INC39:%.*]]
2542-
// CHECK3-IRBUILDER: omp.inner.for.inc39:
2557+
// CHECK3-IRBUILDER-NEXT: br label [[OMP_REGION_FINALIZE38:%.*]]
2558+
// CHECK3-IRBUILDER: omp_region.finalize38:
2559+
// CHECK3-IRBUILDER-NEXT: br label [[OMP_BODY_CONTINUE39:%.*]]
2560+
// CHECK3-IRBUILDER: omp.body.continue39:
2561+
// CHECK3-IRBUILDER-NEXT: br label [[OMP_INNER_FOR_INC40:%.*]]
2562+
// CHECK3-IRBUILDER: omp.inner.for.inc40:
25432563
// CHECK3-IRBUILDER-NEXT: [[TMP32:%.*]] = load i32, ptr [[DOTOMP_IV16]], align 4
25442564
// CHECK3-IRBUILDER-NEXT: [[ADD40:%.*]] = add i32 [[TMP32]], 1
25452565
// CHECK3-IRBUILDER-NEXT: store i32 [[ADD40]], ptr [[DOTOMP_IV16]], align 4
25462566
// CHECK3-IRBUILDER-NEXT: [[OMP_GLOBAL_THREAD_NUM41:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB12]])
25472567
// CHECK3-IRBUILDER-NEXT: call void @__kmpc_dispatch_fini_4u(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM41]])
25482568
// CHECK3-IRBUILDER-NEXT: br label [[OMP_INNER_FOR_COND30]], !llvm.loop [[LOOP5:![0-9]+]]
2549-
// CHECK3-IRBUILDER: omp.inner.for.end42:
2569+
// CHECK3-IRBUILDER: omp.inner.for.end43:
25502570
// CHECK3-IRBUILDER-NEXT: br label [[OMP_DISPATCH_INC:%.*]]
25512571
// CHECK3-IRBUILDER: omp.dispatch.inc:
25522572
// CHECK3-IRBUILDER-NEXT: br label [[OMP_DISPATCH_COND]]

clang/test/OpenMP/parallel_codegen.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -906,6 +906,8 @@ int main (int argc, char **argv) {
906906
// CHECK4: omp.par.region.parallel.after:
907907
// CHECK4-NEXT: br label [[OMP_PAR_PRE_FINALIZE:%.*]]
908908
// CHECK4: omp.par.pre_finalize:
909+
// CHECK4-NEXT: br label [[FINI:%.*]]
910+
// CHECK4: .fini:
909911
// CHECK4-NEXT: br label [[OMP_PAR_OUTLINED_EXIT_EXITSTUB:%.*]], !dbg [[DBG35]]
910912
// CHECK4: omp.par.exit.exitStub:
911913
// CHECK4-NEXT: ret void
@@ -975,6 +977,8 @@ int main (int argc, char **argv) {
975977
// CHECK4: omp.par.region.parallel.after:
976978
// CHECK4-NEXT: br label [[OMP_PAR_PRE_FINALIZE:%.*]]
977979
// CHECK4: omp.par.pre_finalize:
980+
// CHECK4-NEXT: br label [[FINI:%.*]]
981+
// CHECK4: .fini:
978982
// CHECK4-NEXT: br label [[OMP_PAR_OUTLINED_EXIT_EXITSTUB:%.*]], !dbg [[DBG66]]
979983
// CHECK4: omp.par.exit.exitStub:
980984
// CHECK4-NEXT: ret void

flang/test/Integration/OpenMP/parallel-private-reduction-worstcase.f90

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,10 +174,13 @@ subroutine worst_case(a, b, c, d)
174174
! CHECK-NEXT: br label %omp.par.pre_finalize
175175

176176
! CHECK: omp.par.pre_finalize: ; preds = %reduce.finalize
177+
! CHECK-NEXT: br label %.fini
178+
179+
! CHECK: .fini:
177180
! CHECK-NEXT: %{{.*}} = load ptr, ptr
178181
! CHECK-NEXT: br label %omp.reduction.cleanup
179182

180-
! CHECK: omp.reduction.cleanup: ; preds = %omp.par.pre_finalize
183+
! CHECK: omp.reduction.cleanup: ; preds = %.fini
181184
! [null check]
182185
! CHECK: br i1 %{{.*}}, label %omp.reduction.cleanup43, label %omp.reduction.cleanup44
183186

0 commit comments

Comments
 (0)