FLANG
Fortran::lower::omp::ReductionProcessor Class Reference

Public Types

enum  ReductionIdentifier {
  ID , USER_DEF_OP , ADD , SUBTRACT ,
  MULTIPLY , AND , OR , EQV ,
  NEQV , MAX , MIN , IAND ,
  IOR , IEOR
}
using GenInitValueCBTy
using GenCombinerCBTy

Static Public Member Functions

static bool doReductionByRef (mlir::Type reductionType)
static bool doReductionByRef (mlir::Value reductionVar)
static ReductionIdentifier getReductionType (const omp::clause::ProcedureDesignator &pd)
static ReductionIdentifier getReductionType (omp::clause::DefinedOperator::IntrinsicOperator intrinsicOp)
static ReductionIdentifier getReductionType (const fir::ReduceOperationEnum &pd)
static bool supportedIntrinsicProcReduction (const omp::clause::ProcedureDesignator &pd)
static const semantics::SourceName getRealName (const semantics::Symbol *symbol)
static const semantics::SourceName getRealName (const omp::clause::ProcedureDesignator &pd)
static std::string getReductionName (llvm::StringRef name, const fir::KindMapping &kindMap, mlir::Type ty, bool isByRef)
static std::string getReductionName (ReductionIdentifier redId, const fir::KindMapping &kindMap, mlir::Type ty, bool isByRef)
static int getOperationIdentity (ReductionIdentifier redId, mlir::Location loc)
static mlir::Value getReductionInitValue (mlir::Location loc, mlir::Type type, ReductionIdentifier redId, fir::FirOpBuilder &builder)
template<typename FloatOp, typename IntegerOp>
static mlir::Value getReductionOperation (fir::FirOpBuilder &builder, mlir::Type type, mlir::Location loc, mlir::Value op1, mlir::Value op2)
template<typename FloatOp, typename IntegerOp, typename ComplexOp>
static mlir::Value getReductionOperation (fir::FirOpBuilder &builder, mlir::Type type, mlir::Location loc, mlir::Value op1, mlir::Value op2)
static mlir::Value createScalarCombiner (fir::FirOpBuilder &builder, mlir::Location loc, ReductionIdentifier redId, mlir::Type type, mlir::Value op1, mlir::Value op2)
template<typename DeclareRedType>
static DeclareRedType createDeclareReductionHelper (AbstractConverter &converter, llvm::StringRef reductionOpName, mlir::Type type, mlir::Location loc, bool isByRef, GenCombinerCBTy genCombinerCB, GenInitValueCBTy genInitValueCB)
template<typename OpType>
static OpType createDeclareReduction (AbstractConverter &builder, llvm::StringRef reductionOpName, const ReductionIdentifier redId, mlir::Type type, mlir::Location loc, bool isByRef)
template<typename OpType, typename RedOperatorListTy>
static bool processReductionArguments (mlir::Location currentLocation, lower::AbstractConverter &converter, const RedOperatorListTy &redOperatorList, llvm::SmallVectorImpl< mlir::Value > &reductionVars, llvm::SmallVectorImpl< bool > &reduceVarByRef, llvm::SmallVectorImpl< mlir::Attribute > &reductionDeclSymbols, const llvm::SmallVectorImpl< const semantics::Symbol * > &reductionSymbols)

Member Typedef Documentation

◆ GenCombinerCBTy

using Fortran::lower::omp::ReductionProcessor::GenCombinerCBTy
Initial value:
std::function<void(
fir::FirOpBuilder &builder, mlir::Location loc, mlir::Type type,
mlir::Value op1, mlir::Value op2, bool isByRef)>
Definition FIRBuilder.h:55

◆ GenInitValueCBTy

using Fortran::lower::omp::ReductionProcessor::GenInitValueCBTy
Initial value:
std::function<mlir::Value(fir::FirOpBuilder &builder, mlir::Location loc,
mlir::Type type, mlir::Value ompOrig)>

Member Function Documentation

◆ createDeclareReduction()

template<typename OpType>
OpType Fortran::lower::omp::ReductionProcessor::createDeclareReduction ( AbstractConverter & builder,
llvm::StringRef reductionOpName,
const ReductionIdentifier redId,
mlir::Type type,
mlir::Location loc,
bool isByRef )
static

Creates an OpenMP reduction declaration and inserts it into the provided symbol table. The declaration has a constant initializer with the neutral value initValue, and the reduction combiner carried over from reduce. TODO: add atomic region.

◆ createDeclareReductionHelper()

template<typename DeclareRedType>
DeclareRedType Fortran::lower::omp::ReductionProcessor::createDeclareReductionHelper ( AbstractConverter & converter,
llvm::StringRef reductionOpName,
mlir::Type type,
mlir::Location loc,
bool isByRef,
GenCombinerCBTy genCombinerCB,
GenInitValueCBTy genInitValueCB )
static

Creates an OpenMP reduction declaration and inserts it into the provided symbol table. The init and combiner regions are generated by the callback functions genCombinerCB and genInitValueCB.

◆ getOperationIdentity()

int Fortran::lower::omp::ReductionProcessor::getOperationIdentity ( ReductionIdentifier redId,
mlir::Location loc )
static

This function returns the identity value of the operator reductionOpName. For example: 0 + x = x, 1 * x = x

◆ processReductionArguments()

template<typename OpType, typename RedOperatorListTy>
bool Fortran::lower::omp::ReductionProcessor::processReductionArguments ( mlir::Location currentLocation,
lower::AbstractConverter & converter,
const RedOperatorListTy & redOperatorList,
llvm::SmallVectorImpl< mlir::Value > & reductionVars,
llvm::SmallVectorImpl< bool > & reduceVarByRef,
llvm::SmallVectorImpl< mlir::Attribute > & reductionDeclSymbols,
const llvm::SmallVectorImpl< const semantics::Symbol * > & reductionSymbols )
static

Creates a reduction declaration and associates it with an OpenMP block directive.


The documentation for this class was generated from the following files: