diff options
author | Razvan Lupusoru <razvan.lupusoru@gmail.com> | 2024-03-26 12:52:13 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-26 12:52:13 -0700 |
commit | 14e17ea1f62d9861f90a6a31e7c8a1d12bb081fc (patch) | |
tree | d0ecd08d67ff18f40d73d875f6a85277cab76a74 | |
parent | 4c72cfa31798a67c6daa25d474bcfe536e4fa0c0 (diff) | |
download | llvm-14e17ea1f62d9861f90a6a31e7c8a1d12bb081fc.zip llvm-14e17ea1f62d9861f90a6a31e7c8a1d12bb081fc.tar.gz llvm-14e17ea1f62d9861f90a6a31e7c8a1d12bb081fc.tar.bz2 |
[flang][acc] Add support for lowering combined constructs (#86696)
PR#80319 added support to record combined construct semantics via an
attribute. Add lowering support for this.
-rw-r--r-- | flang/lib/Lower/OpenACC.cpp | 72 | ||||
-rw-r--r-- | flang/test/Lower/OpenACC/acc-kernels-loop.f90 | 131 | ||||
-rw-r--r-- | flang/test/Lower/OpenACC/acc-loop.f90 | 2 | ||||
-rw-r--r-- | flang/test/Lower/OpenACC/acc-parallel-loop.f90 | 135 | ||||
-rw-r--r-- | flang/test/Lower/OpenACC/acc-private.f90 | 26 | ||||
-rw-r--r-- | flang/test/Lower/OpenACC/acc-serial-loop.f90 | 123 |
6 files changed, 273 insertions, 216 deletions
diff --git a/flang/lib/Lower/OpenACC.cpp b/flang/lib/Lower/OpenACC.cpp index 7b7e4a8..6e67144 100644 --- a/flang/lib/Lower/OpenACC.cpp +++ b/flang/lib/Lower/OpenACC.cpp @@ -1667,15 +1667,17 @@ static void privatizeIv(Fortran::lower::AbstractConverter &converter, ivPrivate.push_back(privateValue); } -static mlir::acc::LoopOp -createLoopOp(Fortran::lower::AbstractConverter &converter, - mlir::Location currentLocation, - Fortran::semantics::SemanticsContext &semanticsContext, - Fortran::lower::StatementContext &stmtCtx, - const Fortran::parser::DoConstruct &outerDoConstruct, - Fortran::lower::pft::Evaluation &eval, - const Fortran::parser::AccClauseList &accClauseList, - bool needEarlyReturnHandling = false) { +static mlir::acc::LoopOp createLoopOp( + Fortran::lower::AbstractConverter &converter, + mlir::Location currentLocation, + Fortran::semantics::SemanticsContext &semanticsContext, + Fortran::lower::StatementContext &stmtCtx, + const Fortran::parser::DoConstruct &outerDoConstruct, + Fortran::lower::pft::Evaluation &eval, + const Fortran::parser::AccClauseList &accClauseList, + std::optional<mlir::acc::CombinedConstructsType> combinedConstructs = + std::nullopt, + bool needEarlyReturnHandling = false) { fir::FirOpBuilder &builder = converter.getFirOpBuilder(); llvm::SmallVector<mlir::Value> tileOperands, privateOperands, ivPrivate, reductionOperands, cacheOperands, vectorOperands, workerNumOperands, @@ -2015,6 +2017,10 @@ createLoopOp(Fortran::lower::AbstractConverter &converter, if (!collapseDeviceTypes.empty()) loopOp.setCollapseDeviceTypeAttr(builder.getArrayAttr(collapseDeviceTypes)); + if (combinedConstructs) + loopOp.setCombinedAttr(mlir::acc::CombinedConstructsTypeAttr::get( + builder.getContext(), *combinedConstructs)); + return loopOp; } @@ -2060,7 +2066,7 @@ genACC(Fortran::lower::AbstractConverter &converter, std::get<std::optional<Fortran::parser::DoConstruct>>(loopConstruct.t); auto loopOp = createLoopOp(converter, currentLocation, semanticsContext, stmtCtx, *outerDoConstruct, eval, accClauseList, - needEarlyExitHandling); + /*combinedConstructs=*/{}, needEarlyExitHandling); if (needEarlyExitHandling) return loopOp.getResult(0); @@ -2092,14 +2098,14 @@ static void genDataOperandOperationsWithModifier( } template <typename Op> -static Op -createComputeOp(Fortran::lower::AbstractConverter &converter, - mlir::Location currentLocation, - Fortran::lower::pft::Evaluation &eval, - Fortran::semantics::SemanticsContext &semanticsContext, - Fortran::lower::StatementContext &stmtCtx, - const Fortran::parser::AccClauseList &accClauseList, - bool outerCombined = false) { +static Op createComputeOp( + Fortran::lower::AbstractConverter &converter, + mlir::Location currentLocation, Fortran::lower::pft::Evaluation &eval, + Fortran::semantics::SemanticsContext &semanticsContext, + Fortran::lower::StatementContext &stmtCtx, + const Fortran::parser::AccClauseList &accClauseList, + std::optional<mlir::acc::CombinedConstructsType> combinedConstructs = + std::nullopt) { // Parallel operation operands mlir::Value ifCond; @@ -2292,7 +2298,7 @@ createComputeOp(Fortran::lower::AbstractConverter &converter, } else if (const auto *privateClause = std::get_if<Fortran::parser::AccClause::Private>( &clause.u)) { - if (!outerCombined) + if (!combinedConstructs) genPrivatizations<mlir::acc::PrivateRecipeOp>( privateClause->v, converter, semanticsContext, stmtCtx, privateOperands, privatizations); @@ -2310,7 +2316,7 @@ createComputeOp(Fortran::lower::AbstractConverter &converter, // combined - delay it to the loop. However, a reduction clause on a // combined construct implies a copy clause so issue an implicit copy // instead. - if (!outerCombined) { + if (!combinedConstructs) { genReductions(reductionClause->v, converter, semanticsContext, stmtCtx, reductionOperands, reductionRecipes); } else { @@ -2362,11 +2368,11 @@ createComputeOp(Fortran::lower::AbstractConverter &converter, if constexpr (std::is_same_v<Op, mlir::acc::KernelsOp>) computeOp = createRegionOp<Op, mlir::acc::TerminatorOp>( builder, currentLocation, currentLocation, eval, operands, - operandSegments, outerCombined); + operandSegments, /*outerCombined=*/combinedConstructs.has_value()); else computeOp = createRegionOp<Op, mlir::acc::YieldOp>( builder, currentLocation, currentLocation, eval, operands, - operandSegments, outerCombined); + operandSegments, /*outerCombined=*/combinedConstructs.has_value()); if (addSelfAttr) computeOp.setSelfAttrAttr(builder.getUnitAttr()); @@ -2419,6 +2425,9 @@ createComputeOp(Fortran::lower::AbstractConverter &converter, mlir::ArrayAttr::get(builder.getContext(), firstPrivatizations)); } + if (combinedConstructs) + computeOp.setCombinedAttr(builder.getUnitAttr()); + auto insPt = builder.saveInsertionPoint(); builder.setInsertionPointAfter(computeOp); @@ -2734,21 +2743,24 @@ genACC(Fortran::lower::AbstractConverter &converter, if (combinedDirective.v == llvm::acc::ACCD_kernels_loop) { createComputeOp<mlir::acc::KernelsOp>( converter, currentLocation, eval, semanticsContext, stmtCtx, - accClauseList, /*outerCombined=*/true); + accClauseList, mlir::acc::CombinedConstructsType::KernelsLoop); createLoopOp(converter, currentLocation, semanticsContext, stmtCtx, - *outerDoConstruct, eval, accClauseList); + *outerDoConstruct, eval, accClauseList, + mlir::acc::CombinedConstructsType::KernelsLoop); } else if (combinedDirective.v == llvm::acc::ACCD_parallel_loop) { createComputeOp<mlir::acc::ParallelOp>( converter, currentLocation, eval, semanticsContext, stmtCtx, - accClauseList, /*outerCombined=*/true); + accClauseList, mlir::acc::CombinedConstructsType::ParallelLoop); createLoopOp(converter, currentLocation, semanticsContext, stmtCtx, - *outerDoConstruct, eval, accClauseList); + *outerDoConstruct, eval, accClauseList, + mlir::acc::CombinedConstructsType::ParallelLoop); } else if (combinedDirective.v == llvm::acc::ACCD_serial_loop) { - createComputeOp<mlir::acc::SerialOp>(converter, currentLocation, eval, - semanticsContext, stmtCtx, - accClauseList, /*outerCombined=*/true); + createComputeOp<mlir::acc::SerialOp>( + converter, currentLocation, eval, semanticsContext, stmtCtx, + accClauseList, mlir::acc::CombinedConstructsType::SerialLoop); createLoopOp(converter, currentLocation, semanticsContext, stmtCtx, - *outerDoConstruct, eval, accClauseList); + *outerDoConstruct, eval, accClauseList, + mlir::acc::CombinedConstructsType::SerialLoop); } else { llvm::report_fatal_error("Unknown combined construct encountered"); } diff --git a/flang/test/Lower/OpenACC/acc-kernels-loop.f90 b/flang/test/Lower/OpenACC/acc-kernels-loop.f90 index e85065e..e5791f0 100644 --- a/flang/test/Lower/OpenACC/acc-kernels-loop.f90 +++ b/flang/test/Lower/OpenACC/acc-kernels-loop.f90 @@ -37,13 +37,27 @@ subroutine acc_kernels_loop ! CHECK: %[[IFCONDITION:.*]] = fir.address_of(@{{.*}}ifcondition) : !fir.ref<!fir.logical<4>> ! CHECK: %[[DECLIFCONDITION:.*]]:2 = hlfir.declare %[[IFCONDITION]] - !$acc kernels loop + !$acc kernels + !$acc loop DO i = 1, n a(i) = b(i) END DO + !$acc end kernels ! CHECK: acc.kernels { -! CHECK: acc.loop {{.*}} { +! CHECK: acc.loop private{{.*}} { +! CHECK: acc.yield +! CHECK-NEXT: }{{$}} +! CHECK: acc.terminator +! CHECK-NEXT: }{{$}} + + !$acc kernels loop + DO i = 1, n + a(i) = b(i) + END DO + +! CHECK: acc.kernels combined(loop) { +! CHECK: acc.loop combined(kernels) private{{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} ! CHECK: acc.terminator @@ -55,7 +69,7 @@ subroutine acc_kernels_loop END DO !$acc end kernels loop -! CHECK: acc.kernels { +! CHECK: acc.kernels {{.*}} { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -68,7 +82,7 @@ subroutine acc_kernels_loop END DO ! CHECK: [[ASYNC1:%.*]] = arith.constant 1 : i32 -! CHECK: acc.kernels async([[ASYNC1]] : i32) { +! CHECK: acc.kernels {{.*}} async([[ASYNC1]] : i32) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -81,7 +95,7 @@ subroutine acc_kernels_loop END DO ! CHECK: [[ASYNC2:%.*]] = fir.load %{{.*}} : !fir.ref<i32> -! CHECK: acc.kernels async([[ASYNC2]] : i32) { +! CHECK: acc.kernels {{.*}} async([[ASYNC2]] : i32) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -93,7 +107,7 @@ subroutine acc_kernels_loop a(i) = b(i) END DO -! CHECK: acc.kernels wait { +! CHECK: acc.kernels {{.*}} wait { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -106,7 +120,7 @@ subroutine acc_kernels_loop END DO ! CHECK: [[WAIT1:%.*]] = arith.constant 1 : i32 -! CHECK: acc.kernels wait({[[WAIT1]] : i32}) { +! CHECK: acc.kernels {{.*}} wait({[[WAIT1]] : i32}) { ! CHECK: acc.loop ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -120,7 +134,7 @@ subroutine acc_kernels_loop ! CHECK: [[WAIT2:%.*]] = arith.constant 1 : i32 ! CHECK: [[WAIT3:%.*]] = arith.constant 2 : i32 -! CHECK: acc.kernels wait({[[WAIT2]] : i32, [[WAIT3]] : i32}) { +! CHECK: acc.kernels {{.*}} wait({[[WAIT2]] : i32, [[WAIT3]] : i32}) { ! CHECK: acc.loop ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -134,7 +148,7 @@ subroutine acc_kernels_loop ! CHECK: [[WAIT4:%.*]] = fir.load %{{.*}} : !fir.ref<i32> ! CHECK: [[WAIT5:%.*]] = fir.load %{{.*}} : !fir.ref<i32> -! CHECK: acc.kernels wait({[[WAIT4]] : i32, [[WAIT5]] : i32}) { +! CHECK: acc.kernels {{.*}} wait({[[WAIT4]] : i32, [[WAIT5]] : i32}) { ! CHECK: acc.loop ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -147,7 +161,7 @@ subroutine acc_kernels_loop END DO ! CHECK: [[NUMGANGS1:%.*]] = arith.constant 1 : i32 -! CHECK: acc.kernels num_gangs({[[NUMGANGS1]] : i32}) { +! CHECK: acc.kernels {{.*}} num_gangs({[[NUMGANGS1]] : i32}) { ! CHECK: acc.loop ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -160,7 +174,7 @@ subroutine acc_kernels_loop END DO ! CHECK: [[NUMGANGS2:%.*]] = fir.load %{{.*}} : !fir.ref<i32> -! CHECK: acc.kernels num_gangs({[[NUMGANGS2]] : i32}) { +! CHECK: acc.kernels {{.*}} num_gangs({[[NUMGANGS2]] : i32}) { ! CHECK: acc.loop ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -173,7 +187,7 @@ subroutine acc_kernels_loop END DO ! CHECK: [[NUMWORKERS1:%.*]] = arith.constant 10 : i32 -! CHECK: acc.kernels num_workers([[NUMWORKERS1]] : i32) { +! CHECK: acc.kernels {{.*}} num_workers([[NUMWORKERS1]] : i32) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -186,7 +200,7 @@ subroutine acc_kernels_loop END DO ! CHECK: [[NUMWORKERS2:%.*]] = fir.load %{{.*}} : !fir.ref<i32> -! CHECK: acc.kernels num_workers([[NUMWORKERS2]] : i32) { +! CHECK: acc.kernels {{.*}} num_workers([[NUMWORKERS2]] : i32) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -199,7 +213,7 @@ subroutine acc_kernels_loop END DO ! CHECK: [[VECTORLENGTH1:%.*]] = arith.constant 128 : i32 -! CHECK: acc.kernels vector_length([[VECTORLENGTH1]] : i32) { +! CHECK: acc.kernels {{.*}} vector_length([[VECTORLENGTH1]] : i32) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -212,7 +226,7 @@ subroutine acc_kernels_loop END DO ! CHECK: [[VECTORLENGTH2:%.*]] = fir.load %{{.*}} : !fir.ref<i32> -! CHECK: acc.kernels vector_length([[VECTORLENGTH2]] : i32) { +! CHECK: acc.kernels {{.*}} vector_length([[VECTORLENGTH2]] : i32) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -225,7 +239,7 @@ subroutine acc_kernels_loop END DO ! CHECK: [[IF1:%.*]] = arith.constant true -! CHECK: acc.kernels if([[IF1]]) { +! CHECK: acc.kernels {{.*}} if([[IF1]]) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -239,7 +253,7 @@ subroutine acc_kernels_loop ! CHECK: [[IFCOND:%.*]] = fir.load %{{.*}} : !fir.ref<!fir.logical<4>> ! CHECK: [[IF2:%.*]] = fir.convert [[IFCOND]] : (!fir.logical<4>) -> i1 -! CHECK: acc.kernels if([[IF2]]) { +! CHECK: acc.kernels {{.*}} if([[IF2]]) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -252,7 +266,7 @@ subroutine acc_kernels_loop END DO ! CHECK: [[SELF1:%.*]] = arith.constant true -! CHECK: acc.kernels self([[SELF1]]) { +! CHECK: acc.kernels {{.*}} self([[SELF1]]) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -264,7 +278,7 @@ subroutine acc_kernels_loop a(i) = b(i) END DO -! CHECK: acc.kernels { +! CHECK: acc.kernels {{.*}}{ ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -278,7 +292,7 @@ subroutine acc_kernels_loop ! CHECK: %[[SELF2:.*]] = fir.convert %[[DECLIFCONDITION]]#1 : (!fir.ref<!fir.logical<4>>) -> i1 -! CHECK: acc.kernels self(%[[SELF2]]) { +! CHECK: acc.kernels {{.*}} self(%[[SELF2]]) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -293,7 +307,7 @@ subroutine acc_kernels_loop ! CHECK: %[[COPYIN_A:.*]] = acc.copyin varPtr(%[[DECLA]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {dataClause = #acc<data_clause acc_copy>, name = "a"} ! CHECK: %[[COPYIN_B:.*]] = acc.copyin varPtr(%[[DECLB]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {dataClause = #acc<data_clause acc_copy>, name = "b"} -! CHECK: acc.kernels dataOperands(%[[COPYIN_A]], %[[COPYIN_B]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { +! CHECK: acc.kernels {{.*}} dataOperands(%[[COPYIN_A]], %[[COPYIN_B]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -309,7 +323,7 @@ subroutine acc_kernels_loop ! CHECK: %[[COPYIN_A:.*]] = acc.copyin varPtr(%[[DECLA]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {dataClause = #acc<data_clause acc_copy>, name = "a"} ! CHECK: %[[COPYIN_B:.*]] = acc.copyin varPtr(%[[DECLB]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {dataClause = #acc<data_clause acc_copy>, name = "b"} -! CHECK: acc.kernels dataOperands(%[[COPYIN_A]], %[[COPYIN_B]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { +! CHECK: acc.kernels {{.*}} dataOperands(%[[COPYIN_A]], %[[COPYIN_B]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -325,7 +339,7 @@ subroutine acc_kernels_loop ! CHECK: %[[COPYIN_A:.*]] = acc.copyin varPtr(%[[DECLA]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {name = "a"} ! CHECK: %[[COPYIN_B:.*]] = acc.copyin varPtr(%[[DECLB]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {dataClause = #acc<data_clause acc_copyin_readonly>, name = "b"} -! CHECK: acc.kernels dataOperands(%[[COPYIN_A]], %[[COPYIN_B]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { +! CHECK: acc.kernels {{.*}} dataOperands(%[[COPYIN_A]], %[[COPYIN_B]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -339,7 +353,7 @@ subroutine acc_kernels_loop ! CHECK: %[[CREATE_A:.*]] = acc.create varPtr(%[[DECLA]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {dataClause = #acc<data_clause acc_copyout>, name = "a"} ! CHECK: %[[CREATE_B:.*]] = acc.create varPtr(%[[DECLB]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {dataClause = #acc<data_clause acc_copyout>, name = "b"} -! CHECK: acc.kernels dataOperands(%[[CREATE_A]], %[[CREATE_B]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { +! CHECK: acc.kernels {{.*}} dataOperands(%[[CREATE_A]], %[[CREATE_B]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -355,7 +369,7 @@ subroutine acc_kernels_loop ! CHECK: %[[CREATE_B:.*]] = acc.create varPtr(%[[DECLB]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {name = "b"} ! CHECK: %[[CREATE_A:.*]] = acc.create varPtr(%[[DECLA]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {dataClause = #acc<data_clause acc_create_zero>, name = "a"} -! CHECK: acc.kernels dataOperands(%[[CREATE_B]], %[[CREATE_A]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { +! CHECK: acc.kernels {{.*}} dataOperands(%[[CREATE_B]], %[[CREATE_A]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -371,7 +385,7 @@ subroutine acc_kernels_loop ! CHECK: %[[NOCREATE_A:.*]] = acc.nocreate varPtr(%[[DECLA]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {name = "a"} ! CHECK: %[[NOCREATE_B:.*]] = acc.nocreate varPtr(%[[DECLB]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {name = "b"} -! CHECK: acc.kernels dataOperands(%[[NOCREATE_A]], %[[NOCREATE_B]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { +! CHECK: acc.kernels {{.*}} dataOperands(%[[NOCREATE_A]], %[[NOCREATE_B]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -385,7 +399,7 @@ subroutine acc_kernels_loop ! CHECK: %[[PRESENT_A:.*]] = acc.present varPtr(%[[DECLA]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {name = "a"} ! CHECK: %[[PRESENT_B:.*]] = acc.present varPtr(%[[DECLB]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {name = "b"} -! CHECK: acc.kernels dataOperands(%[[PRESENT_A]], %[[PRESENT_B]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { +! CHECK: acc.kernels {{.*}} dataOperands(%[[PRESENT_A]], %[[PRESENT_B]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -399,7 +413,7 @@ subroutine acc_kernels_loop ! CHECK: %[[DEVICEPTR_A:.*]] = acc.deviceptr varPtr(%[[DECLA]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {name = "a"} ! CHECK: %[[DEVICEPTR_B:.*]] = acc.deviceptr varPtr(%[[DECLB]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {name = "b"} -! CHECK: acc.kernels dataOperands(%[[DEVICEPTR_A]], %[[DEVICEPTR_B]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { +! CHECK: acc.kernels {{.*}} dataOperands(%[[DEVICEPTR_A]], %[[DEVICEPTR_B]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -417,7 +431,7 @@ subroutine acc_kernels_loop ! CHECK: %[[BOX_G:.*]] = fir.load %[[DECLG]]#0 : !fir.ref<!fir.box<!fir.ptr<f32>>> ! CHECK: %[[BOX_ADDR_G:.*]] = fir.box_addr %[[BOX_G]] : (!fir.box<!fir.ptr<f32>>) -> !fir.ptr<f32> ! CHECK: %[[ATTACH_G:.*]] = acc.attach varPtr(%[[BOX_ADDR_G]] : !fir.ptr<f32>) -> !fir.ptr<f32> {name = "g"} -! CHECK: acc.kernels dataOperands(%[[ATTACH_F]], %[[ATTACH_G]] : !fir.ptr<f32>, !fir.ptr<f32>) { +! CHECK: acc.kernels {{.*}} dataOperands(%[[ATTACH_F]], %[[ATTACH_G]] : !fir.ptr<f32>, !fir.ptr<f32>) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -429,7 +443,7 @@ subroutine acc_kernels_loop a(i) = b(i) END DO -! CHECK: acc.kernels { +! CHECK: acc.kernels {{.*}} { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>, seq = [#acc.device_type<none>]} @@ -441,7 +455,7 @@ subroutine acc_kernels_loop a(i) = b(i) END DO -! CHECK: acc.kernels { +! CHECK: acc.kernels {{.*}} { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: } attributes {auto_ = [#acc.device_type<none>], inclusiveUpperbound = array<i1: true>} @@ -453,7 +467,7 @@ subroutine acc_kernels_loop a(i) = b(i) END DO -! CHECK: acc.kernels { +! CHECK: acc.kernels {{.*}} { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>, independent = [#acc.device_type<none>]} @@ -465,8 +479,8 @@ subroutine acc_kernels_loop a(i) = b(i) END DO -! CHECK: acc.kernels { -! CHECK: acc.loop gang {{.*}} { +! CHECK: acc.kernels {{.*}} { +! CHECK: acc.loop {{.*}} gang {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>}{{$}} ! CHECK: acc.terminator @@ -477,9 +491,9 @@ subroutine acc_kernels_loop a(i) = b(i) END DO -! CHECK: acc.kernels { +! CHECK: acc.kernels {{.*}} { ! CHECK: [[GANGNUM1:%.*]] = arith.constant 8 : i32 -! CHECK-NEXT: acc.loop gang({num=[[GANGNUM1]] : i32}) {{.*}} { +! CHECK-NEXT: acc.loop {{.*}} gang({num=[[GANGNUM1]] : i32}) {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} ! CHECK: acc.terminator @@ -490,9 +504,9 @@ subroutine acc_kernels_loop a(i) = b(i) END DO -! CHECK: acc.kernels { +! CHECK: acc.kernels {{.*}} { ! CHECK: [[GANGNUM2:%.*]] = fir.load %{{.*}} : !fir.ref<i32> -! CHECK-NEXT: acc.loop gang({num=[[GANGNUM2]] : i32}) {{.*}} { +! CHECK-NEXT: acc.loop {{.*}} gang({num=[[GANGNUM2]] : i32}) {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} ! CHECK: acc.terminator @@ -503,8 +517,8 @@ subroutine acc_kernels_loop a(i) = b(i) END DO -! CHECK: acc.kernels { -! CHECK: acc.loop gang({num=%{{.*}} : i32, static=%{{.*}} : i32}) +! CHECK: acc.kernels {{.*}} { +! CHECK: acc.loop {{.*}} gang({num=%{{.*}} : i32, static=%{{.*}} : i32}) ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} ! CHECK: acc.terminator @@ -514,8 +528,9 @@ subroutine acc_kernels_loop DO i = 1, n a(i) = b(i) END DO -! CHECK: acc.kernels { -! CHECK: acc.loop vector {{.*}} { + +! CHECK: acc.kernels {{.*}} { +! CHECK: acc.loop {{.*}} vector {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>}{{$}} ! CHECK: acc.terminator @@ -526,9 +541,9 @@ subroutine acc_kernels_loop a(i) = b(i) END DO -! CHECK: acc.kernels { +! CHECK: acc.kernels {{.*}} { ! CHECK: [[CONSTANT128:%.*]] = arith.constant 128 : i32 -! CHECK: acc.loop vector([[CONSTANT128]] : i32) {{.*}} { +! CHECK: acc.loop {{.*}} vector([[CONSTANT128]] : i32) {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} ! CHECK: acc.terminator @@ -539,9 +554,9 @@ subroutine acc_kernels_loop a(i) = b(i) END DO -! CHECK: acc.kernels { +! CHECK: acc.kernels {{.*}} { ! CHECK: [[VECTORLENGTH:%.*]] = fir.load %{{.*}} : !fir.ref<i32> -! CHECK: acc.loop vector([[VECTORLENGTH]] : i32) {{.*}} { +! CHECK: acc.loop {{.*}} vector([[VECTORLENGTH]] : i32) {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} ! CHECK: acc.terminator @@ -552,8 +567,8 @@ subroutine acc_kernels_loop a(i) = b(i) END DO -! CHECK: acc.kernels { -! CHECK: acc.loop worker {{.*}} { +! CHECK: acc.kernels {{.*}} { +! CHECK: acc.loop {{.*}} worker {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>}{{$}} ! CHECK: acc.terminator @@ -564,9 +579,9 @@ subroutine acc_kernels_loop a(i) = b(i) END DO -! CHECK: acc.kernels { +! CHECK: acc.kernels {{.*}} { ! CHECK: [[WORKER128:%.*]] = arith.constant 128 : i32 -! CHECK: acc.loop worker([[WORKER128]] : i32) {{.*}} { +! CHECK: acc.loop {{.*}} worker([[WORKER128]] : i32) {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} ! CHECK: acc.terminator @@ -579,7 +594,7 @@ subroutine acc_kernels_loop END DO END DO -! CHECK: acc.kernels { +! CHECK: acc.kernels {{.*}} { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: } attributes {collapse = [2], collapseDeviceType = [#acc.device_type<none>], inclusiveUpperbound = array<i1: true, true>} @@ -594,7 +609,7 @@ subroutine acc_kernels_loop END DO END DO -! CHECK: acc.kernels { +! CHECK: acc.kernels {{.*}} { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield @@ -609,7 +624,7 @@ subroutine acc_kernels_loop a(i) = b(i) END DO -! CHECK: acc.kernels { +! CHECK: acc.kernels {{.*}} { ! CHECK: [[TILESIZE:%.*]] = arith.constant 2 : i32 ! CHECK: acc.loop {{.*}} tile({[[TILESIZE]] : i32}) {{.*}} { ! CHECK: acc.yield @@ -622,7 +637,7 @@ subroutine acc_kernels_loop a(i) = b(i) END DO -! CHECK: acc.kernels { +! CHECK: acc.kernels {{.*}} { ! CHECK: [[TILESIZEM1:%.*]] = arith.constant -1 : i32 ! CHECK: acc.loop {{.*}} tile({[[TILESIZEM1]] : i32}) {{.*}} { ! CHECK: acc.yield @@ -637,7 +652,7 @@ subroutine acc_kernels_loop END DO END DO -! CHECK: acc.kernels { +! CHECK: acc.kernels {{.*}} { ! CHECK: [[TILESIZE1:%.*]] = arith.constant 2 : i32 ! CHECK: [[TILESIZE2:%.*]] = arith.constant 2 : i32 ! CHECK: acc.loop {{.*}} tile({[[TILESIZE1]] : i32, [[TILESIZE2]] : i32}) {{.*}} { @@ -651,7 +666,7 @@ subroutine acc_kernels_loop a(i) = b(i) END DO -! CHECK: acc.kernels { +! CHECK: acc.kernels {{.*}} { ! CHECK: acc.loop {{.*}} tile({%{{.*}} : i32}) {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -665,7 +680,7 @@ subroutine acc_kernels_loop END DO END DO -! CHECK: acc.kernels { +! CHECK: acc.kernels {{.*}} { ! CHECK: acc.loop {{.*}} tile({%{{.*}} : i32, %{{.*}} : i32}) {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -680,7 +695,7 @@ subroutine acc_kernels_loop ! CHECK: %[[COPYINREDR:.*]] = acc.copyin varPtr(%{{.*}} : !fir.ref<f32>) -> !fir.ref<f32> {dataClause = #acc<data_clause acc_reduction>, implicit = true, name = "reduction_r"} ! CHECK: %[[COPYINREDI:.*]] = acc.copyin varPtr(%{{.*}} : !fir.ref<i32>) -> !fir.ref<i32> {dataClause = #acc<data_clause acc_reduction>, implicit = true, name = "reduction_i"} -! CHECK: acc.kernels dataOperands(%[[COPYINREDR]], %[[COPYINREDI]] : !fir.ref<f32>, !fir.ref<i32>) { +! CHECK: acc.kernels {{.*}} dataOperands(%[[COPYINREDR]], %[[COPYINREDI]] : !fir.ref<f32>, !fir.ref<i32>) { ! CHECK: acc.loop {{.*}} reduction(@reduction_add_ref_f32 -> %{{.*}} : !fir.ref<f32>, @reduction_mul_ref_i32 -> %{{.*}} : !fir.ref<i32>) {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} diff --git a/flang/test/Lower/OpenACC/acc-loop.f90 b/flang/test/Lower/OpenACC/acc-loop.f90 index 1c64fab..fa910e7 100644 --- a/flang/test/Lower/OpenACC/acc-loop.f90 +++ b/flang/test/Lower/OpenACC/acc-loop.f90 @@ -324,5 +324,5 @@ end subroutine ! CHECK: %[[P_I:.*]] = acc.private varPtr(%[[DC_I]] : !fir.ref<i32>) -> !fir.ref<i32> {implicit = true, name = ""} ! CHECK: %[[P_J:.*]] = acc.private varPtr(%[[DC_J]] : !fir.ref<i32>) -> !fir.ref<i32> {implicit = true, name = ""} ! CHECK: %[[P_K:.*]] = acc.private varPtr(%[[DC_K]] : !fir.ref<i32>) -> !fir.ref<i32> {implicit = true, name = ""} -! CHECK: acc.loop private(@privatization_ref_i32 -> %[[P_I]] : !fir.ref<i32>, @privatization_ref_i32 -> %[[P_J]] : !fir.ref<i32>, @privatization_ref_i32 -> %[[P_K]] : !fir.ref<i32>) control(%{{.*}} : i32, %{{.*}} : i32, %{{.*}} : i32) = (%c1{{.*}}, %c1{{.*}}, %c1{{.*}} : i32, i32, i32) to (%c10{{.*}}, %c100{{.*}}, %c200{{.*}} : i32, i32, i32) step (%c1{{.*}}, %c1{{.*}}, %c1{{.*}} : i32, i32, i32) +! CHECK: acc.loop combined(parallel) private(@privatization_ref_i32 -> %[[P_I]] : !fir.ref<i32>, @privatization_ref_i32 -> %[[P_J]] : !fir.ref<i32>, @privatization_ref_i32 -> %[[P_K]] : !fir.ref<i32>) control(%{{.*}} : i32, %{{.*}} : i32, %{{.*}} : i32) = (%c1{{.*}}, %c1{{.*}}, %c1{{.*}} : i32, i32, i32) to (%c10{{.*}}, %c100{{.*}}, %c200{{.*}} : i32, i32, i32) step (%c1{{.*}}, %c1{{.*}}, %c1{{.*}} : i32, i32, i32) ! CHECK: } attributes {inclusiveUpperbound = array<i1: true, true, true>} diff --git a/flang/test/Lower/OpenACC/acc-parallel-loop.f90 b/flang/test/Lower/OpenACC/acc-parallel-loop.f90 index 39f1830..48ceda0 100644 --- a/flang/test/Lower/OpenACC/acc-parallel-loop.f90 +++ b/flang/test/Lower/OpenACC/acc-parallel-loop.f90 @@ -39,13 +39,27 @@ subroutine acc_parallel_loop ! CHECK: %[[IFCONDITION:.*]] = fir.address_of(@{{.*}}ifcondition) : !fir.ref<!fir.logical<4>> ! CHECK: %[[DECLIFCONDITION:.*]]:2 = hlfir.declare %[[IFCONDITION]] - !$acc parallel loop + !$acc parallel + !$acc loop DO i = 1, n a(i) = b(i) END DO + !$acc end parallel ! CHECK: acc.parallel { -! CHECK: acc.loop {{.*}} { +! CHECK: acc.loop private{{.*}} { +! CHECK: acc.yield +! CHECK-NEXT: }{{$}} +! CHECK: acc.yield +! CHECK-NEXT: }{{$}} + + !$acc parallel loop + DO i = 1, n + a(i) = b(i) + END DO + +! CHECK: acc.parallel combined(loop) { +! CHECK: acc.loop combined(parallel) private{{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} ! CHECK: acc.yield @@ -57,7 +71,7 @@ subroutine acc_parallel_loop END DO !$acc end parallel loop -! CHECK: acc.parallel { +! CHECK: acc.parallel {{.*}} { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -70,7 +84,7 @@ subroutine acc_parallel_loop END DO ! CHECK: [[ASYNC1:%.*]] = arith.constant 1 : i32 -! CHECK: acc.parallel async([[ASYNC1]] : i32) { +! CHECK: acc.parallel {{.*}} async([[ASYNC1]] : i32) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -83,7 +97,7 @@ subroutine acc_parallel_loop END DO ! CHECK: [[ASYNC2:%.*]] = fir.load %{{.*}} : !fir.ref<i32> -! CHECK: acc.parallel async([[ASYNC2]] : i32) { +! CHECK: acc.parallel {{.*}} async([[ASYNC2]] : i32) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -95,7 +109,7 @@ subroutine acc_parallel_loop a(i) = b(i) END DO -! CHECK: acc.parallel wait { +! CHECK: acc.parallel {{.*}} wait { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -108,7 +122,7 @@ subroutine acc_parallel_loop END DO ! CHECK: [[WAIT1:%.*]] = arith.constant 1 : i32 -! CHECK: acc.parallel wait({[[WAIT1]] : i32}) { +! CHECK: acc.parallel {{.*}} wait({[[WAIT1]] : i32}) { ! CHECK: acc.loop ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -122,7 +136,7 @@ subroutine acc_parallel_loop ! CHECK: [[WAIT2:%.*]] = arith.constant 1 : i32 ! CHECK: [[WAIT3:%.*]] = arith.constant 2 : i32 -! CHECK: acc.parallel wait({[[WAIT2]] : i32, [[WAIT3]] : i32}) { +! CHECK: acc.parallel {{.*}} wait({[[WAIT2]] : i32, [[WAIT3]] : i32}) { ! CHECK: acc.loop ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -136,7 +150,7 @@ subroutine acc_parallel_loop ! CHECK: [[WAIT4:%.*]] = fir.load %{{.*}} : !fir.ref<i32> ! CHECK: [[WAIT5:%.*]] = fir.load %{{.*}} : !fir.ref<i32> -! CHECK: acc.parallel wait({[[WAIT4]] : i32, [[WAIT5]] : i32}) { +! CHECK: acc.parallel {{.*}} wait({[[WAIT4]] : i32, [[WAIT5]] : i32}) { ! CHECK: acc.loop ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -149,7 +163,7 @@ subroutine acc_parallel_loop END DO ! CHECK: [[NUMGANGS1:%.*]] = arith.constant 1 : i32 -! CHECK: acc.parallel num_gangs({[[NUMGANGS1]] : i32}) { +! CHECK: acc.parallel {{.*}} num_gangs({[[NUMGANGS1]] : i32}) { ! CHECK: acc.loop ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -162,7 +176,7 @@ subroutine acc_parallel_loop END DO ! CHECK: [[NUMGANGS2:%.*]] = fir.load %{{.*}} : !fir.ref<i32> -! CHECK: acc.parallel num_gangs({[[NUMGANGS2]] : i32}) { +! CHECK: acc.parallel {{.*}} num_gangs({[[NUMGANGS2]] : i32}) { ! CHECK: acc.loop ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -175,7 +189,7 @@ subroutine acc_parallel_loop END DO ! CHECK: [[NUMWORKERS1:%.*]] = arith.constant 10 : i32 -! CHECK: acc.parallel num_workers([[NUMWORKERS1]] : i32) { +! CHECK: acc.parallel {{.*}} num_workers([[NUMWORKERS1]] : i32) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -188,7 +202,7 @@ subroutine acc_parallel_loop END DO ! CHECK: [[NUMWORKERS2:%.*]] = fir.load %{{.*}} : !fir.ref<i32> -! CHECK: acc.parallel num_workers([[NUMWORKERS2]] : i32) { +! CHECK: acc.parallel {{.*}} num_workers([[NUMWORKERS2]] : i32) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -201,7 +215,7 @@ subroutine acc_parallel_loop END DO ! CHECK: [[VECTORLENGTH1:%.*]] = arith.constant 128 : i32 -! CHECK: acc.parallel vector_length([[VECTORLENGTH1]] : i32) { +! CHECK: acc.parallel {{.*}} vector_length([[VECTORLENGTH1]] : i32) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -214,7 +228,7 @@ subroutine acc_parallel_loop END DO ! CHECK: [[VECTORLENGTH2:%.*]] = fir.load %{{.*}} : !fir.ref<i32> -! CHECK: acc.parallel vector_length([[VECTORLENGTH2]] : i32) { +! CHECK: acc.parallel {{.*}} vector_length([[VECTORLENGTH2]] : i32) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -227,7 +241,7 @@ subroutine acc_parallel_loop END DO ! CHECK: [[IF1:%.*]] = arith.constant true -! CHECK: acc.parallel if([[IF1]]) { +! CHECK: acc.parallel {{.*}} if([[IF1]]) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -241,7 +255,7 @@ subroutine acc_parallel_loop ! CHECK: [[IFCOND:%.*]] = fir.load %{{.*}} : !fir.ref<!fir.logical<4>> ! CHECK: [[IF2:%.*]] = fir.convert [[IFCOND]] : (!fir.logical<4>) -> i1 -! CHECK: acc.parallel if([[IF2]]) { +! CHECK: acc.parallel {{.*}} if([[IF2]]) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -254,7 +268,7 @@ subroutine acc_parallel_loop END DO ! CHECK: [[SELF1:%.*]] = arith.constant true -! CHECK: acc.parallel self([[SELF1]]) { +! CHECK: acc.parallel {{.*}} self([[SELF1]]) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -266,7 +280,7 @@ subroutine acc_parallel_loop a(i) = b(i) END DO -! CHECK: acc.parallel { +! CHECK: acc.parallel {{.*}} { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -279,7 +293,7 @@ subroutine acc_parallel_loop END DO ! CHECK: %[[SELF2:.*]] = fir.convert %[[DECLIFCONDITION]]#1 : (!fir.ref<!fir.logical<4>>) -> i1 -! CHECK: acc.parallel self(%[[SELF2]]) { +! CHECK: acc.parallel {{.*}} self(%[[SELF2]]) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -293,7 +307,7 @@ subroutine acc_parallel_loop ! CHECK: %[[COPYIN_A:.*]] = acc.copyin varPtr(%[[DECLA]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {dataClause = #acc<data_clause acc_copy>, name = "a"} ! CHECK: %[[COPYIN_B:.*]] = acc.copyin varPtr(%[[DECLB]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {dataClause = #acc<data_clause acc_copy>, name = "b"} -! CHECK: acc.parallel dataOperands(%[[COPYIN_A]], %[[COPYIN_B]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { +! CHECK: acc.parallel {{.*}} dataOperands(%[[COPYIN_A]], %[[COPYIN_B]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -309,7 +323,7 @@ subroutine acc_parallel_loop ! CHECK: %[[COPYIN_A:.*]] = acc.copyin varPtr(%[[DECLA]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {dataClause = #acc<data_clause acc_copy>, name = "a"} ! CHECK: %[[COPYIN_B:.*]] = acc.copyin varPtr(%[[DECLB]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {dataClause = #acc<data_clause acc_copy>, name = "b"} -! CHECK: acc.parallel dataOperands(%[[COPYIN_A]], %[[COPYIN_B]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { +! CHECK: acc.parallel {{.*}} dataOperands(%[[COPYIN_A]], %[[COPYIN_B]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -325,7 +339,7 @@ subroutine acc_parallel_loop ! CHECK: %[[COPYIN_A:.*]] = acc.copyin varPtr(%[[DECLA]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {name = "a"} ! CHECK: %[[COPYIN_B:.*]] = acc.copyin varPtr(%[[DECLB]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {dataClause = #acc<data_clause acc_copyin_readonly>, name = "b"} -! CHECK: acc.parallel dataOperands(%[[COPYIN_A]], %[[COPYIN_B]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { +! CHECK: acc.parallel {{.*}} dataOperands(%[[COPYIN_A]], %[[COPYIN_B]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -339,7 +353,7 @@ subroutine acc_parallel_loop ! CHECK: %[[CREATE_A:.*]] = acc.create varPtr(%[[DECLA]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {dataClause = #acc<data_clause acc_copyout>, name = "a"} ! CHECK: %[[CREATE_B:.*]] = acc.create varPtr(%[[DECLB]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {dataClause = #acc<data_clause acc_copyout>, name = "b"} -! CHECK: acc.parallel dataOperands(%[[CREATE_A]], %[[CREATE_B]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { +! CHECK: acc.parallel {{.*}} dataOperands(%[[CREATE_A]], %[[CREATE_B]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -355,7 +369,7 @@ subroutine acc_parallel_loop ! CHECK: %[[CREATE_B:.*]] = acc.create varPtr(%[[DECLB]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {name = "b"} ! CHECK: %[[CREATE_A:.*]] = acc.create varPtr(%[[DECLA]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {dataClause = #acc<data_clause acc_create_zero>, name = "a"} -! CHECK: acc.parallel dataOperands(%[[CREATE_B]], %[[CREATE_A]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { +! CHECK: acc.parallel {{.*}} dataOperands(%[[CREATE_B]], %[[CREATE_A]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -371,7 +385,7 @@ subroutine acc_parallel_loop ! CHECK: %[[NOCREATE_A:.*]] = acc.nocreate varPtr(%[[DECLA]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {name = "a"} ! CHECK: %[[NOCREATE_B:.*]] = acc.nocreate varPtr(%[[DECLB]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {name = "b"} -! CHECK: acc.parallel dataOperands(%[[NOCREATE_A]], %[[NOCREATE_B]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { +! CHECK: acc.parallel {{.*}} dataOperands(%[[NOCREATE_A]], %[[NOCREATE_B]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -385,7 +399,7 @@ subroutine acc_parallel_loop ! CHECK: %[[PRESENT_A:.*]] = acc.present varPtr(%[[DECLA]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {name = "a"} ! CHECK: %[[PRESENT_B:.*]] = acc.present varPtr(%[[DECLB]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {name = "b"} -! CHECK: acc.parallel dataOperands(%[[PRESENT_A]], %[[PRESENT_B]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { +! CHECK: acc.parallel {{.*}} dataOperands(%[[PRESENT_A]], %[[PRESENT_B]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -399,7 +413,7 @@ subroutine acc_parallel_loop ! CHECK: %[[DEVICEPTR_A:.*]] = acc.deviceptr varPtr(%[[DECLA]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {name = "a"} ! CHECK: %[[DEVICEPTR_B:.*]] = acc.deviceptr varPtr(%[[DECLB]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {name = "b"} -! CHECK: acc.parallel dataOperands(%[[DEVICEPTR_A]], %[[DEVICEPTR_B]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { +! CHECK: acc.parallel {{.*}} dataOperands(%[[DEVICEPTR_A]], %[[DEVICEPTR_B]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -417,7 +431,7 @@ subroutine acc_parallel_loop ! CHECK: %[[BOX_G:.*]] = fir.load %[[DECLG]]#0 : !fir.ref<!fir.box<!fir.ptr<f32>>> ! CHECK: %[[BOX_ADDR_G:.*]] = fir.box_addr %[[BOX_G]] : (!fir.box<!fir.ptr<f32>>) -> !fir.ptr<f32> ! CHECK: %[[ATTACH_G:.*]] = acc.attach varPtr(%[[BOX_ADDR_G]] : !fir.ptr<f32>) -> !fir.ptr<f32> {name = "g"} -! CHECK: acc.parallel dataOperands(%[[ATTACH_F]], %[[ATTACH_G]] : !fir.ptr<f32>, !fir.ptr<f32>) { +! CHECK: acc.parallel {{.*}} dataOperands(%[[ATTACH_F]], %[[ATTACH_G]] : !fir.ptr<f32>, !fir.ptr<f32>) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -430,9 +444,9 @@ subroutine acc_parallel_loop END DO ! CHECK: %[[ACC_PRIVATE_B:.*]] = acc.firstprivate varPtr(%[[DECLB]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {name = "b"} -! CHECK: acc.parallel firstprivate(@firstprivatization_section_ext10_ref_10xf32 -> %[[ACC_PRIVATE_B]] : !fir.ref<!fir.array<10xf32>>) { +! CHECK: acc.parallel {{.*}} firstprivate(@firstprivatization_section_ext10_ref_10xf32 -> %[[ACC_PRIVATE_B]] : !fir.ref<!fir.array<10xf32>>) { ! CHECK: %[[ACC_PRIVATE_A:.*]] = acc.private varPtr(%[[DECLA]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {name = "a"} -! CHECK: acc.loop private({{.*}}@privatization_ref_10xf32 -> %[[ACC_PRIVATE_A]] : !fir.ref<!fir.array<10xf32>>) +! CHECK: acc.loop {{.*}} private({{.*}}@privatization_ref_10xf32 -> %[[ACC_PRIVATE_A]] : !fir.ref<!fir.array<10xf32>>) ! CHECK-NOT: fir.do_loop ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -444,7 +458,7 @@ subroutine acc_parallel_loop a(i) = b(i) END DO -! CHECK: acc.parallel { +! CHECK: acc.parallel {{.*}} { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>, seq = [#acc.device_type<none>]} @@ -456,7 +470,7 @@ subroutine acc_parallel_loop a(i) = b(i) END DO -! CHECK: acc.parallel { +! CHECK: acc.parallel {{.*}} { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: } attributes {auto_ = [#acc.device_type<none>], inclusiveUpperbound = array<i1: true>} @@ -468,7 +482,7 @@ subroutine acc_parallel_loop a(i) = b(i) END DO -! CHECK: acc.parallel { +! CHECK: acc.parallel {{.*}} { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>, independent = [#acc.device_type<none>]} @@ -480,8 +494,8 @@ subroutine acc_parallel_loop a(i) = b(i) END DO -! CHECK: acc.parallel { -! CHECK: acc.loop gang +! CHECK: acc.parallel {{.*}} { +! CHECK: acc.loop {{.*}} gang ! CHECK: acc.yield ! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>}{{$}} ! CHECK: acc.yield @@ -492,9 +506,9 @@ subroutine acc_parallel_loop a(i) = b(i) END DO -! CHECK: acc.parallel { +! CHECK: acc.parallel {{.*}} { ! CHECK: [[GANGNUM1:%.*]] = arith.constant 8 : i32 -! CHECK-NEXT: acc.loop gang({num=[[GANGNUM1]] : i32}) +! CHECK-NEXT: acc.loop {{.*}} gang({num=[[GANGNUM1]] : i32}) ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} ! CHECK: acc.yield @@ -505,9 +519,9 @@ subroutine acc_parallel_loop a(i) = b(i) END DO -! CHECK: acc.parallel { +! CHECK: acc.parallel {{.*}} { ! CHECK: [[GANGNUM2:%.*]] = fir.load %{{.*}} : !fir.ref<i32> -! CHECK-NEXT: acc.loop gang({num=[[GANGNUM2]] : i32}) +! CHECK-NEXT: acc.loop {{.*}} gang({num=[[GANGNUM2]] : i32}) ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} ! CHECK: acc.yield @@ -518,8 +532,8 @@ subroutine acc_parallel_loop a(i) = b(i) END DO -! CHECK: acc.parallel { -! CHECK: acc.loop gang({num=%{{.*}} : i32, static=%{{.*}} : i32}) +! CHECK: acc.parallel {{.*}} { +! CHECK: acc.loop {{.*}} gang({num=%{{.*}} : i32, static=%{{.*}} : i32}) ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} ! CHECK: acc.yield @@ -529,8 +543,9 @@ subroutine acc_parallel_loop DO i = 1, n a(i) = b(i) END DO -! CHECK: acc.parallel { -! CHECK: acc.loop vector + +! CHECK: acc.parallel {{.*}} { +! CHECK: acc.loop {{.*}} vector ! CHECK: acc.yield ! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>}{{$}} ! CHECK: acc.yield @@ -541,9 +556,9 @@ subroutine acc_parallel_loop a(i) = b(i) END DO -! CHECK: acc.parallel { +! CHECK: acc.parallel {{.*}} { ! CHECK: [[CONSTANT128:%.*]] = arith.constant 128 : i32 -! CHECK: acc.loop vector([[CONSTANT128]] : i32) {{.*}} { +! CHECK: acc.loop {{.*}} vector([[CONSTANT128]] : i32) {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} ! CHECK: acc.yield @@ -554,9 +569,9 @@ subroutine acc_parallel_loop a(i) = b(i) END DO -! CHECK: acc.parallel { +! CHECK: acc.parallel {{.*}} { ! CHECK: [[VECTORLENGTH:%.*]] = fir.load %{{.*}} : !fir.ref<i32> -! CHECK: acc.loop vector([[VECTORLENGTH]] : i32) {{.*}} { +! CHECK: acc.loop {{.*}} vector([[VECTORLENGTH]] : i32) {{.*}} { ! CHECK-NOT: fir.do_loop ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -568,8 +583,8 @@ subroutine acc_parallel_loop a(i) = b(i) END DO -! CHECK: acc.parallel { -! CHECK: acc.loop worker {{.*}} { +! CHECK: acc.parallel {{.*}} { +! CHECK: acc.loop {{.*}} worker {{.*}} { ! CHECK-NOT: fir.do_loop ! CHECK: acc.yield ! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>}{{$}} @@ -581,9 +596,9 @@ subroutine acc_parallel_loop a(i) = b(i) END DO -! CHECK: acc.parallel { +! CHECK: acc.parallel {{.*}}{ ! CHECK: [[WORKER128:%.*]] = arith.constant 128 : i32 -! CHECK: acc.loop worker([[WORKER128]] : i32) {{.*}} { +! CHECK: acc.loop {{.*}} worker([[WORKER128]] : i32) {{.*}} { ! CHECK-NOT: fir.do_loop ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -597,7 +612,7 @@ subroutine acc_parallel_loop END DO END DO -! CHECK: acc.parallel { +! CHECK: acc.parallel {{.*}} { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: } attributes {collapse = [2], collapseDeviceType = [#acc.device_type<none>], inclusiveUpperbound = array<i1: true, true>} @@ -612,7 +627,7 @@ subroutine acc_parallel_loop END DO END DO -! CHECK: acc.parallel { +! CHECK: acc.parallel {{.*}} { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield @@ -627,7 +642,7 @@ subroutine acc_parallel_loop a(i) = b(i) END DO -! CHECK: acc.parallel { +! CHECK: acc.parallel {{.*}} { ! CHECK: [[TILESIZE:%.*]] = arith.constant 2 : i32 ! CHECK: acc.loop {{.*}} tile({[[TILESIZE]] : i32}) {{.*}} { ! CHECK: acc.yield @@ -640,7 +655,7 @@ subroutine acc_parallel_loop a(i) = b(i) END DO -! CHECK: acc.parallel { +! CHECK: acc.parallel {{.*}} { ! CHECK: [[TILESIZEM1:%.*]] = arith.constant -1 : i32 ! CHECK: acc.loop {{.*}} tile({[[TILESIZEM1]] : i32}) {{.*}} { ! CHECK: acc.yield @@ -655,7 +670,7 @@ subroutine acc_parallel_loop END DO END DO -! CHECK: acc.parallel { +! CHECK: acc.parallel {{.*}} { ! CHECK: [[TILESIZE1:%.*]] = arith.constant 2 : i32 ! CHECK: [[TILESIZE2:%.*]] = arith.constant 2 : i32 ! CHECK: acc.loop {{.*}} tile({[[TILESIZE1]] : i32, [[TILESIZE2]] : i32}) {{.*}} { @@ -669,7 +684,7 @@ subroutine acc_parallel_loop a(i) = b(i) END DO -! CHECK: acc.parallel { +! CHECK: acc.parallel {{.*}} { ! CHECK: acc.loop {{.*}} tile({%{{.*}} : i32}) {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -683,7 +698,7 @@ subroutine acc_parallel_loop END DO END DO -! CHECK: acc.parallel { +! CHECK: acc.parallel {{.*}} { ! CHECK: acc.loop {{.*}} tile({%{{.*}} : i32, %{{.*}} : i32}) {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -698,7 +713,7 @@ subroutine acc_parallel_loop ! CHECK: %[[COPYINREDR:.*]] = acc.copyin varPtr(%{{.*}} : !fir.ref<f32>) -> !fir.ref<f32> {dataClause = #acc<data_clause acc_reduction>, implicit = true, name = "reduction_r"} ! CHECK: %[[COPYINREDI:.*]] = acc.copyin varPtr(%{{.*}} : !fir.ref<i32>) -> !fir.ref<i32> {dataClause = #acc<data_clause acc_reduction>, implicit = true, name = "reduction_i"} -! CHECK: acc.parallel dataOperands(%[[COPYINREDR]], %[[COPYINREDI]] : !fir.ref<f32>, !fir.ref<i32>) { +! CHECK: acc.parallel {{.*}} dataOperands(%[[COPYINREDR]], %[[COPYINREDI]] : !fir.ref<f32>, !fir.ref<i32>) { ! CHECK: acc.loop {{.*}} reduction(@reduction_add_ref_f32 -> %{{.*}} : !fir.ref<f32>, @reduction_mul_ref_i32 -> %{{.*}} : !fir.ref<i32>) {{.*}} ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} diff --git a/flang/test/Lower/OpenACC/acc-private.f90 b/flang/test/Lower/OpenACC/acc-private.f90 index ba582d4..4d9f84b 100644 --- a/flang/test/Lower/OpenACC/acc-private.f90 +++ b/flang/test/Lower/OpenACC/acc-private.f90 @@ -228,7 +228,7 @@ program acc_private END DO ! CHECK: %[[FP_C:.*]] = acc.firstprivate varPtr(%[[DECLC]]#0 : !fir.ref<i32>) -> !fir.ref<i32> {name = "c"} -! CHECK: acc.parallel firstprivate(@firstprivatization_ref_i32 -> %[[FP_C]] : !fir.ref<i32>) +! CHECK: acc.parallel {{.*}} firstprivate(@firstprivatization_ref_i32 -> %[[FP_C]] : !fir.ref<i32>) ! CHECK: acc.yield !$acc parallel loop firstprivate(b) @@ -242,7 +242,7 @@ program acc_private ! CHECK: %[[UB:.*]] = arith.subi %{{.*}}, %[[C1]] : index ! CHECK: %[[BOUND:.*]] = acc.bounds lowerbound(%[[LB]] : index) upperbound(%[[UB]] : index) extent(%{{.*}} : index) stride(%[[C1]] : index) startIdx(%[[C1]] : index) ! CHECK: %[[FP_B:.*]] = acc.firstprivate varPtr(%[[DECLB]]#0 : !fir.ref<!fir.array<100xf32>>) bounds(%[[BOUND]]) -> !fir.ref<!fir.array<100xf32>> {name = "b"} -! CHECK: acc.parallel firstprivate(@firstprivatization_section_ext100_ref_100xf32 -> %[[FP_B]] : !fir.ref<!fir.array<100xf32>>) +! CHECK: acc.parallel {{.*}} firstprivate(@firstprivatization_section_ext100_ref_100xf32 -> %[[FP_B]] : !fir.ref<!fir.array<100xf32>>) ! CHECK: acc.yield !$acc parallel loop firstprivate(b(51:100)) @@ -256,7 +256,7 @@ program acc_private ! CHECK: %[[UB:.*]] = arith.constant 99 : index ! CHECK: %[[BOUND:.*]] = acc.bounds lowerbound(%[[LB]] : index) upperbound(%[[UB]] : index) extent(%{{.*}} : index) stride(%[[C1]] : index) startIdx(%[[C1]] : index) ! CHECK: %[[FP_B:.*]] = acc.firstprivate varPtr(%[[DECLB]]#0 : !fir.ref<!fir.array<100xf32>>) bounds(%[[BOUND]]) -> !fir.ref<!fir.array<50xf32>> {name = "b(51:100)"} -! CHECK: acc.parallel firstprivate(@firstprivatization_section_lb50.ub99_ref_50xf32 -> %[[FP_B]] : !fir.ref<!fir.array<50xf32>>) +! CHECK: acc.parallel {{.*}} firstprivate(@firstprivatization_section_lb50.ub99_ref_50xf32 -> %[[FP_B]] : !fir.ref<!fir.array<50xf32>>) end program @@ -272,10 +272,10 @@ end subroutine ! CHECK-LABEL: func.func @_QPacc_private_assumed_shape( ! CHECK-SAME: %[[ARG0:.*]]: !fir.box<!fir.array<?xi32>> {fir.bindc_name = "a"} ! CHECK: %[[DECL_A:.*]]:2 = hlfir.declare %[[ARG0]] {uniq_name = "_QFacc_private_assumed_shapeEa"} : (!fir.box<!fir.array<?xi32>>) -> (!fir.box<!fir.array<?xi32>>, !fir.box<!fir.array<?xi32>>) -! CHECK: acc.parallel { +! CHECK: acc.parallel {{.*}} { ! CHECK: %[[ADDR:.*]] = fir.box_addr %[[DECL_A]]#0 : (!fir.box<!fir.array<?xi32>>) -> !fir.ref<!fir.array<?xi32>> ! CHECK: %[[PRIVATE:.*]] = acc.private varPtr(%[[ADDR]] : !fir.ref<!fir.array<?xi32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<?xi32>> {name = "a"} -! CHECK: acc.loop private({{.*}}@privatization_box_Uxi32 -> %[[PRIVATE]] : !fir.ref<!fir.array<?xi32>>) +! CHECK: acc.loop {{.*}} private({{.*}}@privatization_box_Uxi32 -> %[[PRIVATE]] : !fir.ref<!fir.array<?xi32>>) subroutine acc_private_allocatable_array(a, n) integer, allocatable :: a(:) @@ -294,11 +294,11 @@ end subroutine ! CHECK-LABEL: func.func @_QPacc_private_allocatable_array( ! CHECK-SAME: %[[ARG0:.*]]: !fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>> {fir.bindc_name = "a"} ! CHECK: %[[DECLA_A:.*]]:2 = hlfir.declare %[[ARG0]] {fortran_attrs = #fir.var_attrs<allocatable>, uniq_name = "_QFacc_private_allocatable_arrayEa"} : (!fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>>) -> (!fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>>, !fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>>) -! CHECK: acc.parallel { +! CHECK: acc.parallel {{.*}} { ! CHECK: %[[BOX:.*]] = fir.load %[[DECLA_A]]#0 : !fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>> ! CHECK: %[[BOX_ADDR:.*]] = fir.box_addr %[[BOX]] : (!fir.box<!fir.heap<!fir.array<?xi32>>>) -> !fir.heap<!fir.array<?xi32>> ! CHECK: %[[PRIVATE:.*]] = acc.private varPtr(%[[BOX_ADDR]] : !fir.heap<!fir.array<?xi32>>) bounds(%{{.*}}) -> !fir.heap<!fir.array<?xi32>> {name = "a"} -! CHECK: acc.loop private({{.*}}@privatization_box_heap_Uxi32 -> %[[PRIVATE]] : !fir.heap<!fir.array<?xi32>>) +! CHECK: acc.loop {{.*}} private({{.*}}@privatization_box_heap_Uxi32 -> %[[PRIVATE]] : !fir.heap<!fir.array<?xi32>>) ! CHECK: acc.serial private(@privatization_box_heap_Uxi32 -> %{{.*}} : !fir.heap<!fir.array<?xi32>>) subroutine acc_private_pointer_array(a, n) @@ -314,11 +314,11 @@ end subroutine ! CHECK-LABEL: func.func @_QPacc_private_pointer_array( ! CHECK-SAME: %[[ARG0:.*]]: !fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>> {fir.bindc_name = "a"}, %arg1: !fir.ref<i32> {fir.bindc_name = "n"}) { ! CHECK: %[[DECL_A:.*]]:2 = hlfir.declare %arg0 {fortran_attrs = #fir.var_attrs<pointer>, uniq_name = "_QFacc_private_pointer_arrayEa"} : (!fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>) -> (!fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>, !fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>) -! CHECK: acc.parallel { +! CHECK: acc.parallel {{.*}} { ! CHECK: %[[BOX:.*]] = fir.load %[[DECLA_A]]#0 : !fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>> ! CHECK: %[[BOX_ADDR:.*]] = fir.box_addr %[[BOX]] : (!fir.box<!fir.ptr<!fir.array<?xi32>>>) -> !fir.ptr<!fir.array<?xi32>> ! CHECK: %[[PRIVATE:.*]] = acc.private varPtr(%[[BOX_ADDR]] : !fir.ptr<!fir.array<?xi32>>) bounds(%{{.*}}) -> !fir.ptr<!fir.array<?xi32>> {name = "a"} -! CHECK: acc.loop private({{.*}}@privatization_box_ptr_Uxi32 -> %[[PRIVATE]] : !fir.ptr<!fir.array<?xi32>>) +! CHECK: acc.loop {{.*}} private({{.*}}@privatization_box_ptr_Uxi32 -> %[[PRIVATE]] : !fir.ptr<!fir.array<?xi32>>) subroutine acc_private_dynamic_extent(a, n) integer :: n, i @@ -334,10 +334,10 @@ end subroutine ! CHECK-SAME: %[[ARG0:.*]]: !fir.ref<!fir.array<?x?x2xi32>> {fir.bindc_name = "a"}, %[[ARG1:.*]]: !fir.ref<i32> {fir.bindc_name = "n"}) { ! CHECK: %[[DECL_N:.*]]:2 = hlfir.declare %[[ARG1]] {uniq_name = "_QFacc_private_dynamic_extentEn"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) ! CHECK: %[[DECL_A:.*]]:2 = hlfir.declare %[[ARG0]](%{{.*}}) {uniq_name = "_QFacc_private_dynamic_extentEa"} : (!fir.ref<!fir.array<?x?x2xi32>>, !fir.shape<3>) -> (!fir.box<!fir.array<?x?x2xi32>>, !fir.ref<!fir.array<?x?x2xi32>>) -! CHECK: acc.parallel { +! CHECK: acc.parallel {{.*}} { ! CHECK: %[[BOX_ADDR:.*]] = fir.box_addr %[[DECL_A]]#0 : (!fir.box<!fir.array<?x?x2xi32>>) -> !fir.ref<!fir.array<?x?x2xi32>> ! CHECK: %[[PRIV:.*]] = acc.private varPtr(%[[BOX_ADDR]] : !fir.ref<!fir.array<?x?x2xi32>>) bounds(%{{.*}}, %{{.*}}, %{{.*}}) -> !fir.ref<!fir.array<?x?x2xi32>> {name = "a"} -! CHECK: acc.loop private({{.*}}@privatization_box_UxUx2xi32 -> %[[PRIV]] : !fir.ref<!fir.array<?x?x2xi32>>) +! CHECK: acc.loop {{.*}} private({{.*}}@privatization_box_UxUx2xi32 -> %[[PRIV]] : !fir.ref<!fir.array<?x?x2xi32>>) subroutine acc_firstprivate_assumed_shape(a, n) integer :: a(:), i, n @@ -367,7 +367,7 @@ subroutine acc_firstprivate_dynamic_extent(a, n) end do end subroutine -! CHECK: acc.parallel firstprivate(@firstprivatization_box_UxUx2xi32 -> %{{.*}} : !fir.ref<!fir.array<?x?x2xi32>>) +! CHECK: acc.parallel {{.*}} firstprivate(@firstprivatization_box_UxUx2xi32 -> %{{.*}} : !fir.ref<!fir.array<?x?x2xi32>>) module acc_declare_equivalent integer, parameter :: n = 10 @@ -398,6 +398,6 @@ end ! CHECK: acc.parallel ! CHECK: %[[PRIV_I:.*]] = acc.private varPtr(%[[DECL_I]]#1 : !fir.ref<i32>) -> !fir.ref<i32> {implicit = true, name = ""} ! CHECK: %[[DECL_PRIV_I:.*]]:2 = hlfir.declare %[[PRIV_I]] {uniq_name = "_QFacc_private_useEi"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) -! CHECK: acc.loop private(@privatization_ref_i32 -> %[[PRIV_I]] : !fir.ref<i32>) control(%[[IV0:.*]] : i32) = (%c1{{.*}} : i32) to (%c10{{.*}} : i32) step (%c1{{.*}} : i32) +! CHECK: acc.loop {{.*}} private(@privatization_ref_i32 -> %[[PRIV_I]] : !fir.ref<i32>) control(%[[IV0:.*]] : i32) = (%c1{{.*}} : i32) to (%c10{{.*}} : i32) step (%c1{{.*}} : i32) ! CHECK: fir.store %[[IV0]] to %[[DECL_PRIV_I]]#0 : !fir.ref<i32> ! CHECK: %{{.*}} = fir.load %[[DECL_PRIV_I]]#0 : !fir.ref<i32> diff --git a/flang/test/Lower/OpenACC/acc-serial-loop.f90 b/flang/test/Lower/OpenACC/acc-serial-loop.f90 index 77f5e1e..fa3b3f7 100644 --- a/flang/test/Lower/OpenACC/acc-serial-loop.f90 +++ b/flang/test/Lower/OpenACC/acc-serial-loop.f90 @@ -58,13 +58,27 @@ subroutine acc_serial_loop ! CHECK: %[[IFCONDITION:.*]] = fir.address_of(@{{.*}}ifcondition) : !fir.ref<!fir.logical<4>> ! CHECK: %[[DECLIFCONDITION:.*]]:2 = hlfir.declare %[[IFCONDITION]] - !$acc serial loop + !$acc serial + !$acc loop DO i = 1, n a(i) = b(i) END DO + !$acc end serial ! CHECK: acc.serial { -! CHECK: acc.loop {{.*}} { +! CHECK: acc.loop private{{.*}} { +! CHECK: acc.yield +! CHECK-NEXT: }{{$}} +! CHECK: acc.yield +! CHECK-NEXT: }{{$}} + + !$acc serial loop + DO i = 1, n + a(i) = b(i) + END DO + +! CHECK: acc.serial combined(loop) { +! CHECK: acc.loop combined(serial) private{{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} ! CHECK: acc.yield @@ -76,7 +90,7 @@ subroutine acc_serial_loop END DO !$acc end serial loop -! CHECK: acc.serial { +! CHECK: acc.serial {{.*}} { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -89,7 +103,7 @@ subroutine acc_serial_loop END DO ! CHECK: [[ASYNC1:%.*]] = arith.constant 1 : i32 -! CHECK: acc.serial async([[ASYNC1]] : i32) { +! CHECK: acc.serial {{.*}} async([[ASYNC1]] : i32) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -102,7 +116,7 @@ subroutine acc_serial_loop END DO ! CHECK: [[ASYNC2:%.*]] = fir.load %{{.*}} : !fir.ref<i32> -! CHECK: acc.serial async([[ASYNC2]] : i32) { +! CHECK: acc.serial {{.*}} async([[ASYNC2]] : i32) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -114,7 +128,7 @@ subroutine acc_serial_loop a(i) = b(i) END DO -! CHECK: acc.serial wait { +! CHECK: acc.serial {{.*}} wait { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -127,7 +141,7 @@ subroutine acc_serial_loop END DO ! CHECK: [[WAIT1:%.*]] = arith.constant 1 : i32 -! CHECK: acc.serial wait({[[WAIT1]] : i32}) { +! CHECK: acc.serial {{.*}} wait({[[WAIT1]] : i32}) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -141,7 +155,7 @@ subroutine acc_serial_loop ! CHECK: [[WAIT2:%.*]] = arith.constant 1 : i32 ! CHECK: [[WAIT3:%.*]] = arith.constant 2 : i32 -! CHECK: acc.serial wait({[[WAIT2]] : i32, [[WAIT3]] : i32}) { +! CHECK: acc.serial {{.*}} wait({[[WAIT2]] : i32, [[WAIT3]] : i32}) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -155,7 +169,7 @@ subroutine acc_serial_loop ! CHECK: [[WAIT4:%.*]] = fir.load %{{.*}} : !fir.ref<i32> ! CHECK: [[WAIT5:%.*]] = fir.load %{{.*}} : !fir.ref<i32> -! CHECK: acc.serial wait({[[WAIT4]] : i32, [[WAIT5]] : i32}) { +! CHECK: acc.serial {{.*}} wait({[[WAIT4]] : i32, [[WAIT5]] : i32}) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -168,7 +182,7 @@ subroutine acc_serial_loop END DO ! CHECK: [[IF1:%.*]] = arith.constant true -! CHECK: acc.serial if([[IF1]]) { +! CHECK: acc.serial {{.*}} if([[IF1]]) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -182,7 +196,7 @@ subroutine acc_serial_loop ! CHECK: [[IFCOND:%.*]] = fir.load %{{.*}} : !fir.ref<!fir.logical<4>> ! CHECK: [[IF2:%.*]] = fir.convert [[IFCOND]] : (!fir.logical<4>) -> i1 -! CHECK: acc.serial if([[IF2]]) { +! CHECK: acc.serial {{.*}} if([[IF2]]) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -195,7 +209,7 @@ subroutine acc_serial_loop END DO ! CHECK: [[SELF1:%.*]] = arith.constant true -! CHECK: acc.serial self([[SELF1]]) { +! CHECK: acc.serial {{.*}} self([[SELF1]]) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -207,7 +221,7 @@ subroutine acc_serial_loop a(i) = b(i) END DO -! CHECK: acc.serial { +! CHECK: acc.serial {{.*}} { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -220,7 +234,7 @@ subroutine acc_serial_loop END DO ! CHECK: %[[SELF2:.*]] = fir.convert %[[DECLIFCONDITION]]#1 : (!fir.ref<!fir.logical<4>>) -> i1 -! CHECK: acc.serial self(%[[SELF2]]) { +! CHECK: acc.serial {{.*}} self(%[[SELF2]]) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -234,7 +248,7 @@ subroutine acc_serial_loop ! CHECK: %[[COPYIN_A:.*]] = acc.copyin varPtr(%[[DECLA]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {dataClause = #acc<data_clause acc_copy>, name = "a"} ! CHECK: %[[COPYIN_B:.*]] = acc.copyin varPtr(%[[DECLB]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {dataClause = #acc<data_clause acc_copy>, name = "b"} -! CHECK: acc.serial dataOperands(%[[COPYIN_A]], %[[COPYIN_B]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { +! CHECK: acc.serial {{.*}} dataOperands(%[[COPYIN_A]], %[[COPYIN_B]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -250,7 +264,7 @@ subroutine acc_serial_loop ! CHECK: %[[COPYIN_A:.*]] = acc.copyin varPtr(%[[DECLA]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {dataClause = #acc<data_clause acc_copy>, name = "a"} ! CHECK: %[[COPYIN_B:.*]] = acc.copyin varPtr(%[[DECLB]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {dataClause = #acc<data_clause acc_copy>, name = "b"} -! CHECK: acc.serial dataOperands(%[[COPYIN_A]], %[[COPYIN_B]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { +! CHECK: acc.serial {{.*}} dataOperands(%[[COPYIN_A]], %[[COPYIN_B]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -266,7 +280,7 @@ subroutine acc_serial_loop ! CHECK: %[[COPYIN_A:.*]] = acc.copyin varPtr(%[[DECLA]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {name = "a"} ! CHECK: %[[COPYIN_B:.*]] = acc.copyin varPtr(%[[DECLB]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {dataClause = #acc<data_clause acc_copyin_readonly>, name = "b"} -! CHECK: acc.serial dataOperands(%[[COPYIN_A]], %[[COPYIN_B]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { +! CHECK: acc.serial {{.*}} dataOperands(%[[COPYIN_A]], %[[COPYIN_B]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -280,7 +294,7 @@ subroutine acc_serial_loop ! CHECK: %[[CREATE_A:.*]] = acc.create varPtr(%[[DECLA]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {dataClause = #acc<data_clause acc_copyout>, name = "a"} ! CHECK: %[[CREATE_B:.*]] = acc.create varPtr(%[[DECLB]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {dataClause = #acc<data_clause acc_copyout>, name = "b"} -! CHECK: acc.serial dataOperands(%[[CREATE_A]], %[[CREATE_B]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { +! CHECK: acc.serial {{.*}} dataOperands(%[[CREATE_A]], %[[CREATE_B]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -296,7 +310,7 @@ subroutine acc_serial_loop ! CHECK: %[[CREATE_B:.*]] = acc.create varPtr(%[[DECLB]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {name = "b"} ! CHECK: %[[CREATE_A:.*]] = acc.create varPtr(%[[DECLA]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {dataClause = #acc<data_clause acc_create_zero>, name = "a"} -! CHECK: acc.serial dataOperands(%[[CREATE_B]], %[[CREATE_A]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { +! CHECK: acc.serial {{.*}} dataOperands(%[[CREATE_B]], %[[CREATE_A]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -312,7 +326,7 @@ subroutine acc_serial_loop ! CHECK: %[[NOCREATE_A:.*]] = acc.nocreate varPtr(%[[DECLA]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {name = "a"} ! CHECK: %[[NOCREATE_B:.*]] = acc.nocreate varPtr(%[[DECLB]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {name = "b"} -! CHECK: acc.serial dataOperands(%[[NOCREATE_A]], %[[NOCREATE_B]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { +! CHECK: acc.serial {{.*}} dataOperands(%[[NOCREATE_A]], %[[NOCREATE_B]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -326,7 +340,7 @@ subroutine acc_serial_loop ! CHECK: %[[PRESENT_A:.*]] = acc.present varPtr(%[[DECLA]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {name = "a"} ! CHECK: %[[PRESENT_B:.*]] = acc.present varPtr(%[[DECLB]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {name = "b"} -! CHECK: acc.serial dataOperands(%[[PRESENT_A]], %[[PRESENT_B]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { +! CHECK: acc.serial {{.*}} dataOperands(%[[PRESENT_A]], %[[PRESENT_B]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -340,7 +354,7 @@ subroutine acc_serial_loop ! CHECK: %[[DEVICEPTR_A:.*]] = acc.deviceptr varPtr(%[[DECLA]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {name = "a"} ! CHECK: %[[DEVICEPTR_B:.*]] = acc.deviceptr varPtr(%[[DECLB]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {name = "b"} -! CHECK: acc.serial dataOperands(%[[DEVICEPTR_A]], %[[DEVICEPTR_B]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { +! CHECK: acc.serial {{.*}} dataOperands(%[[DEVICEPTR_A]], %[[DEVICEPTR_B]] : !fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -358,7 +372,7 @@ subroutine acc_serial_loop ! CHECK: %[[BOX_G:.*]] = fir.load %[[DECLG]]#0 : !fir.ref<!fir.box<!fir.ptr<f32>>> ! CHECK: %[[BOX_ADDR_G:.*]] = fir.box_addr %[[BOX_G]] : (!fir.box<!fir.ptr<f32>>) -> !fir.ptr<f32> ! CHECK: %[[ATTACH_G:.*]] = acc.attach varPtr(%[[BOX_ADDR_G]] : !fir.ptr<f32>) -> !fir.ptr<f32> {name = "g"} -! CHECK: acc.serial dataOperands(%[[ATTACH_F]], %[[ATTACH_G]] : !fir.ptr<f32>, !fir.ptr<f32>) { +! CHECK: acc.serial {{.*}} dataOperands(%[[ATTACH_F]], %[[ATTACH_G]] : !fir.ptr<f32>, !fir.ptr<f32>) { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -371,9 +385,9 @@ subroutine acc_serial_loop END DO ! CHECK: %[[ACC_FPRIVATE_B:.*]] = acc.firstprivate varPtr(%[[DECLB]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {name = "b"} -! CHECK: acc.serial firstprivate(@firstprivatization_section_ext10_ref_10xf32 -> %[[ACC_FPRIVATE_B]] : !fir.ref<!fir.array<10xf32>>) { +! CHECK: acc.serial {{.*}} firstprivate(@firstprivatization_section_ext10_ref_10xf32 -> %[[ACC_FPRIVATE_B]] : !fir.ref<!fir.array<10xf32>>) { ! CHECK: %[[ACC_PRIVATE_A:.*]] = acc.private varPtr(%[[DECLA]]#0 : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {name = "a"} -! CHECK: acc.loop private({{.*}}@privatization_ref_10xf32 -> %[[ACC_PRIVATE_A]] : !fir.ref<!fir.array<10xf32>>) +! CHECK: acc.loop {{.*}} private({{.*}}@privatization_ref_10xf32 -> %[[ACC_PRIVATE_A]] : !fir.ref<!fir.array<10xf32>>) ! CHECK-NOT: fir.do_loop ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -385,7 +399,7 @@ subroutine acc_serial_loop a(i) = b(i) END DO -! CHECK: acc.serial { +! CHECK: acc.serial {{.*}} { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>, seq = [#acc.device_type<none>]} @@ -397,7 +411,7 @@ subroutine acc_serial_loop a(i) = b(i) END DO -! CHECK: acc.serial { +! CHECK: acc.serial {{.*}} { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: } attributes {auto_ = [#acc.device_type<none>], inclusiveUpperbound = array<i1: true>} @@ -409,7 +423,7 @@ subroutine acc_serial_loop a(i) = b(i) END DO -! CHECK: acc.serial { +! CHECK: acc.serial {{.*}} { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>, independent = [#acc.device_type<none>]} @@ -421,8 +435,8 @@ subroutine acc_serial_loop a(i) = b(i) END DO -! CHECK: acc.serial { -! CHECK: acc.loop gang {{.*}} { +! CHECK: acc.serial {{.*}} { +! CHECK: acc.loop {{.*}} gang {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>}{{$}} ! CHECK: acc.yield @@ -433,9 +447,9 @@ subroutine acc_serial_loop a(i) = b(i) END DO -! CHECK: acc.serial { +! CHECK: acc.serial {{.*}} { ! CHECK: [[GANGNUM1:%.*]] = arith.constant 8 : i32 -! CHECK-NEXT: acc.loop gang({num=[[GANGNUM1]] : i32}) {{.*}} { +! CHECK-NEXT: acc.loop {{.*}} gang({num=[[GANGNUM1]] : i32}) {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} ! CHECK: acc.yield @@ -446,9 +460,9 @@ subroutine acc_serial_loop a(i) = b(i) END DO -! CHECK: acc.serial { +! CHECK: acc.serial {{.*}} { ! CHECK: [[GANGNUM2:%.*]] = fir.load %{{.*}} : !fir.ref<i32> -! CHECK-NEXT: acc.loop gang({num=[[GANGNUM2]] : i32}) {{.*}} { +! CHECK-NEXT: acc.loop {{.*}} gang({num=[[GANGNUM2]] : i32}) {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} ! CHECK: acc.yield @@ -459,8 +473,8 @@ subroutine acc_serial_loop a(i) = b(i) END DO -! CHECK: acc.serial { -! CHECK: acc.loop gang({num=%{{.*}} : i32, static=%{{.*}} : i32}) {{.*}} { +! CHECK: acc.serial {{.*}} { +! CHECK: acc.loop {{.*}} gang({num=%{{.*}} : i32, static=%{{.*}} : i32}) {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} ! CHECK: acc.yield @@ -470,8 +484,9 @@ subroutine acc_serial_loop DO i = 1, n a(i) = b(i) END DO -! CHECK: acc.serial { -! CHECK: acc.loop vector {{.*}} { + +! CHECK: acc.serial {{.*}} { +! CHECK: acc.loop {{.*}} vector {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>}{{$}} ! CHECK: acc.yield @@ -482,9 +497,9 @@ subroutine acc_serial_loop a(i) = b(i) END DO -! CHECK: acc.serial { +! CHECK: acc.serial {{.*}} { ! CHECK: [[CONSTANT128:%.*]] = arith.constant 128 : i32 -! CHECK: acc.loop vector([[CONSTANT128]] : i32) {{.*}} { +! CHECK: acc.loop {{.*}} vector([[CONSTANT128]] : i32) {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} ! CHECK: acc.yield @@ -495,9 +510,9 @@ subroutine acc_serial_loop a(i) = b(i) END DO -! CHECK: acc.serial { +! CHECK: acc.serial {{.*}} { ! CHECK: [[VECTORLENGTH:%.*]] = fir.load %{{.*}} : !fir.ref<i32> -! CHECK: acc.loop vector([[VECTORLENGTH]] : i32) {{.*}} { +! CHECK: acc.loop {{.*}} vector([[VECTORLENGTH]] : i32) {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} ! CHECK: acc.yield @@ -508,8 +523,8 @@ subroutine acc_serial_loop a(i) = b(i) END DO -! CHECK: acc.serial { -! CHECK: acc.loop worker {{.*}} { +! CHECK: acc.serial {{.*}} { +! CHECK: acc.loop {{.*}} worker {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>}{{$}} ! CHECK: acc.yield @@ -520,9 +535,9 @@ subroutine acc_serial_loop a(i) = b(i) END DO -! CHECK: acc.serial { +! CHECK: acc.serial {{.*}} { ! CHECK: [[WORKER128:%.*]] = arith.constant 128 : i32 -! CHECK: acc.loop worker([[WORKER128]] : i32) {{.*}} { +! CHECK: acc.loop {{.*}} worker([[WORKER128]] : i32) {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} ! CHECK: acc.yield @@ -535,7 +550,7 @@ subroutine acc_serial_loop END DO END DO -! CHECK: acc.serial { +! CHECK: acc.serial {{.*}} { ! CHECK: acc.loop {{.*}} { ! CHECK-NOT: fir.do_loop ! CHECK: acc.yield @@ -551,7 +566,7 @@ subroutine acc_serial_loop END DO END DO -! CHECK: acc.serial { +! CHECK: acc.serial {{.*}} { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.loop {{.*}} { ! CHECK: acc.yield @@ -566,7 +581,7 @@ subroutine acc_serial_loop a(i) = b(i) END DO -! CHECK: acc.serial { +! CHECK: acc.serial {{.*}} { ! CHECK: [[TILESIZE:%.*]] = arith.constant 2 : i32 ! CHECK: acc.loop {{.*}} tile({[[TILESIZE]] : i32}) {{.*}} { ! CHECK: acc.yield @@ -579,7 +594,7 @@ subroutine acc_serial_loop a(i) = b(i) END DO -! CHECK: acc.serial { +! CHECK: acc.serial {{.*}} { ! CHECK: [[TILESIZEM1:%.*]] = arith.constant -1 : i32 ! CHECK: acc.loop {{.*}} tile({[[TILESIZEM1]] : i32}) {{.*}} { ! CHECK: acc.yield @@ -594,7 +609,7 @@ subroutine acc_serial_loop END DO END DO -! CHECK: acc.serial { +! CHECK: acc.serial {{.*}} { ! CHECK: [[TILESIZE1:%.*]] = arith.constant 2 : i32 ! CHECK: [[TILESIZE2:%.*]] = arith.constant 2 : i32 ! CHECK: acc.loop {{.*}} tile({[[TILESIZE1]] : i32, [[TILESIZE2]] : i32}) {{.*}} { @@ -608,7 +623,7 @@ subroutine acc_serial_loop a(i) = b(i) END DO -! CHECK: acc.serial { +! CHECK: acc.serial {{.*}} { ! CHECK: acc.loop {{.*}} tile({%{{.*}} : i32}) {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -622,7 +637,7 @@ subroutine acc_serial_loop END DO END DO -! CHECK: acc.serial { +! CHECK: acc.serial {{.*}} { ! CHECK: acc.loop {{.*}} tile({%{{.*}} : i32, %{{.*}} : i32}) {{.*}} { ! CHECK: acc.yield ! CHECK-NEXT: }{{$}} @@ -637,7 +652,7 @@ subroutine acc_serial_loop ! CHECK: %[[COPYINREDR:.*]] = acc.copyin varPtr(%{{.*}} : !fir.ref<f32>) -> !fir.ref<f32> {dataClause = #acc<data_clause acc_reduction>, implicit = true, name = "reduction_r"} ! CHECK: %[[COPYINREDI:.*]] = acc.copyin varPtr(%{{.*}} : !fir.ref<i32>) -> !fir.ref<i32> {dataClause = #acc<data_clause acc_reduction>, implicit = true, name = "reduction_i"} -! CHECK: acc.serial dataOperands(%[[COPYINREDR]], %[[COPYINREDI]] : !fir.ref<f32>, !fir.ref<i32>) { +! CHECK: acc.serial {{.*}} dataOperands(%[[COPYINREDR]], %[[COPYINREDI]] : !fir.ref<f32>, !fir.ref<i32>) { ! CHECK: acc.loop {{.*}} reduction(@reduction_add_ref_f32 -> %{{.*}} : !fir.ref<f32>, @reduction_mul_ref_i32 -> %{{.*}} : !fir.ref<i32>) ! CHECK-NOT: fir.do_loop ! CHECK: acc.yield |