Skip to main content

Changelog

Version 2024.4.5, released on 2025-01-24

  • Fixed a crash while computing PWR003 in some Fortran procedures
  • Removed the deprecated option -config option

Version 2024.4.4, released on 2025-01-21

  • Upgraded LLVM toolchain with the latest changes
  • Updated RMK007, RMK008, RMK010, RMK012, RMK013, and RMK014 titles for more clarity
  • Improved support for analyzing Fortran codes dependant on an Intel Fortran extension that allows to shadow imported and host associated entities
  • Improved the report in case of an unrecoverable fatal error in the codee application
  • Improved compatibility with Fortran extensions by relaxing standard requirements
  • Improved reporting of Fortran module dependency resolution
  • Fixed a bug in response file parsing on Windows that prevented Codee from analyzing files with absolute paths
  • Fixed a bug handling -real-size 64 Intel Fortran compiler argument
  • Fixed a bug that would trigger incompatible OpenMP/OpenACC AutoFixes in Fortran pure procedures
  • Fixed a bug that would trigger PWR003 in Fortran procedures containing incompatible OpenMP/OpenACC directives

Version 2024.4.3, released on 2025-01-08

  • Improved PWR007's AutoFix to rewrite codes with statement functions
  • Improved support for analyzing Fortran codes dependant on libxsmm, SIRIUS and libint by bundling their modules into Codee
  • Improved support for analyzing unstructured Fortran loops (e.g., loops with GOTOs in the loop body)
  • Improved support for analyzing codes that declared variables explicitly or implicitly in preprocessor definitions
  • Improved compatibility with Fortran extensions by relaxing standard requirements
  • Fixed a bug that prevented further analysis when a variable from a common block was used
  • Fixed a bug that counted checkers wrongly
  • Fixed PWR003 being reported for functions with static lifetime variables
  • Fixed a crash in Codee when analyzing somes codes containing macros
  • Fixed a crash in Codee when analyzing some Fortran codes with procedure pointer arguments
  • Fixed a crash in the split-variable-initialization rewrite for procedures with included files
  • Fixed a bug with conditional return statment in fortran codes
  • Fixed a bug in the split-variable-initialization rewrite for procedures with parameter statements

Version 2024.4.2, released on 2024-12-11

  • Added support for GNU Fortran intrinsics available as both functions and subroutines
  • Added a new correctness category
  • Added --analyze-included-files common flag that allows analyzing included files in C, C++ and Fortran
  • Added --only-quality flag to include the "correctness" and "modern" checkers, deprecating the former --only-modern flag
  • Updated --show-progress to default to the new "dependencies" report
  • Updated HTML report to show the tables of the ranking of quality and optimization checkers
  • Updated the attributes and priorities of some checkers
  • Improved analysis time for large Fortran files
  • Improved missing Fortran module suggestions
  • Improved support for analyzing Fortran codes with constant array accesses
  • Improved Fortran dependency resolution
  • Improved support for analyzing non-standard GNU Fortran extensions
  • Improved PWR007's AutoFix to rewrite codes with implicit functions
  • Improved PWR007's AutoFix to insert implicit none (type, external) where appropiate
  • Improved PWR007's suggestion message
  • Improved Codee's target compiler detection capabilities
  • Improved PWR072 AutoFix coverage
  • Improved analysis time for codes with a lot of nested scopes
  • Improved support for analyzing Fortran codes dependant on ETSF_IO by bundling its modules into Codee
  • Fixed a bug while analyzing loops with different struct field uses
  • Fixed an issue where Codee misinterpreted paths from response files on Windows
  • Fixed a crash that could happen with some unsupported codes
  • Fixed bug that duplicated an AutoFix if the same input was in multiple invocations
  • Minor cosmetic changes

Version 2024.4.1, released on 2024-11-21

  • Added flags --only-modern, equivalent to --only-categories modern, and --only-optim, equivalent to --only-categories scalar,control,memory,other
  • Updated PWR068 to trigger the check on calls made through implicit interfaces, instead of all procedure declarations outside modules
  • Improved support for analyzing Fortran codes dependant on PETSc, Libxc and flook by bundling its modules into Codee
  • Improved support for analyzing Fortran codes dependant on a GNU Fortran extension that allows forward references to some host-associated symbols
  • Improved support in PWR075 to detect the use of real array indices coming from intrinsic functions
  • Fixed a bug that would cause Codee to not compile some Fortran codes that used GNU Fortran intrinsics
  • Fixed a bug that caused Codee to exhaust system memory when analyzing C++ code with deeply nested templates

Version 2024.4.0, released on 2024-11-14

  • Upgraded LLVM toolchain with the latest changes
  • Added AutoFix for PWR072 to automatically split variable declaration initialization
  • Added the total number of check occurrences to the screening report 'Ranking' table
  • Updated the screening report to show the number of available AutoFixes for each check
  • Updated the screening report suggestions when analyzing multiple files
  • Updated the list check IDs so they are sorted by their priority
  • Improved support for analyzing Fortran codes dependant on GNU Fortran intrinsics
  • Fixed a bugs related to C and C++ structs containing other empty structs
  • Fixed a bug in PWR069's AutoFix that could cause Codee to crash
  • Fixed a bug that could cause Codee to crash opening an invalid Fortran module file
  • Fixed a bug in PWR008 due to Fortran alternate returns
  • Fixed a bug where response files were not supported on windows targets
  • Fixed an issue where Codee in Windows would require ZLIB to be installed when it was not needed

Version 2024.3.5, released on 2024-10-29

  • Added Bear binary alongside Codee to allow users to create compile_commands.json out of the box
  • Added --{c|cxx|fortran}-flags codee flags to append compiler options to all compile commands entries and updated the corresponding environment variables
  • Added --show-compiler-output flag to print messages that compiler emitted during analysis
  • Added autodetection of compile_commands.json relative to the command-line file filters
  • Updated PWR072 to clearly state the undesired implicit 'save' behavior
  • Updated the do concurrent rewrite to work in compiler agnostic mode
  • Improved support on some recoverable internal errors, allowing partial analysis on some codes that were previously rejected
  • Improved support for unknown compilers by assuming GCC or GFortran depending on the input files
  • Fixed a bug that would report PWR075 for non-GNU compilers
  • Fixed several bugs
  • Minor cosmetic changes

Version 2024.3.4, released on 2024-10-15

  • Added AutoFix for PWR069 to automatically adjust and remove use statements in procedures
  • Added support for the f95 compiler as an alias to gfortran
  • Added missing progress printer to codee rewrite
  • Updated the screening report:
    • Split the ranking of checkers between optimization and modernization
    • Removed the main screening report table from the default output to emphasize the 'Ranking' table
    • Updated the codee screening --verbose report to show a list of checkers per file
  • Updated ROI report based on --verbose and --brief modifiers
  • Improved PWR007 autofix to handle GNU Fortran intrinsic procedures
  • Improved PWR069 with a reduction of false positives and more accurate suggestions
  • Improved PWR075 to detect usages of real values in array indices
  • Improved support for unknown compilers by assuming GCC-like flags
  • Improved handling of input filters by rejecting invalid ones
  • Fixed reporting of unreachable dependencies for compilation entries with relative paths
  • Fixed compilation errors when -mcpu was used in X86 targets
  • Adjusted checkers attributes
  • Minor cosmetic changes

Version 2024.3.3, released on 2024-10-01

  • Upgraded LLVM toolchain to version 20 (20.0.0)
  • Added support for Fortran programs that use OpenMP conditionally compiled lines
  • Improved support for analyzing Fortran codes dependant on OpenACC, by bundling those modules into Codee
  • Improved support on some recoverable internal errors, allowing partial analysis on some codes that were previously rejected
  • Improved reporting of missing Fortran modules
  • Improved the report of compiled but unreachable Fortran dependencies
  • Fixed a crash that would happen when a missing Fortran module was used
  • Fixed Fortran compilation error due to unsupported global procedure pointers
  • Fixed a bug in PWR069 causing invalid suggestions for transitive dependencies and symbol renames
  • Fixed a bug in PWR007 autofix for function return values
  • Fixed a bug in PWR008 autofix due to a miscalculated position in Fortran preprocessed files
  • Fixed an issue where Codee would report invalid errors after a missing used Fortran module
  • Fixed an issue with Fortran modules that would compile but couldn't be used afterwards
  • Minor cosmetic changes

Version 2024.3.2, released on 2024-09-13

  • Added a new Fortran Modernization checker "PWR075: Avoid using GNU Fortran extensions"
  • Added support for Intel ifx compiler flags on Linux and Windows
  • Added a "native" option for --multi and --offload rewrites that uses do concurrent in Fortran loops; this option is enabled with --compiler-driven-mode for ifx, ftn, and nvfortran
  • Fixed an issue with computing dependencies that affected "compile_commands.json" with several languages on it
  • Fixed a crash when using input filters for files that have host-associated functions from another included file
  • Fixed undesired warnings being printed along with Fortran compilation errors
  • Fixed an issue detecting a particular case of an array reduction compute pattern

Version 2024.3.1, released on 2024-09-04

  • Updated screening report "RANKING OF CHECKERS" table by adding an AutoFix column and merging Level and Priority ones
  • Fixed an issue with bash autocompletion
  • Fixed hiding unrelated analysis errors if --show-failures is disabled
  • Fixed an issue with codee rewrite if --compiler-driven-mode is enabled
  • Fixed nvfortran compiler version detection
  • Removed deprecated --show-ranking flag for the screening report
  • Removed pwreport, pwloops, and pwdirectives shims
  • Minor cosmetic changes

Version 2024.3.0, released on 2024-09-03

  • Upgraded LLVM toolchain to version 19 (19.1.0-rc1)
  • Added AutoFix for PWR008 that declares the intent for each procedure parameter
  • Added support for Intel ifort compiler flags on Windows
  • Added support for NVIDIA Fortran compiler flags on Linux
  • Added support for Cray Fortran compiler flags
  • Added autodetection of "compile_commands.json" when --compile-commands and -- <invocation> are not used
  • Improved analysis time for some Fortran files
  • Improved memory usage during the analysis of Fortran files
  • Improved support for analyzing Fortran codes dependant on MPI, NetCDF and HDF5, by bundling those modules on Codee
  • Improved reporting of transitive dependencies on missing external Fortran modules
  • Improved the OpenMP directives used in codee rewrite for Cray and Nvidia compilers
  • Improved PWR068 detection in non-standard Fortran codes
  • Fixed a bug when filtering Windows paths with backslashes
  • Fixed a Codee crash for Fortran codes with loops containing statement labels
  • Fixed an issue parsing OpenACC and OpenMP clauses separated by commas
  • Fixed a leak of internal compiler messages into Codee output
  • Fixed a bug rewriting Fortran code with codee rewrite --multi omp-taskwait
  • Do not print empty tables in codee screening on error
  • The list of supported compilers with optimization report is now reported with the flag codee --list-optimizing-compilers
  • codee --version now lists the supported compilers, it no longer lists the supported compiler with optimization reports
  • Removed the "CHECKS PER CATEGORY AND PRIORITY LEVELS" table from the screening report
  • Minor cosmetic changes

Version 2024.2.6, released on 2024-07-30

  • Renamed the --config option to --compile-commands (-p), which now also accepts a path to a directory that contains a "compile_commands.json" file
  • Greatly reduced the memory usage of Codee on large Fortran projects
  • Fixed several bugs
  • Minor cosmetic changes

Version 2024.2.5, released on 2024-07-10

  • Codee now requires a complete compiler invocation at the right of the -- separator when not using a compilation database
    • Codee will now use the given compiler to parse the compilation options
    • New --compiler-driven-mode to enable the Compiler Driven Mode, that will use the compiler from the invocation as the target
    • Removed --target-compiler-X flags, as Using a different target compiler is no longer supported
  • Added a new Fortran Modernization checker PWR069: Use the keyword only to explicitly state what to import from a module
  • Codee will now analyze the compilation database respecting the Fortran module dependencies
  • Fixed an issue where the PWR073 would show "empty" COMMON uses
  • Split the "quality" category of checkers into "modernization (modern)" and "other"
  • Improved support for header files for some bundled common Fortran modules
  • Updated the past changelog with some missing features

Version 2024.2.4, released on 2024-06-12

  • Added AutoFix for PWR007: Disable implicit declaration of variables
  • Include some bundled Fortran modules to improve the analysis coverage

Version 2024.2.3, released on 2024-06-05

  • Added new Fortran Modernization checkers (some were part of PWR063):
    • PWR068: Encapsulate external procedures within modules to avoid the risks of calling implicit interfaces
    • PWR070: Declare array dummy arguments as assumed-shape arrays
    • PWR071: Prefer real(kind=kind_value) for declaring consistent floating types
    • PWR072: Add an explicit save attribute when initializing variables in their declaration
    • PWR073: Transform common block into a module for better data encapsulation
  • Added legacy Fortran "unconditional GOTO" statements to PWR063
  • Created a new Codee flavor focusing on modernization tasks
  • Added support for gfortran compilation flags
  • Improved support for analyzing Fortran codes dependant on MPI and NetCDF
  • The PWR042 and PWR043 checkers are now enabled for Fortran
  • Fixed several bugs

Version 2024.2.2, released on 2024-04-19

  • Fixed the analysis order with "compile_commands.json" in the presence of a filter
  • Removed support for "pw.json" configuration files
  • Minor cosmetic changes

Version 2024.2.1, released on 2024-04-17

  • Deprecated commands coming from the former pwloops binary
  • Hide Codee compilation warnings behind the --show-failures flag
  • Fixed multiple minor bugs
  • Updated the past changelog with some missing features

Version 2024.2.0, released on 2024-04-08

  • Added codee as an unified binary aggregating pwreport, pwloops, and pwdirectives functionality
  • Added a --verbose mode for the screening and technical-debt reports, which makes Codee to print subtotals per file
  • Removed the -- prefix from all Codee commands (e.g., codee --checks is now codee checks)
  • Removed support for deprecated environment variable names
  • Support for analyzing Fortran source code is now considered mature instead of experimental
  • Changed --roi and --technical-debt reports to suppress error messages when targeting multiple files; this behavior can be overriden with --show-failures

Version 2024.1.4, released on 2024-03-26

  • Added Return On Investment Report (pwreport --roi)
  • Added Technical Debt Report (pwreport --technical-debt)
  • Simplified the --screening report to omit info already available on the --roi report

Version 2024.1.3, released on 2024-03-19

  • Enabled Fortran analysis on Windows an MacOS platforms
  • Added Fortran support for the PWR003 checker (explicitly declare pure functions)
  • Added "Scope" (File, Function, Loop) to the information of each Checker in --list-available-checkers
  • Added Codee tab completion support for bash, fish, and zsh shells; run pwreport --completions <your shell> for instructions
  • Added Compiler Efficiency Report (pwloops --compiler-efficiency)
  • Added support for Fortran COMMON blocks
  • Improved support for C++ member functions that make use of this
  • Improved the support for the IAR C and C++ compiler by handling --dlib_config and --libc++ options
  • Improved support for Fortran compiler directives
  • Improved the final summary message with the number of loops and functions that have been successfully analyzed

Version 2024.1.2, released on 2024-02-21

  • Greatly improved analysis coverage, especially in Fortran codebases, by enhancing error tolerance and recovery in the core of the technology
  • Improved pwdirectives to insert comments detailing the optimizations applied to the rewritten code; this behaviour can be disabled with the new pwdirectives --disable-comments option
  • Added support for ARM big.LITTLE compilation flags
  • Improved analysis support for C++ member functions (functions that use this explicitly or implicitly still unsupported)
  • Added analysis success/failure messages for each file in --show-progress
  • Changed --show-progress=files to be the default progress reporting mode, use --show-progress=none to suppress progress messages
  • Changed --show-failures to be enabled by default, use --show-failures=none to suppress error messages
  • Added --check-id flag to filter by specific check IDs
  • Greatly optimized the compile_commands.json parsing phase; the total analysis time for big code bases can now be slashed down to 1/6 of the original time
  • Added a message to --version showing the time to license expiration
  • Minor cosmetic changes
  • Removed "optimizable lines" column from pwreport --screening

Version 2024.1.1, released on 2024-02-01

  • Replaced the bundled "check-examples" folder with the new "open-catalog"
    • The open-catalog is also available at GitHub
  • Improved analysis time on Fortran codes
  • Changed --show-ranking to be enabled by default, making the argument unnecessary
  • Improved --list-available-checkers by allowing filtering by categories as usual
  • Removed already deprecated --evaluation flag; the --screening flag should be used instead
  • Improve detection on maximum and minimum pattern computations
  • Improved Fortran support

Version 2023.2.6, released on 2024-01-16

  • Improved PWR063 with more detailed information in --verbose mode
  • Improved Codee core detection capabilities, now it supports the detection of small static array temporaries
  • Updated PWR020 and PWR021 so they are no longer reported if there are any non-categorized compute pattern (n/a), preventing false positives
  • Fixed a bug for Fortran files that stopped analysis due to errors in unrelated parts of the code
  • Fixed a bug where PWR022 was incorrectly reported in some loops with non-invariant conditions
  • Fixed bug that caused a discrepancy between the screening and checks reports regarding the RMK015 remark
  • Improved warning message behavior related to the usage and parsing of the compile_commands.json
  • Improved support for some Fortran constructs

Version 2023.2.5, released on 2024-01-08

  • Added the number of repeated entries for each file in a compile_commands.json when --show-progress is used
  • Fixed PWR063 to be reported only once per file, as intended
  • Several stability improvements
  • Fixed multiple minor bugs

Version 2023.2.4, released on 2023-12-05

  • Added a new recommendation PWR063: Avoid using legacy Fortran constructs
  • Added a new --show-ranking option to the screening report, which shows the number of occurrences of each checker, ordered by priority
  • Added --include-categories and --only-categories to filter checkers by category
  • Updated --list-available-checkers option to show the attributes of the new check ranking system
  • Deprecated --include-tags and --only-tags in favor of the new --include-categories and --only-categories respectively
  • Removed the --show-breakdown option from the screening report, in favor of the new --show-ranking
  • Removed several legacy reports from Codee:
    • --functions, --races and --parallelization from pwreport
    • --result from pwloops --vector-support
  • Removed the --show-breakdown option from the screening report, in favor of the new --show-ranking
  • Removed "mode" column from pwloops
  • Improved compile_commands parsing result report

Version 2023.2.3, released on 2023-11-23

  • New "Likelihood", "Remediation cost" and "Severity" checker independent attributes
  • New "Priority" and "Level" checker attributes, whose values derive from those of the three above
  • The checks report is now ordered by priority value
  • New --level flag, which allows the user to filter checkers by their priority level
  • The screening report now shows the number of checkers by priority level in the second table
  • Fixed a bug causing crashes for code that uses unsupported pointer assignments or structs
  • Add support for C-like comments in Fortran fixed form
  • Fixed --target-arch filtering regression
  • Fixed a loop filtering bug that prevented checks to be reported for the inner loops

Version 2023.2.2, released on 2023-11-15

  • Added support for the IAR iccarm compiler flags
  • Disable remarks RMK002 and RMK008
  • pwdirectives now breaks lines according to the maximum line length allowed by the language (i.e., free and fixed forms in Fortran)
  • Rework on the internal technology that should improve code support in some particular cases
  • Updated the past changelog with some missing features

Version 2023.2.1, released on 2023-11-07

  • Fixed a bug that stopped Codee from analyzing some kinds of unsupported precompiled headers
  • Fixed a bug where Codee would print warnings even if --no-warnings was set
  • Added support for more Fortran compiler flags
  • Fix a bug where the some Fortran analysis would get stuck

Version 2023.2.0, released on 2023-10-24

  • Upgraded LLVM toolchain to version 17
  • Add Fortran matrix multiplication example

Version 2023.1.7, released on 2023-10-04

  • Changed pwdirectives syntax to a comma-separated list of options (pwdirectives --vector omp,gcc) instead of repeating arguments (pwdirectives --vector omp --vector gcc)
  • The pwreport --checks output now prints the canonical title of each check
  • New line in the CLI output printing the Codee version and date of the analysis
  • New pwdirectives suggestion to complete array transfers in offloading computations
  • Improved reporting of ignored duplicated files in compile_commands.json
  • Changed the vectorization suggestions to be specific to the target compiler
  • Combined rewriting modes of pwdirectives are now properly suggested in pwreport --checks --verbose
  • Fixed a bug where some checks were repeated under some circumstances
  • Fixed a bug where sometimes a check was not correctly filtered

Version 2023.1.6, released on 2023-09-19

  • Fortran array access range is no longer specified in OpenMP or OpenACC data transfer clauses
  • Now the files not present in a compile_commands.json will be ignored when using it alongside with input files/directories
  • The pwdirectives --vector command may now apply to the whole file
  • Moved pwloops --non-analyzable report to pwreport --non-analyzable --verbose
  • Renamed pwloops --summary column "Optimizable" to "Has autofix" and removed the "Optimized" column
  • New --list-available-checkers option that replaces --list-all
  • Deprecated --list-all, --list-checks, --list-defects, --list-recommendations, --list-remarks and --list-tagged
  • Deprecated the option --auto from pwdirectives
  • Fixed several minor bugs

Version 2023.1.5, released on 2023-08-31

  • New experimental support for Fortran assumed-shape arrays
  • New remark RMK015: Tune compiler optimization flags to increase the speed of the code
  • New remark RMK016: Tune compiler optimization flags to avoid potential changes in floating point precision
  • Several fixes and improvements in the CLI output

Version 2023.1.4, released on 2023-08-10

  • Tuned PWR044 to ignore integer constant expression
  • Fixed several minor bugs

Version 2023.1.3, released on 2023-07-14

  • The screening report now also prints the total number of files per language

Version 2023.1.2, released on 2023-07-07

  • Added check PWR060 for optimizing loops with gather memory access patterns
  • Removed outdated how-to on using Codee with Canny algorithm
  • Fixed several minor bugs

Version 2023.1.1, released on 2023-06-30

  • Added check PWR049 for optimizing loops with iterator-dependent conditions
  • New Codee --target-arch flag, which allows the user to filter Codee checkers by their target architecture of interest
  • The option --check-install was removed from Codee
  • The option --configuration-wizard was removed from Codee
  • The target compiler setting is no longer stored in the system
  • The target compiler is no longer taken from the compile_commands.json. Now it can only be set through Codee CLI flags
  • Revamp tag filter system:
    • Added `--only-tags: Shows items tagged with the specified tags
    • Change in behavior for --include-tags: Shows items tagged with the specified tags or if non-excluded by default
    • Removed --exclude-tags
  • Reduce the occurrence of PWR016 by reporting per variable instead of per each variable use
  • The error messaging related to the target compiler support was improved
  • The screening report and the checks report now print suggestions to use the Compiler Driven Mode
  • The main tags of many checks were updated

Version 2023.1.0, released on April 2022

  • The --actions report was reimplemented to deliver the new --checks report
    • It is no longer limited to be used by function (as the actions report was). Therefore, it is available for any code snippet
    • It reports a list of checks like most of the static code analyzers
  • New --check-install argument to validate the correct installation of Codee
  • New recommendations for floating point scalar optimizations PWR044, PWR045, PWR046, PWR048
  • pwdirectives modes reorganization. Now the different rewriting modes are grouped in --vector, --multi and --offload options. See the --help menu for more details
  • New pwdirective --memory loop-interchage option that performs loop interchange whenever is recommended (PWR039)
  • Former OPP003 have been split into PWR052, PWR054 and PWR057 respectively
  • Codee now ignores files if they were already analyzed in the same run, even if they are explicitly repeated in the input
  • New input filtering syntax. Now loops and functions of the same file can be filtered with a simpler syntax: "file:loop1,loop2,loop3", instead of the former "file:loop1 file:loop2 file:loop3"
  • New --fp-precision flag which allows filtering checks given their floating point computation strictness
  • The "Loop support" category was simplified in a new "Codee mode" category
    • Loops are now categorized as "Guided" or "Auto" depending on the Codee capabilities
    • Now pwdirectives --auto only applies to loops with Codee Auto mode support
  • The verbosity level flag --level <n> was simplified to --verbose
  • Improve compiler vectorization detection
    • Make more explicit which target compiler and optimization flags are being used
    • Improve detection of compiler optimization reports such as loop unrolling messages and loop replacements by library calls
    • pwdirectives --auto now prints the "reason" reported by the compiler when it could not vectorize the loop annotated by Codee
  • Add new "Actions" column with the detected actions in pwloops --summary
  • Changed variable representation to show which array dimension or type member is being used
  • pwdirectives can now apply a combination of directives (in a single run) to the same loop
  • Add support for rewriting competing directives from different vendors in the scope of offloading computations and vectorization
  • Now the user can accept EULA directly using --accept-eula option or defining the CODEE_ACCEPT_EULA=yes environment variable
  • Upgraded libpw to LLVM 14, integrating Flang support from upstream
  • Added basic support for Intel oneAPI compiler suite

Version 1.6.0, released on 2022-11-18

  • New Codee default behavior: Compiler Driven Analysis
    • A target compiler is now mandatory.
    • Codee will generate its reports driven by the target compiler (limited to vectorization related actions for now)
    • SIMD opportunities (OPP002) are no longer reported for a loop if the target compiler could already auto-vectorize it by itself
  • New pwdirectives output: now it shows if Codee could finally vectorize the loops that the target compiler originally could not
  • Improved support for more compilers and verions:
    • Added support Microsft Visual C/C++ compiler
    • Added support for Intel C/C++ compilers
    • Improved support for LLVM and GNU C/C++ compilers
  • RMK011 is no longer reported, and it was removed from the catalog
  • Fixed incorrect filtering of OPP002 and OPP003

Version 1.5.1, released on 2022-09-29

  • Reduced the number of Screening Report levels, so 2 and 3 become 1 and 2 respectively
  • Improved --show-progress flag to allow function-level progress report
  • The recommendation PWR024 is now shown by default for non OpenMP-compliant loops as long as they are also opportunities

Version 1.5.0, released on 2022-09-15

  • Loop difficulty levels were replaced by "Codee support categories"
    • Former "Low" difficulty level loops are now of "Auto" or "Guided" categories
    • Former "Medium" difficulty loops are now of the "Development" category
    • Former "High" difficulty loops are now loops of the "Roadmap" category
  • Improved support for detecting temporary arrays
  • Added the recommendations PWR007 and PWR008 for Fortran
  • Now compilation flags in Windows are interpret for MSVC by default. This behavior can be tunned with the --driver-mode option
  • pwdirectives:
    • --auto now requires the user to filter by function. It no longer rewrites entire files

Version 1.4.1, released on 2022-08-04

  • Improved handling of case-insensitive identifiers on Fortran
  • Improved reporting of Fortran unsupported features
  • Fixed recommendation PWR043 incorrectly reported as PWR042
  • Changed the loop filter to also allow inner loops. To keep the previous behaviour use the flag --single-loop
  • pwdirectives:
    • Fixed --omp simd to be equivalent to --simd omp

Version 1.4.0, released on 2022-07-01

  • New recommendations PWR042 and PWR043 related to loop interchange opportunities
  • Added support for compilation databases (compile_commands.json) on Fortran code
  • Added support for cross-architectural and cross-system analysis for GNU/Linux and Android on ARM64
  • Improved analysis support for automatic, assumed-shape and adjustable array accesses on Fortran loops
  • Improved support for C++ math functions
  • Improved performance on analysis of large files
  • Deprecated PWR033 in favor of PWR022
  • Added a new how-to on using Codee with Canny algorithm
  • Updated the EULA
  • pwreport:
    • Rename --evaluation to --screening
    • Added --show-breakdown to the screening report

Version 1.3.3, released on 2022-06-16

  • Added new flag --no-warnings to remove all Codee warnings
  • Added a new suggestion in pwreport --actions --level 2 for pwdirectives --auto mode
  • Improved loop difficulty classification for several kinds of loops
  • Fixed several minor bug fixes

Version 1.3.2, released on 2022-05-26

  • Appentra Parallelware Analyzer is now Codee
  • Improved analysis support for Automatic Arrays on Fortran
  • Improved reporting on loop complexity for pwreport --actions and pwloops --summary
  • Improved table format so long filenames don't make the table too wide
  • pwreport:
    • Included --evaluation with a new --level 3 report that breaks down loop complexity by function
    • Improved --evaluation report output format with new "Total" rows and a new Code Coverage table
  • pwloops:
    • Improved "codee" column on --vector-support to report as another compiler
      • Now --show-messages prints Codee cost model messages

Version 1.3.1, released on 2022-04-25

  • pwreport:
    • Add OpenACC suggestion to run pwdirectives on offloading opportunities
    • Improve wording in --evaluation
  • pwdirectives:
    • Use "schedule(static)" clause when autoparallelizing GPU offloading opportunities with OpenMP

Version 1.3.0, released on 2022-04-19

  • Included a new vectorization cost model which proposes vectorization only for eligible loops
  • Prints out why ineligible loops are not vectorization friendly (new remarks RMK010, RMK011, RMK012, RMK013 and RMK014)
  • Included a new memory cost model which proposes loop interchange only for eligible loops
  • Included a new classification of loops by the degree of difficulty from performance optimization viewpoint
  • pwreport:
    • function or loop filter is necessary for --actions analysis
  • Added experimental support for Fortran (Linux only)

Version 1.2.1, released on 2022-02-18

  • New recommendations PWR039 and PWR040
  • pwreport:
    • Links to the knowledge-base are now suggested in --actions with --level 2

Version 1.2.0, released on 2022-02-03

  • libpw upgraded to LLVM 13
  • New recommendations PWR028, PWR030, PWR031, PWR032, PWR033 PWR037 and PWR038. Remarks RMK004, RMK005 and RMK006 were promoted to PWR034, PWR035 and PWR036 respectively
  • Now using a compilation database without any input files will default to analyzing all database entries
  • Changed default tag visibility: use --include-tags all to enable all checks again
  • pwreport:
    • New --evaluation analysis which is the new default
    • New --non-analyzable report that shows the unsupported features in the code
    • New --actions report that superseeds --hotpot/--summary. Use --show-info to show the analysis messages. Empty entries will be ommited unless --show-empty is used.
    • The --level flag controlling the detail now has levels 0, 1 and 2 and it defaults to 1

Version 1.0.0, released on 2021-10-07

  • Fixed bug preventing pwloops --vector-support from categorizing gcc messages
  • Fixed bug causing result count on pwloops --vector-support to be incorrect
  • Improved OPP001 and OPP03 classification by taking into account floating point operations
  • pwcheck: removed since all its analyses are now part of pwreport
  • pwreport 1.0.0: incorporated the data race analysis (--races) from the removed pwcheck tool, new recommendation PWR006 and new --list-tagged option
  • pwloops 1.0.0: improved --vector-support analysis
  • pwtrainer 1.7.0: new graphical user interface tool to ease training and experimentation

Version 0.19.2, released on 2021-09-29

  • Fixed bug causing crashes for codes that use macros containing several loops
  • Fixed bug causing pwreport --vector-support to miss some relevant compiler messages
  • Fixed bug preventing files without filters from being analyzed when passed along others with filters
  • Fixed a regression causing --config to be incorrectly compatible with compiler flags arguments
  • pwreport 0.6.2: improved --functions analysis by adding a new "Analyzable" column and by reporting all defined functions by default regardless of whether they are used unless --include-undef or --excluded-unused are specified

Version 0.19.1, released on 2021-09-08

  • Fixed a regression causing analysis of files including "omp.h" to fail
  • Fixed a regression introducing incorrect opportunity codes and causing incorrect tag filtering
  • Fixed bug preventing function filtering from working correctly for directories
  • Updated quickstarts with up-to-date commands and outputs
  • Added missing PWR017 check example

Version 0.19.0, released on 2021-08-19

  • libpw upgraded to LLVM 12
  • Fixed bug reporting standard globals (e.g. stdout, errno) on PWR001
  • Fixed bug causing misplaced error messages
  • Tags for checks, remarks and opportunities allow filtering through the new --include-tags and --exclude-tags arguments
  • New input syntax allowing to specify a function name or loop location along the filename supersedes the --loop and --function filters; also supported by --exclude
  • Added more information to --version regarding the supported standards, libraries and compilers
  • pwreport 0.6.0: new --functions analysis providing an overview of used functions; new --show-breakdown replacing --detail-opportunities and --detail-checks; new set of --list-* arguments to list supported checks, remarks and opportunities
  • pwcheck 0.6.0: new defects PWD009-011 and recommendations PWR026-027
  • pwloops 0.6.0: new --vector-support report to compare vectorization capabilities between different installed compilers

Version 0.18.2, released on 2021-06-18

  • Added an error message to alert whenever a filter or target input does not match any code
  • Fixed bug causing linked libraries to be treated as inputs
  • Fixed a regression causing crashes for some codes with read-only arguments
  • pwreport 0.5.2: parallel compute patterns are now shown for opportunities in --level 3 and fixed a regression causing the loss of the suggestion to use compiler flags when failures exist
  • pwloops 0.5.2: fixed bug causing incorrect filters in some suggestions
  • pwdirectives 0.5.2: fixed bug preventing --explicit-privatization from working

Version 0.18.1, released on 2021-06-03

  • Fixed bugs causing some interprocedural analyses to fail
  • Fixed bug causing a crash when analyzing multiple files
  • Fixed bug causing suggestions to omit configuration file arguments
  • Fixed bug causing pwreport to list some function declarations

Version 0.18.0, released on 2021-05-31

  • Added offload opportunities differentiated from multi-threading ones
  • New MATMUL quickstart example available in examples/matmul
  • Option --temporary allows to declare temporaries to ease analysis
  • pwreport 0.5.0: new default --hotspot structured report provides details on all actionable items including defects, recommendations, opportunities and remarks (new)
  • pwcheck 0.14.0: 8 new recommendations PWR018-025 focusing on vectorization
  • pwloops 0.5.0: offload opportunities support and improved --non-analyzable messages
  • pwdirectives 0.5.0: new --omp offload+simd hybrid parallelization

Version 0.17.0, released on 2021-02-22

  • SIMD opportunities now have stricter requirements and can be inside OpenMP parallel regions
  • Extended function, loop and variable filters to all reports
  • Extended --csv and --json output formats to all reports
  • Fixed bug preventing pwloops --code from showing multiple opportunity types
  • pwreport 0.4.0: reduced analysis time by removing double pass
  • pwcheck 0.13.0: new structured report and three levels of detail with --level
  • pwloops 0.4.0: loops now reported as trees, new --memory-accesses report and "dep" pattern
  • pwdirectives 0.4.0: SIMD support for multiple compilers and OpenMP, new --auto mode to parallelize all SIMD opportunities detected, grouped opportunities support, new OpenMP hybrid (multi+simd) parallelization mode and --explicit-privatization strategy

Version 0.16.0, released on 2020-11-03

  • libpw upgraded to LLVM 10.0
  • Parallelization opportunities have now stricter requirements
  • pwreport 0.3.0: new CSV output format
  • pwcheck 0.12.0: new filtering options, defects PWD004-008 and recommendations PWR011-016
  • pwloops 0.3.0: new --memory-footprint analysis, --summary columns and --non-analyzable output format
  • pwdirectives 0.3.0: non-contiguous-memory array offloading with OpenMP enter/exit data
  • Fixed bug causing incorrect failed files counts in pwcheck and pwreport

Version 0.15.1, released on 2020-08-21

  • Fixed bug causing --exclude to fail when mixing absolute and relative paths
  • pwcheck 0.11.1: fixed bug causing analysis to finish prematurely

Version 0.15.0, released on 2020-06-23

  • libpw upgraded to LLVM 7.1
  • EULA acceptance is now required upon first execution
  • Now --config also accepts compile_commands.json files
  • Added --lang filter to analyze only source files of specific programming language
  • Added --analyze-headers to consider header files as regular source files
  • pwcheck 0.11.0: new checks PWD002, PWR009 and PWR010
  • pwloops 0.2.0: memory access patterns are now reported along computational ones
  • pwdirectives 0.2.0: OpenMP offloading with or without teams

Version 0.14.2, released on 2020-05-28

  • Fixed bug causing the printing of a significant number of empty lines
  • Fixed bug causing missing messages with --verbose

Version 0.14.1, released on 2020-05-20

  • Fixed bug causing crash due to invalid PWA_LICENSE_PATH

Version 0.14.0, released on 2020-05-06

  • Multiple file analysis via configuration (--config <file>)
  • Multiple file and flag info can be seen with --show-progress --verbose
  • Windows and MacOS now supported without Fortran
  • Fortran support is reported in --version
  • Header files are not analyzed unless included
  • License check delayed to allow some informational usages
  • pwcheck 0.10.1: data race analysis by file and data-race-free reporting
  • pwreport 0.2.1: report summary of data races and data-race-frees
  • pwloops 0.1.4: improved --non-analyzable messages

Version 0.13.1, released on 2020-03-16

  • pwdirectives 0.1.3: fixed crash when looking for the opportunity

Version 0.13.0, released on 2020-03-04

  • Moved --summary analysis from pwcheck to pwreport
  • Added --show-failures common option to enable error reporting
  • pwcheck 0.10.0: data race analysis and fixed wrong messages
  • pwreport 0.2.0: new default summary analysis
  • pwloops 0.1.2: converted --patterns into --summary and added opportunity information

Version 0.12.1, released on 2019-12-12

  • libpw upgraded to LLVM 7
  • pwcheck 0.9.4: match the way pwreport processes files
  • pwreport 0.1.1: fixed Fortran metrics not being computed

Version 0.12.0, released on 2019-12-12

  • pwreport 0.1.0: new binary

Version 0.11.1, released on 2019-12-03

  • Include bundled headers for LIBC and OpenMP by default

Version 0.11.0, released on 2019-11-26

  • pwanalyzer 0.8.0: removed overview analysis
  • pwreport 0.1.0: overview results as JSON (proof of concept)

Version 0.10.5, released on 2019-11-05

  • pwcheck 0.9.3: summary report and filtering of defects or recommendations
  • pwloops 0.1.2: output non-analyzable loops

Version 0.10.4, released on 2019-10-11

  • Lowered minimum required GLIBC to 2.19

Version 0.10.3, released on 2019-09-17

  • A valid license file is now required to run any program
  • pwanalyzer 0.7.1
  • pwcheck 0.9.2
  • pwloops 0.1.1: changed default analysis to datascoping
  • pwdirectives 0.1.2: fixed bug allowing to parallelize already parallel loops

Version 0.10.2, released on 2019-08-28

  • pwcheck 0.9.1: PWD003 support for C and code examples

Version 0.10.1, released on 2019-08-02

  • pwdirectives 0.1.1: fixed bug preventing OpenMP offloading parallelization
  • pwcheck 0.9.0: new PWD003 check for Fortran
  • libpw: updated to version 0.11.0

Version 0.10.0, released on 2019-07-02

  • pwanalyzer 0.7.0
  • pwcheck 0.8.0: new binary
  • pwloops 0.1.0: new binary
  • pwdirectives 0.1.0: new binary
  • libpw: updated to version 0.10.0