FLANG
Reduction.h
1//===-- Reduction.h -- generate calls to reduction runtime API --*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// The runtime routines generated in this file are generally storing the result
10// in a descriptor (represented as a `box` in FIR). Some function might
11// have a specialization where the value is returned as a scalar value, e.g.
12// `genAll` is a specialization of `genAllDescriptor`.
13//
14//===----------------------------------------------------------------------===//
15
16#ifndef FORTRAN_OPTIMIZER_BUILDER_RUNTIME_REDUCTION_H
17#define FORTRAN_OPTIMIZER_BUILDER_RUNTIME_REDUCTION_H
18
19#include "mlir/Dialect/Func/IR/FuncOps.h"
20
21namespace fir {
22class ExtendedValue;
23class FirOpBuilder;
24} // namespace fir
25
26namespace fir::runtime {
27
31void genAllDescriptor(fir::FirOpBuilder &builder, mlir::Location loc,
32 mlir::Value resultBox, mlir::Value maskBox,
33 mlir::Value dim);
34
38void genAnyDescriptor(fir::FirOpBuilder &builder, mlir::Location loc,
39 mlir::Value resultBox, mlir::Value maskBox,
40 mlir::Value dim);
41
45void genParityDescriptor(fir::FirOpBuilder &builder, mlir::Location loc,
46 mlir::Value resultBox, mlir::Value maskBox,
47 mlir::Value dim);
48
52mlir::Value genAll(fir::FirOpBuilder &builder, mlir::Location loc,
53 mlir::Value maskBox, mlir::Value dim);
54
58mlir::Value genAny(fir::FirOpBuilder &builder, mlir::Location loc,
59 mlir::Value maskBox, mlir::Value dim);
60
64mlir::Value genCount(fir::FirOpBuilder &builder, mlir::Location loc,
65 mlir::Value maskBox, mlir::Value dim);
66
69void genCountDim(fir::FirOpBuilder &builder, mlir::Location loc,
70 mlir::Value resultBox, mlir::Value maskBox, mlir::Value dim,
71 mlir::Value kind);
72
74mlir::Value genDotProduct(fir::FirOpBuilder &builder, mlir::Location loc,
75 mlir::Value vectorABox, mlir::Value vectorBBox,
76 mlir::Value resultBox);
77
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);
83
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,
89 mlir::Value back);
90
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);
96
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);
102
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);
108
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);
114
117mlir::Value genMaxval(fir::FirOpBuilder &builder, mlir::Location loc,
118 mlir::Value arrayBox, mlir::Value maskBox);
119
123void genMaxvalChar(fir::FirOpBuilder &builder, mlir::Location loc,
124 mlir::Value resultBox, mlir::Value arrayBox,
125 mlir::Value maskBox);
126
129void genMaxvalDim(fir::FirOpBuilder &builder, mlir::Location loc,
130 mlir::Value resultBox, mlir::Value arrayBox, mlir::Value dim,
131 mlir::Value maskBox);
132
135mlir::Value genMinval(fir::FirOpBuilder &builder, mlir::Location loc,
136 mlir::Value arrayBox, mlir::Value maskBox);
137
141void genMinvalChar(fir::FirOpBuilder &builder, mlir::Location loc,
142 mlir::Value resultBox, mlir::Value arrayBox,
143 mlir::Value maskBox);
144
147void genMinvalDim(fir::FirOpBuilder &builder, mlir::Location loc,
148 mlir::Value resultBox, mlir::Value arrayBox, mlir::Value dim,
149 mlir::Value maskBox);
150
153mlir::Value genNorm2(fir::FirOpBuilder &builder, mlir::Location loc,
154 mlir::Value arrayBox);
155
158void genNorm2Dim(fir::FirOpBuilder &builder, mlir::Location loc,
159 mlir::Value resultBox, mlir::Value arrayBox, mlir::Value dim);
160
164mlir::Value genParity(fir::FirOpBuilder &builder, mlir::Location loc,
165 mlir::Value maskBox, mlir::Value dim);
166
169mlir::Value genProduct(fir::FirOpBuilder &builder, mlir::Location loc,
170 mlir::Value arrayBox, mlir::Value maskBox,
171 mlir::Value resultBox);
172
175void genProductDim(fir::FirOpBuilder &builder, mlir::Location loc,
176 mlir::Value resultBox, mlir::Value arrayBox, mlir::Value dim,
177 mlir::Value maskBox);
178
181mlir::Value genSum(fir::FirOpBuilder &builder, mlir::Location loc,
182 mlir::Value arrayBox, mlir::Value maskBox,
183 mlir::Value resultBox);
184
187void genSumDim(fir::FirOpBuilder &builder, mlir::Location loc,
188 mlir::Value resultBox, mlir::Value arrayBox, mlir::Value dim,
189 mlir::Value maskBox);
190
193mlir::Value genIAll(fir::FirOpBuilder &builder, mlir::Location loc,
194 mlir::Value arrayBox, mlir::Value maskBox,
195 mlir::Value resultBox);
196
199void genIAllDim(fir::FirOpBuilder &builder, mlir::Location loc,
200 mlir::Value resultBox, mlir::Value arrayBox, mlir::Value dim,
201 mlir::Value maskBox);
202
205mlir::Value genIAny(fir::FirOpBuilder &builder, mlir::Location loc,
206 mlir::Value arrayBox, mlir::Value maskBox,
207 mlir::Value resultBox);
208
211void genIAnyDim(fir::FirOpBuilder &builder, mlir::Location loc,
212 mlir::Value resultBox, mlir::Value arrayBox, mlir::Value dim,
213 mlir::Value maskBox);
214
217mlir::Value genIParity(fir::FirOpBuilder &builder, mlir::Location loc,
218 mlir::Value arrayBox, mlir::Value maskBox,
219 mlir::Value resultBox);
220
223void genIParityDim(fir::FirOpBuilder &builder, mlir::Location loc,
224 mlir::Value resultBox, mlir::Value arrayBox, mlir::Value dim,
225 mlir::Value maskBox);
226
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,
233 bool argByRef);
234
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);
242
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);
249
250} // namespace fir::runtime
251
252#endif // FORTRAN_OPTIMIZER_BUILDER_RUNTIME_REDUCTION_H
Definition: FIRBuilder.h:55
Definition: AbstractConverter.h:31