[llvm-dev] ORC JIT Weekly #12
Lang Hames via llvm-dev
llvm-dev at lists.llvm.org
Wed Apr 22 16:37:22 PDT 2020
Hi Stefan,
This is great news! Looking forward to use it for dispatch in the
> ThinLtoJIT prototype once I resume to my LLVM work.
Yes -- I think it will be really handy for that. Hopefully I will get some
profiling signposts and logging in to ExecutionSession in the not too
distant future too: I think your ThinLtoJIT prototype will make for an
interesting in-tree performance stress-test.
-- Lang.
On Mon, Apr 20, 2020 at 1:58 AM Stefan Gränitz <stefan.graenitz at gmail.com>
wrote:
> Hi Lang, thanks again for your updates!
>
> The Extensible RTTI system (https://reviews.llvm.org/D39111) that I
> posted a while back has landed. While this is not ORC specific, I expect it
> to be used in upcoming patches to allow ORC clients to check the dynamic
> type of MaterializationUnits. This can be used during dispatch to
> prioritize work by type, e.g. prioritizing stubs and other
> trivial-to-materialize symbols.
>
> This is great news! Looking forward to use it for dispatch in the
> ThinLtoJIT prototype once I resume to my LLVM work.
>
> On 20/04/2020 07:36, Lang Hames wrote:
>
> Hi All,
>
> There was only one interesting ORC-specific commit this week: A new
> example showing how to initialize and de-initialize JITDylibs has been
> added in llvm/examples/OrcV2Examples/LLJITWithInitializers.
>
> The Extensible RTTI system (https://reviews.llvm.org/D39111) that I
> posted a while back has landed. While this is not ORC specific, I expect it
> to be used in upcoming patches to allow ORC clients to check the dynamic
> type of MaterializationUnits. This can be used during dispatch to
> prioritize work by type, e.g. prioritizing stubs and other
> trivial-to-materialize symbols.
>
> Finally, I hope to spend next week working on support for removable code
> in OrcV2, which is one of the big missing features from OrcV1. I expect the
> API to end up looking something like this:
>
> using ResourceKey = const class ResourceTracker*;
> class ResourceTracker {
> public:
> // Return the key for this tracker (just its address)
> ResourceKey getKey() { return this; }
>
> // Emit all not-yet-emitted symbols covered by this tracker.
> Expected<SymbolMap> emit();
>
> // Remove all symbols covered by this tracker and
> // release resources.
> Error remove();
>
> // Transfer tracking of all symbols / resources to the
> // containing JITDylib's tracker.
> void detach();
> };
>
> I'm hoping that usage will look like:
>
> LLJIT J = LLJITBuilder().create();
>
> // No tracker specified. Resources tracked by the containing
> // JITDylib's tracker, and freed when the JITDylib is
> // deinitialized.
> ExitOnErr(J.addIRModule(sdt::move(UntrackedModule)));
>
> // Explicitly specify tracker. Module symbols can be
> // - materialized by calling T->emit();
> // - removed by calling T->remove();
> // - transfered to the JITDylib by calling T->release();
> auto T = std::make_unique<ResourceTracker>();
> ExitOnErr(J.addIRModule(TrackedModule, T->getKey()));
>
> Early feedback on this API sketch is welcome. Otherwise I hope to have
> early reviews / discussion ready in time for next week.
>
> -- Lang.
>
> -- https://flowcrypt.com/pub/stefan.graenitz@gmail.com
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200422/16599353/attachment.html>
More information about the llvm-dev
mailing list