Skip to content

Commit a0435d0

Browse files
committed
Make sure collapse is progagated correctly on the host side.
1 parent 71ed212 commit a0435d0

File tree

4 files changed

+11
-22
lines changed

4 files changed

+11
-22
lines changed

flang/lib/Lower/OpenMP/ClauseProcessor.cpp

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -271,24 +271,16 @@ bool ClauseProcessor::processCancelDirectiveName(
271271
return true;
272272
}
273273

274-
bool ClauseProcessor::processLoopNests(
275-
mlir::Location currentLocation, lower::pft::Evaluation &eval,
276-
mlir::omp::LoopRelatedClauseOps &result,
277-
llvm::SmallVectorImpl<const semantics::Symbol *> &iv) const {
278-
int64_t numCollapse = collectLoopRelatedInfo(converter, currentLocation, eval,
279-
clauses, result, iv);
280-
return numCollapse > 1;
281-
}
282-
283274
bool ClauseProcessor::processCollapse(
284275
mlir::Location currentLocation, lower::pft::Evaluation &eval,
285-
mlir::omp::LoopNestOperands &result,
276+
mlir::omp::LoopRelatedClauseOps &loopResult,
277+
mlir::omp::CollapseClauseOps &collapseResult,
286278
llvm::SmallVectorImpl<const semantics::Symbol *> &iv) const {
287279

288280
int64_t numCollapse = collectLoopRelatedInfo(converter, currentLocation, eval,
289-
clauses, result, iv);
281+
clauses, loopResult, iv);
290282
fir::FirOpBuilder &firOpBuilder = converter.getFirOpBuilder();
291-
result.collapseNumLoops = firOpBuilder.getI64IntegerAttr(numCollapse);
283+
collapseResult.collapseNumLoops = firOpBuilder.getI64IntegerAttr(numCollapse);
292284
return numCollapse > 1;
293285
}
294286

flang/lib/Lower/OpenMP/ClauseProcessor.h

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,9 @@ class ClauseProcessor {
6363
mlir::omp::CancelDirectiveNameClauseOps &result) const;
6464
bool
6565
processCollapse(mlir::Location currentLocation, lower::pft::Evaluation &eval,
66-
mlir::omp::LoopNestOperands &result,
66+
mlir::omp::LoopRelatedClauseOps &loopResult,
67+
mlir::omp::CollapseClauseOps &collapseResult,
6768
llvm::SmallVectorImpl<const semantics::Symbol *> &iv) const;
68-
bool
69-
processLoopNests(mlir::Location currentLocation, lower::pft::Evaluation &eval,
70-
mlir::omp::LoopRelatedClauseOps &result,
71-
llvm::SmallVectorImpl<const semantics::Symbol *> &iv) const;
7269
bool processDevice(lower::StatementContext &stmtCtx,
7370
mlir::omp::DeviceClauseOps &result) const;
7471
bool processDeviceType(mlir::omp::DeviceTypeClauseOps &result) const;

flang/lib/Lower/OpenMP/OpenMP.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -504,7 +504,7 @@ static void processHostEvalClauses(lower::AbstractConverter &converter,
504504
[[fallthrough]];
505505
case OMPD_distribute:
506506
case OMPD_distribute_simd:
507-
cp.processLoopNests(loc, eval, hostInfo->ops, hostInfo->iv);
507+
cp.processCollapse(loc, eval, hostInfo->ops, hostInfo->ops, hostInfo->iv);
508508
break;
509509

510510
case OMPD_teams:
@@ -523,7 +523,7 @@ static void processHostEvalClauses(lower::AbstractConverter &converter,
523523
[[fallthrough]];
524524
case OMPD_target_teams_distribute:
525525
case OMPD_target_teams_distribute_simd:
526-
cp.processLoopNests(loc, eval, hostInfo->ops, hostInfo->iv);
526+
cp.processCollapse(loc, eval, hostInfo->ops, hostInfo->ops, hostInfo->iv);
527527
cp.processNumTeams(stmtCtx, hostInfo->ops);
528528
break;
529529

@@ -534,7 +534,7 @@ static void processHostEvalClauses(lower::AbstractConverter &converter,
534534
cp.processNumTeams(stmtCtx, hostInfo->ops);
535535
[[fallthrough]];
536536
case OMPD_loop:
537-
cp.processLoopNests(loc, eval, hostInfo->ops, hostInfo->iv);
537+
cp.processCollapse(loc, eval, hostInfo->ops, hostInfo->ops, hostInfo->iv);
538538
break;
539539

540540
case OMPD_teams_workdistribute:
@@ -1570,7 +1570,7 @@ genLoopNestClauses(lower::AbstractConverter &converter,
15701570

15711571
HostEvalInfo *hostEvalInfo = getHostEvalInfoStackTop(converter);
15721572
if (!hostEvalInfo || !hostEvalInfo->apply(clauseOps, iv))
1573-
cp.processCollapse(loc, eval, clauseOps, iv);
1573+
cp.processCollapse(loc, eval, clauseOps, clauseOps, iv);
15741574

15751575
clauseOps.loopInclusive = converter.getFirOpBuilder().getUnitAttr();
15761576
cp.processTileSizes(eval, clauseOps);

mlir/include/mlir/Dialect/OpenMP/OpenMPClauseOperands.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ struct DeviceTypeClauseOps {
4040
/// Clauses that correspond to operations other than omp.target, but might have
4141
/// to be evaluated outside of a parent target region.
4242
using HostEvaluatedOperands =
43-
detail::Clauses<LoopRelatedClauseOps, NumTeamsClauseOps,
43+
detail::Clauses<CollapseClauseOps, LoopRelatedClauseOps, NumTeamsClauseOps,
4444
NumThreadsClauseOps, ThreadLimitClauseOps>;
4545

4646
// TODO: Add `indirect` clause.

0 commit comments

Comments
 (0)