Releases: tudasc/TypeART
TypeART v2.1
- Explicitly model built-in
wchar_ttype. - API for querying source location of allocations has changed. Uses a struct holding the location information, instead of separate pointers.
- Softcounter now track type & count of type queries.
What's Changed
- Add support for wchar by @ahueck in #168
- Track types of queries by @ahueck in #169
- Refactor source location interface by @ahueck in #170
- Release v2.1 by @ahueck in #171
Full Changelog: v2.0...v2.1
TypeART v2.0
This release adds LLVM 18 & 19 support, featuring the new PassManager, simplified compiler wrappers using -fpass-plugin, and improved type parsing via llvm-dimeta v0.2. Runtime API updates improve ergonomics of type queries, also reducing overhead.
- LLVM 18 & 19 Support
- Enabled the new PassManager (PM) for LLVM 14+.
- Compiler wrapper use
-fpass-plugin - LLVM18+ only works with llvm-dimeta type parsing
- Type parsing
- Improved llvm-dimeta type mapping, including better support for inheritance, unions, complex types.
- Added support for vtable, void*, and nullpointer built-in types.
- Powered by llvm-dimeta v0.2
- Runtime API Changes
- Introduced structs
typeart_type_info_tandtypeart_base_type_info_tfor querying type information. - Improved
typeart_get_typeandtypeart_get_containing_typeto use these structs and reduce query overheads. - Removed unused/duplicate API functions.
Misc
- Expanded configuration options via CLI and environment variables. (due to new PM usage)
Detailed list: What's Changed
- Type fidelity by @ahueck in #148
- Replace llvm::Optional with std::optional by @ahueck in #149
- LLVM 18 support by @ahueck in #163
- Runtime API Changes by @ahueck in #164
- LLVM 19 Support by @ahueck in #165
- Release 2.0 by @ahueck in #167
Full Changelog: v1.9.1...v2.0
TypeART 1.9.1
Bug fix
Full Changelog: v1.9...v1.9.1
TypeART 1.9
This release introduces a new approach to serializing type information, leveraging the integration of the llvm-dimeta library. This enhances TypeART’s ability to extract and store type layouts using LLVM debug metadata as opposed to LLVM IR-only type information.
Other key updates include enhancements to the configuration system, extended wrapper functionality, and general maintenance.
Detailed Changes
Type Information with llvm-dimeta
Integrated the llvm-dimeta library to determine type information for stack, global, and heap allocations based on LLVM debug metadata.
Now, two methods for generating type layouts exist:
- LLVM IR Type System (--typeart-typegen=ir): Uses the LLVM IR directly for type extraction.
- LLVM Debug Metadata (--typeart-typegen=dimeta, default): Uses llvm-dimeta for type extraction from debug metadata.
Configuration
- Unified commandline and file-based configuration using a new
Configurationbase class. - YAML configuration files are now supported and can be combined with commandline options, prioritizing the latter.
- Centralized definition of commandline options for improved consistency.
Compiler Wrapper
- Wrapper passes -fPic and -g by default
- Added the ability to emit Clang compiler’s base IR via the wrapper, aiding debugging workflows.
- Wrapper now supports flexible output formats:
- Emit assembly (
-S). - Emit LLVM bitcode (
-emit-llvm). - Emit LLVM IR (
-emit-llvm -S). - Direct output to console (
-o -).
- Emit assembly (
- Enhanced debugging by supporting the emission of
heap,opt, andstackIR phases via environment flags. - Updated Python scripts for IR comparisons across phases (
ir_viewer) and between different wrappers (ir_compare).
System.h: Source Location
- Improved source location detection by refining pointer offset calculations.
- Resolved recursion issues caused by library preloading during source location queries.
Build System and CI
- Updated external dependencies to their latest versions.
- Fixed CMake IDE test targets and improved Python interpreter detection in CI workflows.
Packaging and Miscellaneous
- Updated license headers and README for the release.
List of PR's
- Configuration support in #133
- Improve wrapper debug support in #134
- Test related updates in #135
- Re-configure when scripts change in #136
- Emit base IR with wrapper in #137
- Wrapper emit-llvm in #138
- Maintenance in #141
- Type extraction via Dimeta library in #143
- Prepare release v1.9 in #144
- Release 1.9 in #145
- Readme updates (#146) in #147
Full Changelog: v1.8.1...v1.9
TypeART 1.8.1
Bugfix release.
Fix git tag issue with (optional) phpmap dependency.
Misc: Remove CI-ext AD run with safeptr map, see #64.
Full Changelog: v1.8...v1.8.1
TypeART 1.8
This release primarily improves interoperability when other projects consume TypeART.
This includes naming (mostly prefixing) of CMake variables, to better support inclusion via FetchContent or with add_subdirectory, and extending the package config to provide TypeART script (binaries).
The API of typeart_get_subtype was changed to avoid copying the TypeART struct info by copy. It is now passed as a const pointer.
The TypeART pass now supports stack lifetime markers, see lifetime.start.
Only when the lifetime of a stack variable starts, are it's address and type information valid. This is especially the case in the context of stack coloring, where stack space is re-used (with potentially different types but same memory address)
Detailed changes
Runtime
- Changed API of
typeart_get_subtype: Pass struct info by pointer
LLVM pass
- Remove deprecated (stack/global) allocation filter. Filters are selectable with a fixed set:
none(no filtering),std(standard filter),cg(call-graph based filter) uisng the command linetypeart-call-filter-impl - Refactor command line options to use prefix
typeart- - Stack allocations: Support LLVM stack lifetime start markers for instrumenting the stack, fixes #113
- Add support for LLVM 14
Scripts & compiler wrapper
- Try to detect and support Open MPI, Intel MPI and MPICH wrapping
typeart-mpiccandtypeart-mpicxxare thus generated for a specific MPI implementation (based on result ofFindMPI)
- Support compile & link single invocation, i.e.,
typeart-clang source.cpp -o source.exenow works, see #112
CMake
- Start options and cache variables with
TYPEART_prefix - Use correct option name, fixes #114
Packaging
- Package config provides the wrapper scripts via
find_programas cached variables, e.g.:TYPEART_MPICC_CMDorTYPEART_MPICC_CMD_DEBUGfor the mpicc wrapper
Misc
- Update clang-format (configuration) to version 12
- Provide new btree-backed map as alternative to Abseils
- Set Abseil to long-term release version
- Add codespell config file
- Add lit test targets
check-typeart-...for testing - Fix lit flag for when thread support is detected, i.e., use
Threads_FOUND, see #120
Full Changelog: v1.7...v1.8
TypeART 1.7
Major changes
- Supports LLVM 10 to 13.
- Compiler wrapper for TypeART, e.g.,
env CC=typeart-clangorenv MPICXX=typeart-mpic++- No need to directly invoke
clangandoptw.r.t. TypeART anymore - Works with CMake
- No need to directly invoke
- Redone library naming (#81), installing, packacking (CMake)
- Allows consuming TypeART in other projects as a library
Detailed changes
Runtime
- Runtime does not exit when default
types.yamlis missing. Supports checks fo built-in types (doubleetc.).
Pass
- TypeART uses single LLVM pass (instead of analysis + transform)
- Filter allocas of pointer values by default (can be disabled)
- Globals have a reworked pre-filtering, closes #101
- Add
CallSite.hfrom LLVM 10- Enabled for builds with LLVM 11 and higher for compatibility
Misc general
TypeART 1.6
Major changes
- OpenMP support and thread-safety for the runtime were added.
- Array cookies for
new[],delete[]are explicitly handled.
Detailed changes
Passes
- Filter aware of OpenMP microtask outlining & API
- Filter aware of Clang sanitizer API calls (asan, ubsan, msan)
- Support for C++ array cookies added, see #71
Runtime
- Runtime is thread-safe, see #10
- Refactoring: Split up runtime type-checking and allocation tracking
Misc general
- Bug fixes, see #63 #65 #67
- Install target for scripts
apply.shandrun.sh, see #70 - Should build with LLVM libcxx, closes #58 and #60
- Requires full stack to be build with libcxx to be usable (e.g., LLVM (opt) build with libcxx)
- Fixed demo Makefile and Open MPI 4 deprecation, see #76
- Extended CI tests, see #2
- Updated README.md
TypeART 1.5.1
Bugfix release.
Runtime softcounter:
- Count maxHeapAlloc correctly even if free/delete is never called, see #45
Runtime callback interface (hidden API):
- Fix bug where calling interface directly can cause a crash, see #40
- Fix mismatch between CallbackInterface.h and LLVM pass instrumentation type for stack deallcoation function, see #41
Scripts:
TypeART 1.5
Passes
- Support InvokeInst
- More memory allocation functions supported
- Selectable filter implementations
- new dataflow allocations filter
- new call-graph based filter option
Runtime
- Extended AccessCounter stats (counting of allocation operations)
- Use btree map of abseil as default
Misc General
- More tests (and more code coverage)
- Coverage options (lcov, gcovr, llvm-cov)
- Changed project structure (lib/ now contains runtime, passes etc)
- Updated CI setup (recent Ubuntu runner, test AD lulesh), compute coverage with Coveralls