https://github.com/ergawy created 
https://github.com/llvm/llvm-project/pull/150188

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.

>From 72e6be536d6d71d63a4db35aec85920e4e3cb882 Mon Sep 17 00:00:00 2001
From: ergawy <kareem.erg...@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 13420f365919d..a6362b1e2f5ca 100644
--- a/flang/lib/Lower/Bridge.cpp
+++ b/flang/lib/Lower/Bridge.cpp
@@ -2115,6 +2115,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

_______________________________________________
llvm-branch-commits mailing list
llvm-branch-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

Reply via email to