================
@@ -5389,6 +5406,14 @@ static mlir::omp::DistributeOp
genCompositeDistributeParallelDoSimd(
ConstructQueue::const_iterator doItem = std::next(parallelItem);
ConstructQueue::const_iterator simdItem = std::next(doItem);
+ // Evaluate DISTRIBUTE clauses before entering its source context and then
+ // PARALLEL, as in the explicit nesting.
+ mlir::omp::DistributeOperands distributeClauseOps;
+ genDistributeClauses(converter, semaCtx, stmtCtx, distributeItem->clauses,
+ loc, distributeClauseOps);
+ mlir::SaveStateStack<OpenMPContextFrame> distributeContext{
----------------
MattPD wrote:
Confirmed at 1aa333a: The fix works for `do simd`, `parallel do simd`, and
`teams distribute parallel do simd`.
`genCompositeDistributeSimd` still lowers the SIMD clauses of `distribute simd`
without a DISTRIBUTE frame. When `pred` has a `kind(cpu)` variant and a
`vendor(score(3))` variant, `teams distribute simd if(simd: pred(n))` selects
the vendor variant, while the explicit nest of the three constructs selects the
CPU variant. At the merge base, both forms select the vendor variant. Should
`genCompositeDistributeSimd` also enter DISTRIBUTE around its SIMD clauses?
https://github.com/llvm/llvm-project/pull/224431
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits