[flang][hlfir] Add pass to inline elementals
authorTom Eccles <tom.eccles@arm.com>
Tue, 25 Apr 2023 09:07:11 +0000 (09:07 +0000)
committerTom Eccles <tom.eccles@arm.com>
Thu, 18 May 2023 10:48:45 +0000 (10:48 +0000)
commit407832db60c6f51ec5d9e5160670ee9756a340af
treec687951255b73e8331592949927737d71de51ceb
parentc7dbe326dff81273eabe339fe69cd7bef947619c
[flang][hlfir] Add pass to inline elementals

Implement hlfir.elemental inlining as proposed in
flang/docs/HighLevelFIR.md.

This is a separate pass to make the code easier to understand. One
alternative would have been to modify the hlfir.elemental lowering in
the HLFIR bufferization pass.

Currently, a hlfir.elemental can only be inlined once; if there are
more uses, the existing bufferization is used instead.

Usage of mlir::applyPatternsAndFoldGreedily was suggested by @jeanPerier

Differential Revision: https://reviews.llvm.org/D149258
flang/include/flang/Optimizer/HLFIR/HLFIROps.td
flang/include/flang/Optimizer/HLFIR/Passes.h
flang/include/flang/Optimizer/HLFIR/Passes.td
flang/include/flang/Tools/CLOptions.inc
flang/lib/Optimizer/HLFIR/Transforms/CMakeLists.txt
flang/lib/Optimizer/HLFIR/Transforms/InlineElementals.cpp [new file with mode: 0644]
flang/test/Driver/mlir-debug-pass-pipeline.f90
flang/test/Driver/mlir-pass-pipeline.f90
flang/test/Fir/basic-program.fir
flang/test/HLFIR/inline-elemental.fir [new file with mode: 0644]