v0.2.8
This release consists of fixes, refactoring, additions and deprecates a number of outdated or redundant features and APIs.
Deprecations
- The Open Fortran Parser frontend is no longer supported by Loki. It is still available in this release but its use will print deprecation warnings and it is no longer tested in the CI. OFP will be removed from Loki in the next release (see #411 and #406)
- The CLAW compiler is no longer maintained. In order to use the OMNI frontend, the recommended procedure is no longer to install CLAW but to use the latest OMNI compiler frontend directly, e.g., via the
--with-omni
flag in the install script (see #408 and #406) - The ability to use
loki-transform.py
without a config file is deprecated and will be removed in the next release. The config file is far superior when parameterising transformation pipelines and the config file can easily be versioned together with the code it is meant to transform. See the CLOUDSC config file for an example (#429) - The Maxeler transpilation module has been removed (#405)
What's new
- The handling of typed symbols for expressions moves closer to their corresponding scopes, with a new convenience API introduced in #375
- The CLOUDSC2 mini-app, a simplified cloud microphysics scheme with tangent-linear and adjoint code paths is now part of the regression test suite (#230)
- A new vertical loop fusion transformation has been added that is guided via in-source annotations (#374)
- f90wrap has been updated to 0.2.15+, which restores compatibility with Numpy 2.0+ (#407)
- Pragma-guided high-order loop transformations, such as fusion, fission, interchange or unrolling, can now be triggered via a single transformation (#430)
All changes
- IR: Move
expr_visitors
toloki.ir
by @mlange05 in #372 - Improve on multiconditionals/switch/select case by @MichaelSt98 in #384
- Transpilation: optional arguments by @MichaelSt98 in #385
- Fix edge case for vector section mapping by @MichaelSt98 in #382
- IR: Symbol management on scoped nodes by @mlange05 in #375
- Extend 'resolve_vector_notation' to look for available and appropriate loops by @MichaelSt98 in #386
- Fix representation of array return type in OMNI frontend by @reuterbal in #391
- SingleColumn: Fix vectorisation of nested else-if bodies by @mlange05 in #392
- Inline functions (including multi-line and non-elemental functions) by @MichaelSt98 in #378
- handle modulo operator/function for c-like-backends by @MichaelSt98 in #383
- Transformations: ResolveAssociateTransformer re-write to in-place substitution by @mlange05 in #387
- Transformations: Remove routine pragmas when inlining functions by @mlange05 in #395
- Utility to remove duplicate arguments for calls and callees by @MichaelSt98 in #367
- Pytest CLI option for log-level by @reuterbal in #396
- Logging: Small log-level sanitisation and CLI flags by @mlange05 in #394
- Transformations: Re-organise
inline
andextract
sub-packages by @mlange05 in #376 - Vertical loop fusion and demotion of temporaries by @MichaelSt98 in #374
- Skip privatization of arrays with existing data declarations by @awnawab in #389
- Update f90wrap to 0.2.15 as minimum to ensure compatibility with numpy 2.0+ by @reuterbal in #407
- Remove Maxeler transpilation module by @reuterbal in #405
- Fix Scheduler instantiation without config (fix #373) by @reuterbal in #403
- Fix SccAnnotate when existing acc pragmas declare a copy category more than once by @reuterbal in #409
- Improve representation of procedure pointers (fix #393) by @reuterbal in #399
- Add option to install "plain OMNI" to install script and upgrade Github actions runners by @reuterbal in #408
- Fix function inlining when only interface is available (fixes #397) by @reuterbal in #402
- Regression test for CLOUDSC2 by @reuterbal in #230
- Remove duplicate declarations for external statements (fix #57) by @reuterbal in #404
- Utilities to merge associate blocks and restrict depth of associate resolution by @mlange05 in #388
- Prevent superfluous clone of loki in ecwam regression test by @awnawab in #410
- Inline elemental functions: skip calls with args being array (slices) by @MichaelSt98 in #401
- Frontend: Deprecate OFP and purge from test base by @mlange05 in #411
- CMake/python_venv: Do not request COMPONENT Development by @reuterbal in #413
- Dimension: Support stepping, implicit aliases and remove contrainsts by @mlange05 in #414
- Handle Loki dimension pragmas for modules (and not only routines) for FP by @MichaelSt98 in #417
- Allow for optional case-sensitive 'recursive_expression_map_update' by @MichaelSt98 in #418
- extend 'remove_explicit_array_dimensions' by @MichaelSt98 in #421
- C-like-backends: skip/don't write Fortran interfaces by @MichaelSt98 in #423
- Make builddir a runtime argument of
FileWriteTransformation
by @awnawab in #425 - Loki-transform: Add deprecation message about custom entry points by @mlange05 in #429
- Expression: Expression cloning and mapper tests by @mlange05 in #419
- Extract: Improved region-outlining for complex procedures by @mlange05 in #412
- IR: Fix false "end" matches in pragma_regions_attached utility by @mlange05 in #431
- Transformation to call loop transform utilities by @awnawab in #430
- Bump version number to 0.2.8 by @reuterbal in #432
Full Changelog: v0.2.7...v0.2.8