Open
Description
Fully concrete terms are currently sent to the LLVM backend library, which may (or may not) represent a considerable fraction of execution time.
Several ideas combined may get us some performance improvements:
- Implement a broad selection of hooked functions for frequently-used data types
- Decide in some way dynamically how and whether to call the LLVM library:
- Export hooks instead of term API (plus hooked-type API) from LLVM library.
- Hopefully thread-safe by construction
- will keep calling marshalling more often, but hopefully very efficient small functions
- be more semantics-independent: not recompiling a specific definition but rather have a generic llvm library
- amounts to exporting the hooks when taken to the extreme
- however, there may be cases of generic functions doing useful work on symbolic input
- hook analysis
a) analyse function equations for which hooks they use (transitively, bottom-up)
b) synthesize term attribute to get a list of hooks
c) only call llvm if there are hooks not implemented in booster