[flang-commits] [flang] [flang] Correct MIN/MAX bug with DO CONCURRENT and REDUCE (PR #196708)
via flang-commits
flang-commits at lists.llvm.org
Sat May 9 03:25:08 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-flang-fir-hlfir
Author: Michael Klemm (mjklemm)
<details>
<summary>Changes</summary>
Flang used a the same reduction name for MIN/MAX with meant that if both happened, the compiler would use the first reduction operation it saw for both MIN/MAX. This is now corrected.
---
Full diff: https://github.com/llvm/llvm-project/pull/196708.diff
2 Files Affected:
- (modified) flang/lib/Lower/Support/ReductionProcessor.cpp (+16-2)
- (modified) flang/test/Lower/loops3.f90 (+1-1)
``````````diff
diff --git a/flang/lib/Lower/Support/ReductionProcessor.cpp b/flang/lib/Lower/Support/ReductionProcessor.cpp
index d5387f7a59118..b3a27736d1616 100644
--- a/flang/lib/Lower/Support/ReductionProcessor.cpp
+++ b/flang/lib/Lower/Support/ReductionProcessor.cpp
@@ -194,9 +194,23 @@ ReductionProcessor::getReductionName(ReductionIdentifier redId,
case ReductionIdentifier::NEQV:
reductionName = "neqv_reduction";
break;
- default:
- reductionName = "other_reduction";
+ case ReductionIdentifier::MAX:
+ reductionName = "max_reduction";
+ break;
+ case ReductionIdentifier::MIN:
+ reductionName = "min_reduction";
+ break;
+ case ReductionIdentifier::IAND:
+ reductionName = "iand_reduction";
break;
+ case ReductionIdentifier::IOR:
+ reductionName = "ior_reduction";
+ break;
+ case ReductionIdentifier::IEOR:
+ reductionName = "ieor_reduction";
+ break;
+ default:
+ llvm_unreachable("unsupported reduction identifier");
}
return getReductionName(reductionName, kindMap, ty, isByRef);
diff --git a/flang/test/Lower/loops3.f90 b/flang/test/Lower/loops3.f90
index 5df3c4fd93703..9c295af66c510 100644
--- a/flang/test/Lower/loops3.f90
+++ b/flang/test/Lower/loops3.f90
@@ -12,7 +12,7 @@ subroutine loop_test
! CHECK: %[[M:.*]]:2 = hlfir.declare %{{.*}} {uniq_name = "_QFloop_testEm"}
! CHECK: %[[SUM:.*]]:2 = hlfir.declare %{{.*}} {uniq_name = "_QFloop_testEsum"}
- ! CHECK: fir.do_concurrent.loop ({{.*}}) = ({{.*}}) to ({{.*}}) step ({{.*}}) local(@_QFloop_testEtmp_private_i32 %{{.*}} -> %{{.*}} : !fir.ref<i32>) reduce(@add_reduction_i32 #fir.reduce_attr<add> %[[SUM]]#0 -> %{{.*}}, @other_reduction_f32 #fir.reduce_attr<max> %[[M]]#0 -> %{{.*}} : !fir.ref<i32>, !fir.ref<f32>) {
+ ! CHECK: fir.do_concurrent.loop ({{.*}}) = ({{.*}}) to ({{.*}}) step ({{.*}}) local(@_QFloop_testEtmp_private_i32 %{{.*}} -> %{{.*}} : !fir.ref<i32>) reduce(@add_reduction_i32 #fir.reduce_attr<add> %[[SUM]]#0 -> %{{.*}}, @max_reduction_f32 #fir.reduce_attr<max> %[[M]]#0 -> %{{.*}} : !fir.ref<i32>, !fir.ref<f32>) {
! CHECK: %[[TMP:.*]]:2 = hlfir.declare %{{.*}} {uniq_name = "_QFloop_testEtmp"}
! CHECK: %[[SUM_INNER:.*]]:2 = hlfir.declare %{{.*}} {uniq_name = "_QFloop_testEsum"}
! CHECK: %[[M_INNER:.*]]:2 = hlfir.declare %{{.*}} {uniq_name = "_QFloop_testEm"}
``````````
</details>
https://github.com/llvm/llvm-project/pull/196708
More information about the flang-commits
mailing list