FLANG
DoLoopHelper.h
1//===-- DoLoopHelper.h -- gen fir.do_loop ops -------------------*- 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// Coding style: https://mlir.llvm.org/getting_started/DeveloperGuide/
10//
11//===----------------------------------------------------------------------===//
12
13#ifndef FORTRAN_OPTIMIZER_BUILDER_DOLOOPHELPER_H
14#define FORTRAN_OPTIMIZER_BUILDER_DOLOOPHELPER_H
15
16#include "flang/Optimizer/Builder/FIRBuilder.h"
17
18namespace fir::factory {
19
22public:
23 explicit DoLoopHelper(fir::FirOpBuilder &builder, mlir::Location loc)
24 : builder(builder), loc(loc) {}
25 DoLoopHelper(const DoLoopHelper &) = delete;
26
28 using BodyGenerator = std::function<void(fir::FirOpBuilder &, mlir::Value)>;
29
32 fir::DoLoopOp createLoop(mlir::Value lb, mlir::Value ub, mlir::Value step,
33 const BodyGenerator &bodyGenerator);
34
36 fir::DoLoopOp createLoop(mlir::Value lb, mlir::Value ub,
37 const BodyGenerator &bodyGenerator);
38
40 fir::DoLoopOp createLoop(mlir::Value count,
41 const BodyGenerator &bodyGenerator);
42
43private:
44 fir::FirOpBuilder &builder;
45 mlir::Location loc;
46};
47
48} // namespace fir::factory
49
50#endif // FORTRAN_OPTIMIZER_BUILDER_DOLOOPHELPER_H
Definition: FIRBuilder.h:55
Helper to build fir.do_loop Ops.
Definition: DoLoopHelper.h:21
std::function< void(fir::FirOpBuilder &, mlir::Value)> BodyGenerator
Type of a callback to generate the loop body.
Definition: DoLoopHelper.h:28
fir::DoLoopOp createLoop(mlir::Value lb, mlir::Value ub, mlir::Value step, const BodyGenerator &bodyGenerator)
Definition: DoLoopHelper.cpp:16