[LLVMdev] Deleting order and acquiring generated function
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Thu May 22 07:36:56 PDT 2008
There is a new feature since post-2.2 llvm, that gives the size of the
to-be generated function to the memory manager. vmkit has the same
constraints.
Just look at include/llvm/ExecutionEngine/JITMemoryManager.h, the flag
SizeRequired
Nicolas
Nicolas Capens wrote:
>
> Hi Evan,
>
> Thanks a lot for the information!
>
> It’s a viable solution to write my own JITMemoryManager, however I
> noticed that the JIT doesn’t know the length of the binary function
> before it is actually emitted. This is a bit inconvenient especially
> since I have to generate new functions at irregular times. I’m not too
> keen on using the non-standard _expand function to resize memory to
> the right size.
>
> Anyway, I also noticed that it’s also possible to do the following:
>
> executionEngine->removeModuleProvider(moduleProvider);
>
> delete moduleProvider;
>
> module->dropAllReferences();
>
> delete module;
>
> This way the memory overhead of the IR of the function is removed and
> the executionEngine stays around for further use and still manages the
> memory of the binary functions.
>
> So is this a sane approach?
>
> Kind regards,
>
> Nicolas
>
> *From:* llvmdev-bounces at cs.uiuc.edu
> [mailto:llvmdev-bounces at cs.uiuc.edu] *On Behalf Of *Evan Cheng
> *Sent:* Wednesday, 21 May, 2008 20:16
> *To:* LLVM Developers Mailing List
> *Subject:* Re: [LLVMdev] Deleting order and acquiring generated function
>
> When JITEmitter is teared down, it also deletes the JITMemoryManager
> instance. That in turns release the memory of the generated functions.
> Is this what you are referring to?
>
> The DefaultJITMemoryManager is pretty simple. You can obviously write
> your own memory manager class that maps the memory in a way that's
> persistent. Then all you have to do is to pass a handle of it to
> JITEmitter.
>
> Evan
>
> On May 21, 2008, at 2:48 AM, Nicolas Capens wrote:
>
>
>
> Hi all,
>
> I’m using LLVM to generate a fairly large number of separate functions
> at run-time. To minimize the memory overhead, I’d like to delete the
> IR and everything else that is no longer needed after a function has
> been generated (I don’t use lazy compilation or anything like that).
>
> I noticed that deleting the ExecutionEngine deletes everything
> (Module, Function(s), ExistingModuleProvider, and even the
> LLVMBuilder). Unfortunately it also frees the generated function in
> memory itself.
>
> So is there an existing way to delete everything except the in-memory
> generated function? Alternatively, is there a way to just delete the
> IR and related overhead so everything is ready for generating the next
> function?
>
> If both are possible, which is the best approach? I have to generate
> new functions from time to time, so keeping some of the LLVM objects
> around seems like a good idea if the cost of reconstructing them is
> considerable. As far as I can tell LLVM looks relatively light-weight
> though so I’d prefer deleting everything and keeping just the
> generated functions…
>
> Thanks again for any info,
>
> Nicolas Capens
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu <mailto:LLVMdev at cs.uiuc.edu> http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
More information about the llvm-dev
mailing list