This patch adds code to lower simple Fortran Do loops with loop control.
Lowering is performed by the the genFIR function when called with a
Fortran::parser::DoConstruct. genFIR function calls genFIRIncrementLoopBegin
then calls functions to lower the body of the loop and finally calls
the function genFIRIncrementLoopEnd. genFIRIncrementLoopBegin is
responsible for creating the FIR do_loop as well as storing the value of
the loop index to the loop variable. genFIRIncrementLoopEnd returns
the incremented value of the loop index and also stores the index value
outside the loop. This is important since the loop variable can be used
outside the loop. Information about a loop is collected in a structure
IncrementLoopInfo.
Note 1: Future patches will bring in lowering for unstructured,
infinite, while loops
Note 2: This patch is part of upstreaming code from the fir-dev branch of
https://github.com/flang-compiler/f18-llvm-project.
Co-authored-by: Eric Schweitz <eschweitz@nvidia.com>
Co-authored-by: Jean Perier <jperier@nvidia.com>
Co-authored-by: Val Donaldson <vdonaldson@nvidia.com>
Co-authored-by: Peter Klausler <pklausler@nvidia.com>
Co-authored-by: Valentin Clement <clementval@gmail.com>
[nit]