Skip to content

Commit

Permalink
[flang][runtime] Distinguish VALUE from non-VALUE operations in REDUCE (
Browse files Browse the repository at this point in the history
#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.
  • Loading branch information
klausler authored Jun 13, 2024
1 parent 4b493e3 commit f8fc883
Show file tree
Hide file tree
Showing 6 changed files with 906 additions and 363 deletions.
24 changes: 12 additions & 12 deletions flang/include/flang/Optimizer/Builder/Runtime/RTBuilder.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,10 +53,10 @@ namespace fir::runtime {
using TypeBuilderFunc = mlir::Type (*)(mlir::MLIRContext *);
using FuncTypeBuilderFunc = mlir::FunctionType (*)(mlir::MLIRContext *);

#define REDUCTION_OPERATION_MODEL(T) \
#define REDUCTION_REF_OPERATION_MODEL(T) \
template <> \
constexpr TypeBuilderFunc \
getModel<Fortran::runtime::ReductionOperation<T>>() { \
getModel<Fortran::runtime::ReferenceReductionOperation<T>>() { \
return [](mlir::MLIRContext *context) -> mlir::Type { \
TypeBuilderFunc f{getModel<T>()}; \
auto refTy = fir::ReferenceType::get(f(context)); \
Expand Down Expand Up @@ -480,18 +480,18 @@ constexpr TypeBuilderFunc getModel<void>() {
};
}

REDUCTION_OPERATION_MODEL(std::int8_t)
REDUCTION_OPERATION_MODEL(std::int16_t)
REDUCTION_OPERATION_MODEL(std::int32_t)
REDUCTION_OPERATION_MODEL(std::int64_t)
REDUCTION_OPERATION_MODEL(Fortran::common::int128_t)
REDUCTION_REF_OPERATION_MODEL(std::int8_t)
REDUCTION_REF_OPERATION_MODEL(std::int16_t)
REDUCTION_REF_OPERATION_MODEL(std::int32_t)
REDUCTION_REF_OPERATION_MODEL(std::int64_t)
REDUCTION_REF_OPERATION_MODEL(Fortran::common::int128_t)

REDUCTION_OPERATION_MODEL(float)
REDUCTION_OPERATION_MODEL(double)
REDUCTION_OPERATION_MODEL(long double)
REDUCTION_REF_OPERATION_MODEL(float)
REDUCTION_REF_OPERATION_MODEL(double)
REDUCTION_REF_OPERATION_MODEL(long double)

REDUCTION_OPERATION_MODEL(std::complex<float>)
REDUCTION_OPERATION_MODEL(std::complex<double>)
REDUCTION_REF_OPERATION_MODEL(std::complex<float>)
REDUCTION_REF_OPERATION_MODEL(std::complex<double>)

REDUCTION_CHAR_OPERATION_MODEL(char)
REDUCTION_CHAR_OPERATION_MODEL(char16_t)
Expand Down
Loading

0 comments on commit f8fc883

Please sign in to comment.