ORC JIT Weekly #24 -- OrcV1 removed, Removable code, C API improvements, and DefinitionGenerator updates.

Hi All,

It was great to catch so many of you at the LLVM Virtual Developer’s Meeting, and to hear your feedback and questions on the JIT APIs. Documentation emerged as a popular request, especially design documents and roadmaps – I will try to make that a priority over the next few weeks, and will let you know in these weekly mails when I have something for you to check out.

In the meantime, there are four big pieces of news this week:

(1) OrcV1 has been removed. All legacy layers and utilities are gone, and all example and tutorial code has been migrated to OrcV2. [1]

(2) Removable code support has landed. You can now use ResourceTrackers to manage resources, including freeing JIT memory allocated for modules. [2]

(3) The OrcV2 C API has received a number of updates and bug fixes, including support for removable code. See [3], [4] (and a number of adjacent commits).

(4) DefinitionGenerators (and the implementation of symbol lookup) have received a major overhaul: Generators may now optionally suspend the lookup while attempting to find a definition, allowing other threads to update JIT state while they work. (The new lookup scheme also fixes a bug where we would attempt to generate redundant definitions for hidden symbols). [5]

I especially want to thank Andres Freund for all the testing, feedback and patches he provided for the C API updates. I’m happy to say that with the latest updates to the C API Andres was able to get PostgresQL’s JIT up-and-running on OrcV2.

Next up I’ll be looking at adding utilities to support for out-of-process execution. In the meantime if you have any questions or comments on any of the above (I ran short of time to go into much detail on them in this email), or any of the topics from the dev meeting – I’d love to hear from you.

– Lang.

[1] https://github.com/llvm/llvm-project/commit/6154c4115cd4b78d0171892aac21e340e72e32bd
[2] https://github.com/llvm/llvm-project/commit/0aec49c8531bc5282b095730d34681455826bc2c
[3] https://github.com/llvm/llvm-project/commit/91d1f417fd89cdbea095f820729df0eb9d465f9f
[4] https://github.com/llvm/llvm-project/commit/f35707047e216e99052c15b04fe508d075b6121b
[5] https://github.com/llvm/llvm-project/commit/069919c9ba33666786b80e89f30215ef2918ecdc