PARCOACH is a static and dynamic analysis tool for High Performance Computing applications (using MPI and OpenMP for instance), based on LLVM.
Its main purpose is to check that the APIs usage are correct (for instance that all processus or threads call a barrier to avoid a deadlock).
It's not always possible to detect all errors statically, therefore the static analysis can be complemented by a dynamic instrumentation of the code to perform some correctness checks during the code execution.
This (out-of-tree) tool has been initially written based on LLVM 3.7, and is now based on LLVM 15.
As a research project, it has seen a lot of contributions: from PhD students, from interns, and from researchers; with actually a low number of LLVM-specific engineers working on it until recently.
The objective of the talk would be to focus on how the project has been using LLVM over the years (and how it's been maintained):
- how the lack of maintainance had lead to a relatively high technical dept.
- how LLVM tools and structure had been used: from a manual compilation of the code to "properly" using LLVM's CMake integration, from analysis code tangled in the transformation code to properly using the "new" analysis and passes manager.
- how the CI/CD evolved to improve the user experience (eg: docker-based jobs, automated images and packages generation, docker-compose entry point).
- the weaknesses remaining in the project (as far as LLVM is concerned), where they come from, and the plan to fix them.
- and obviously take a look at some mistakes that have been done (trying to maintain compatibility with several LLVM versions at once just to name one).
While the content of the talk would not be "new" from a scientific point of view, we believe it would provide some interesting take-aways for people looking into developing or maintaining out-of-tree LLVM-based software.