16#ifndef FORTRAN_OPTIMIZER_BUILDER_RUNTIME_REDUCTION_H
17#define FORTRAN_OPTIMIZER_BUILDER_RUNTIME_REDUCTION_H
19#include "mlir/Dialect/Func/IR/FuncOps.h"
26namespace fir::runtime {
31void genAllDescriptor(fir::FirOpBuilder &builder, mlir::Location loc,
32 mlir::Value resultBox, mlir::Value maskBox,
38void genAnyDescriptor(fir::FirOpBuilder &builder, mlir::Location loc,
39 mlir::Value resultBox, mlir::Value maskBox,
45void genParityDescriptor(fir::FirOpBuilder &builder, mlir::Location loc,
46 mlir::Value resultBox, mlir::Value maskBox,
52mlir::Value genAll(fir::FirOpBuilder &builder, mlir::Location loc,
53 mlir::Value maskBox, mlir::Value dim);
58mlir::Value genAny(fir::FirOpBuilder &builder, mlir::Location loc,
59 mlir::Value maskBox, mlir::Value dim);
64mlir::Value genCount(fir::FirOpBuilder &builder, mlir::Location loc,
65 mlir::Value maskBox, mlir::Value dim);
69void genCountDim(fir::FirOpBuilder &builder, mlir::Location loc,
70 mlir::Value resultBox, mlir::Value maskBox, mlir::Value dim,
74mlir::Value genDotProduct(fir::FirOpBuilder &builder, mlir::Location loc,
75 mlir::Value vectorABox, mlir::Value vectorBBox,
76 mlir::Value resultBox);
80void genFindloc(fir::FirOpBuilder &builder, mlir::Location loc,
81 mlir::Value resultBox, mlir::Value arrayBox, mlir::Value val,
82 mlir::Value maskBox, mlir::Value kind, mlir::Value back);
86void genFindlocDim(fir::FirOpBuilder &builder, mlir::Location loc,
87 mlir::Value resultBox, mlir::Value arrayBox, mlir::Value val,
88 mlir::Value dim, mlir::Value maskBox, mlir::Value kind,
93void genMaxloc(fir::FirOpBuilder &builder, mlir::Location loc,
94 mlir::Value resultBox, mlir::Value arrayBox, mlir::Value maskBox,
95 mlir::Value kind, mlir::Value back);
99void genMaxlocDim(fir::FirOpBuilder &builder, mlir::Location loc,
100 mlir::Value resultBox, mlir::Value arrayBox, mlir::Value dim,
101 mlir::Value maskBox, mlir::Value kind, mlir::Value back);
105void genMinloc(fir::FirOpBuilder &builder, mlir::Location loc,
106 mlir::Value resultBox, mlir::Value arrayBox, mlir::Value maskBox,
107 mlir::Value kind, mlir::Value back);
111void genMinlocDim(fir::FirOpBuilder &builder, mlir::Location loc,
112 mlir::Value resultBox, mlir::Value arrayBox, mlir::Value dim,
113 mlir::Value maskBox, mlir::Value kind, mlir::Value back);
117mlir::Value genMaxval(fir::FirOpBuilder &builder, mlir::Location loc,
118 mlir::Value arrayBox, mlir::Value maskBox);
123void genMaxvalChar(fir::FirOpBuilder &builder, mlir::Location loc,
124 mlir::Value resultBox, mlir::Value arrayBox,
125 mlir::Value maskBox);
129void genMaxvalDim(fir::FirOpBuilder &builder, mlir::Location loc,
130 mlir::Value resultBox, mlir::Value arrayBox, mlir::Value dim,
131 mlir::Value maskBox);
135mlir::Value genMinval(fir::FirOpBuilder &builder, mlir::Location loc,
136 mlir::Value arrayBox, mlir::Value maskBox);
141void genMinvalChar(fir::FirOpBuilder &builder, mlir::Location loc,
142 mlir::Value resultBox, mlir::Value arrayBox,
143 mlir::Value maskBox);
147void genMinvalDim(fir::FirOpBuilder &builder, mlir::Location loc,
148 mlir::Value resultBox, mlir::Value arrayBox, mlir::Value dim,
149 mlir::Value maskBox);
153mlir::Value genNorm2(fir::FirOpBuilder &builder, mlir::Location loc,
154 mlir::Value arrayBox);
158void genNorm2Dim(fir::FirOpBuilder &builder, mlir::Location loc,
159 mlir::Value resultBox, mlir::Value arrayBox, mlir::Value dim);
164mlir::Value genParity(fir::FirOpBuilder &builder, mlir::Location loc,
165 mlir::Value maskBox, mlir::Value dim);
169mlir::Value genProduct(fir::FirOpBuilder &builder, mlir::Location loc,
170 mlir::Value arrayBox, mlir::Value maskBox,
171 mlir::Value resultBox);
175void genProductDim(fir::FirOpBuilder &builder, mlir::Location loc,
176 mlir::Value resultBox, mlir::Value arrayBox, mlir::Value dim,
177 mlir::Value maskBox);
181mlir::Value genSum(fir::FirOpBuilder &builder, mlir::Location loc,
182 mlir::Value arrayBox, mlir::Value maskBox,
183 mlir::Value resultBox);
187void genSumDim(fir::FirOpBuilder &builder, mlir::Location loc,
188 mlir::Value resultBox, mlir::Value arrayBox, mlir::Value dim,
189 mlir::Value maskBox);
193mlir::Value genIAll(fir::FirOpBuilder &builder, mlir::Location loc,
194 mlir::Value arrayBox, mlir::Value maskBox,
195 mlir::Value resultBox);
199void genIAllDim(fir::FirOpBuilder &builder, mlir::Location loc,
200 mlir::Value resultBox, mlir::Value arrayBox, mlir::Value dim,
201 mlir::Value maskBox);
205mlir::Value genIAny(fir::FirOpBuilder &builder, mlir::Location loc,
206 mlir::Value arrayBox, mlir::Value maskBox,
207 mlir::Value resultBox);
211void genIAnyDim(fir::FirOpBuilder &builder, mlir::Location loc,
212 mlir::Value resultBox, mlir::Value arrayBox, mlir::Value dim,
213 mlir::Value maskBox);
217mlir::Value genIParity(fir::FirOpBuilder &builder, mlir::Location loc,
218 mlir::Value arrayBox, mlir::Value maskBox,
219 mlir::Value resultBox);
223void genIParityDim(fir::FirOpBuilder &builder, mlir::Location loc,
224 mlir::Value resultBox, mlir::Value arrayBox, mlir::Value dim,
225 mlir::Value maskBox);
230void genReduce(fir::FirOpBuilder &builder, mlir::Location loc,
231 mlir::Value arrayBox, mlir::Value operation, mlir::Value maskBox,
232 mlir::Value identity, mlir::Value ordered, mlir::Value resultBox,
238mlir::Value genReduce(fir::FirOpBuilder &builder, mlir::Location loc,
239 mlir::Value arrayBox, mlir::Value operation,
240 mlir::Value maskBox, mlir::Value identity,
241 mlir::Value ordered,
bool argByRef);
245void genReduceDim(fir::FirOpBuilder &builder, mlir::Location loc,
246 mlir::Value arrayBox, mlir::Value operation, mlir::Value dim,
247 mlir::Value maskBox, mlir::Value identity,
248 mlir::Value ordered, mlir::Value resultBox,
bool argByRef);
Definition BoxValue.h:478
Definition FIRBuilder.h:55
Definition AbstractConverter.h:34