9#ifndef FORTRAN_OPTIMIZER_BUILDER_RUNTIME_COARRAY_H
10#define FORTRAN_OPTIMIZER_BUILDER_RUNTIME_COARRAY_H
12#include "flang/Lower/AbstractConverter.h"
13#include "flang/Optimizer/Support/InternalNames.h"
14#include "mlir/Dialect/Func/IR/FuncOps.h"
21namespace fir::runtime {
25#define PRIF_FUNCTYPE(...) \
26 mlir::FunctionType::get(builder.getContext(), {__VA_ARGS__}, \
30#define PRIFNAME_SUB(fmt) \
32 std::ostringstream oss; \
33 oss << "prif_" << fmt; \
34 return fir::NameUniquer::doProcedure({"prif"}, {}, oss.str()); \
37#define PRIF_STAT_TYPE builder.getRefType(builder.getI32Type())
38#define PRIF_ERRMSG_TYPE \
39 fir::BoxType::get(fir::CharacterType::get(builder.getContext(), 1, \
40 fir::CharacterType::unknownLen()))
43mlir::Value genInitCoarray(fir::FirOpBuilder &builder, mlir::Location loc);
46mlir::Value getNumImages(fir::FirOpBuilder &builder, mlir::Location loc);
50mlir::Value getNumImagesWithTeam(fir::FirOpBuilder &builder, mlir::Location loc,
54mlir::Value getThisImage(fir::FirOpBuilder &builder, mlir::Location loc,
55 mlir::Value team = {});
58void genCoBroadcast(fir::FirOpBuilder &builder, mlir::Location loc,
59 mlir::Value A, mlir::Value sourceImage, mlir::Value stat,
63void genCoMax(fir::FirOpBuilder &builder, mlir::Location loc, mlir::Value A,
64 mlir::Value resultImage, mlir::Value stat, mlir::Value errmsg);
67void genCoMin(fir::FirOpBuilder &builder, mlir::Location loc, mlir::Value A,
68 mlir::Value resultImage, mlir::Value stat, mlir::Value errmsg);
71void genCoSum(fir::FirOpBuilder &builder, mlir::Location loc, mlir::Value A,
72 mlir::Value resultImage, mlir::Value stat, mlir::Value errmsg);
75void genSyncAllStatement(fir::FirOpBuilder &builder, mlir::Location loc,
76 mlir::Value stat, mlir::Value errmsg);
78void genSyncMemoryStatement(fir::FirOpBuilder &builder, mlir::Location loc,
79 mlir::Value stat, mlir::Value errmsg);
81void genSyncImagesStatement(fir::FirOpBuilder &builder, mlir::Location loc,
82 mlir::Value imageSet, mlir::Value stat,
Definition BoxValue.h:478
Definition FIRBuilder.h:55
Definition AbstractConverter.h:34