Skip to content

Commit f8fc883

Browse files
authored
[flang][runtime] Distinguish VALUE from non-VALUE operations in REDUCE (#95297)
Accommodate operations with VALUE dummy arguments in the runtime support for the REDUCE intrinsic function by splitting most entry points into Reduce...Ref and Reduce...Value variants. Further work will be needed in lowering to call the ...Value entry points.
1 parent 4b493e3 commit f8fc883

File tree

6 files changed

+906
-363
lines changed

6 files changed

+906
-363
lines changed

flang/include/flang/Optimizer/Builder/Runtime/RTBuilder.h

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,10 @@ namespace fir::runtime {
5353
using TypeBuilderFunc = mlir::Type (*)(mlir::MLIRContext *);
5454
using FuncTypeBuilderFunc = mlir::FunctionType (*)(mlir::MLIRContext *);
5555

56-
#define REDUCTION_OPERATION_MODEL(T) \
56+
#define REDUCTION_REF_OPERATION_MODEL(T) \
5757
template <> \
5858
constexpr TypeBuilderFunc \
59-
getModel<Fortran::runtime::ReductionOperation<T>>() { \
59+
getModel<Fortran::runtime::ReferenceReductionOperation<T>>() { \
6060
return [](mlir::MLIRContext *context) -> mlir::Type { \
6161
TypeBuilderFunc f{getModel<T>()}; \
6262
auto refTy = fir::ReferenceType::get(f(context)); \
@@ -480,18 +480,18 @@ constexpr TypeBuilderFunc getModel<void>() {
480480
};
481481
}
482482

483-
REDUCTION_OPERATION_MODEL(std::int8_t)
484-
REDUCTION_OPERATION_MODEL(std::int16_t)
485-
REDUCTION_OPERATION_MODEL(std::int32_t)
486-
REDUCTION_OPERATION_MODEL(std::int64_t)
487-
REDUCTION_OPERATION_MODEL(Fortran::common::int128_t)
483+
REDUCTION_REF_OPERATION_MODEL(std::int8_t)
484+
REDUCTION_REF_OPERATION_MODEL(std::int16_t)
485+
REDUCTION_REF_OPERATION_MODEL(std::int32_t)
486+
REDUCTION_REF_OPERATION_MODEL(std::int64_t)
487+
REDUCTION_REF_OPERATION_MODEL(Fortran::common::int128_t)
488488

489-
REDUCTION_OPERATION_MODEL(float)
490-
REDUCTION_OPERATION_MODEL(double)
491-
REDUCTION_OPERATION_MODEL(long double)
489+
REDUCTION_REF_OPERATION_MODEL(float)
490+
REDUCTION_REF_OPERATION_MODEL(double)
491+
REDUCTION_REF_OPERATION_MODEL(long double)
492492

493-
REDUCTION_OPERATION_MODEL(std::complex<float>)
494-
REDUCTION_OPERATION_MODEL(std::complex<double>)
493+
REDUCTION_REF_OPERATION_MODEL(std::complex<float>)
494+
REDUCTION_REF_OPERATION_MODEL(std::complex<double>)
495495

496496
REDUCTION_CHAR_OPERATION_MODEL(char)
497497
REDUCTION_CHAR_OPERATION_MODEL(char16_t)

0 commit comments

Comments
 (0)