[flang-commits] [flang] [flang] Skip processing reductions for unstructured `do concurrent` loops (PR #150188)
Kareem Ergawy via flang-commits
flang-commits at lists.llvm.org
Thu Aug 7 02:15:49 PDT 2025
https://github.com/ergawy updated https://github.com/llvm/llvm-project/pull/150188
>From e1379845c08a457c9cfd934a329d29595ee5efbe Mon Sep 17 00:00:00 2001
From: ergawy <kareem.ergawy at amd.com>
Date: Wed, 23 Jul 2025 03:31:10 -0500
Subject: [PATCH] [flang] Skip processing reductions for unstructured `do
concurrent` loops
Fixes #149563
When emitting unstructured `do concurrent` loops, reduction processing
should be skipped since we are not emitting `fir.do_concurrent` loop in
the first place.
---
flang/lib/Lower/Bridge.cpp | 3 +++
flang/test/Lower/do_loop_unstructured.f90 | 19 +++++++++++++++++++
2 files changed, 22 insertions(+)
diff --git a/flang/lib/Lower/Bridge.cpp b/flang/lib/Lower/Bridge.cpp
index 7f0907a5c029c..d16488d444546 100644
--- a/flang/lib/Lower/Bridge.cpp
+++ b/flang/lib/Lower/Bridge.cpp
@@ -2122,6 +2122,9 @@ class FirConverter : public Fortran::lower::AbstractConverter {
}
}
+ if (!doConcurrentLoopOp)
+ return;
+
llvm::SmallVector<bool> reduceVarByRef;
llvm::SmallVector<mlir::Attribute> reductionDeclSymbols;
llvm::SmallVector<mlir::Attribute> nestReduceAttrs;
diff --git a/flang/test/Lower/do_loop_unstructured.f90 b/flang/test/Lower/do_loop_unstructured.f90
index d8890b2d0926e..176ea5ccee129 100644
--- a/flang/test/Lower/do_loop_unstructured.f90
+++ b/flang/test/Lower/do_loop_unstructured.f90
@@ -232,3 +232,22 @@ subroutine nested_structured_in_unstructured()
! CHECK: cf.br ^[[HEADER]]
! CHECK: ^[[EXIT]]:
! CHECK: return
+
+subroutine unstructured_do_concurrent
+ logical :: success
+ do concurrent (i=1:10) local(success)
+ error stop "fail"
+ enddo
+end
+! CHECK-LABEL: func.func @_QPunstructured_do_concurrent
+! CHECK: %[[ITER_VAR:.*]] = fir.alloca i32
+
+! CHECK: ^[[HEADER]]:
+! CHECK: %{{.*}} = fir.load %[[ITER_VAR]] : !fir.ref<i32>
+! CHECK: cf.cond_br %{{.*}}, ^[[BODY:.*]], ^[[EXIT:.*]]
+
+! CHECK: ^[[BODY]]:
+! CHECK-NEXT: %{{.*}} = fir.alloca !fir.logical<4> {bindc_name = "success", {{.*}}}
+
+! CHECK: ^[[EXIT]]:
+! CHECK-NEXT: return
More information about the flang-commits
mailing list