Skip to content

Commit 669fe43

Browse files
klauslerEthanLuisMcDonough
authored andcommitted
[flang][runtime] Distinguish VALUE from non-VALUE operations in REDUCE (llvm#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 1029efb commit 669fe43

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)