[flang-commits] [flang] [flang][OpenMP] Implement collapse for imperfectly nested loops (PR #202435)
Caroline Newcombe via flang-commits
flang-commits at lists.llvm.org
Tue Jun 16 08:55:24 PDT 2026
================
@@ -678,6 +679,145 @@ static void genNestedEvaluations(lower::AbstractConverter &converter,
converter.genEval(e);
}
+/// Emit the body of a collapsed loop nest, including any intervening code
+/// from imperfect nesting at intermediate levels (CLN relaxation, applied
+/// retroactively for all OMP versions).
+///
+/// Because omp.loop_nest places its entire body at the innermost nesting
+/// level, intervening code must be guarded so that it only executes on the
+/// iterations where the corresponding inner induction variables are at their
+/// initial (for intervening code before nested loop) or final (for intervening
+/// code after nested loop) values.
+///
+/// \param [in] converter - PFT to MLIR conversion interface.
+/// \param [in] outerEval - the evaluation containing the outermost loop
+/// (typically the OpenMP construct evaluation).
+/// \param [in] collapseValue - number of loops being collapsed (>= 1).
+static void genCollapsedLoopNestBody(lower::AbstractConverter &converter,
+ lower::pft::Evaluation &outerEval,
+ int collapseValue) {
+ assert(collapseValue >= 1);
+ if (collapseValue == 1) {
+ genNestedEvaluations(converter, outerEval, /*collapseValue=*/1);
+ return;
+ }
+
+ fir::FirOpBuilder &firOpBuilder{converter.getFirOpBuilder()};
----------------
cenewcombe wrote:
I was off for a few days and just got this fixed ✔️
https://github.com/llvm/llvm-project/pull/202435
More information about the flang-commits
mailing list