[LLVMdev] runtime optimizations in LLVM
Gordon Henriksen
gordonhenriksen at mac.com
Sun Jul 6 22:37:18 PDT 2008
On 2008-07-07, at 01:12, Kamal R. Prasad wrote:
> On Thu, 1/3/08, Gordon Henriksen <gordonhenriksen at mac.com> wrote:
>>
>
>> On Jan 2, 2008, at 05:57, Kamal R. Prasad wrote:
>>
>>> Can someone provide info on what runtime optimizations are done in
>>> LLVM?
>>
>> You can use any of LLVM's optimizing transformations in a JIT
>> context. There's a list here:
>>
>> http://llvm.org/docs/Passes.html
>>
>> Unlike Java, you're in the driver's seat. You can determine which
>> optimizations are applied to your code, and when.
>
> yes -but can you tell me which optimizations have been proven to be
> more effective when applied at run time i.e. when input data is
> available?
LLVM's 'opt' tool supports a -std-compile-opts flag which runs a
generic list of optimizations; this is a good starting point for
aggressive optimizations, and you can access the same list
programmatically. The problem of pass ordering is a nontrivial one,
however, and only you can decide what is the best tradeoff for your
application. Luckily, experimentation with passes is not especially
difficult.
>>> do you have something along lines of JVM's hotspot feature?
>>
>> You can recompile a function in the JIT at any time.
>>
>
> I am interested in optimizing code that was compiled using a C/C++
> compiler. So, I will have binaries but probably not the source code.
You must have LLVM IR (possibly in the form of bitcode files) to
optimize using LLVM; LLVM cannot re-optimize native binaries. Search
the archives for llvm-qemu to find information on the topic of binary
translation/optimization using LLVM.
However, you can certainly reoptimize bitcode files without access to
the source code.
>>> How efficient is the optimized code vis-a-vis native code?
>>
>> It is native code! :) LLVM is also an excellent static compiler
>> (see llvm-gcc, clang).
>>
>
> can I pull out the backend part which is used for runtime
> optimization?
These are the exact same components used for static optimization.
Certainly, however, you can link with subsets of LLVM in order to
reduce the size of your binary.
— Gordon
More information about the llvm-dev
mailing list