[LLVMdev] LLVM projects: Change framework
jp at hapra.at
Wed Apr 25 23:56:42 PDT 2007
thanks for your interest.
Vikram S. Adve schrieb:
> What exactly can you describe in this change language?
The language itself is based on so called providers. Providers run
within the execution engine and export information (static) for fast
evaulation. Every node in the representation is visited (at a certain
scope). Providers declare their scope (such as function, basic bock, ...)
So you can write a provder and use it right away with the change
language. The change language itself is simply a C like langauge that
compiles to LLVM and gets loaded by the execution engine.
The change language is composed of a a predicate and some change
statements (in a body) . The predicate gets translated to a LLVM
function and get compiled to machine code at application time. Such that
the predicate function can be called on any node visited in a static way.
If this function call evaluates to true, then the system knows to insert
the changes at that point. Since the body of the change is also already
in llvm representation the transformation is simply adding the nodes at
that point into the graph and keeping an undo record.
What can be achieved really depends on how clever the provider is. For
instance I sketched out a loopinfoProvider that works by DFS on the CFG
to produce loop information points (such as LoopEnter, LoopExit,
LoopHeaderEnter,...) The change language can use this provider and
insert code at every LoopExit/LoopEnter,... points.
In order to express dynamic information (at run-time) a TLS object is
introduced, that exports function pointers to set and get named values
on TLS. These are pluggable too. Such that one can write her/his own
magic value (io, thread, ...) that provide dynamic services. At this
time the provider visits nodes and performs predicate checks based on
the supplied change predicates.
> There is a
> lot of research happening now on techniques to identify the best
> sequence of optimizations for a particular program, or just the best
> output form for the program. There are no really good
> infrastructures for this kind of work, but we have been interested in
> making LLVM useful for such work. (LLVM has been used by Keith
> Cooper's group at Rice for this purpose because it allows very easy
> pipelining of passes.)
That is interesting. I for instance have thought about using the change
framework for hot spot analysis, since this is what basically could be
done (using loop information... ). Thought the change framework has some
problems transforming existing code. It merely inserts code at certain
points at this time. One would have to identify how to express changing
of the LLVM graph by transformation. For instance write a change that
performs function inlining or loop unrolling ....
The framework is there.
> I'm wondering if the change language can be used to describe a
> sequence of transformations more abstractly to make this kind of
> research easier and more systematic?
See above I think what is imissing now is how to transform existing
instruction sequences, and not merely inserting them at points.
> On Apr 25, 2007, at 2:01 AM, Jakob Praher wrote:
>> hi all,
>> I have used LLVM extensively over the last 2 years.
>> I have realized a so called change framework that based on the LLVM
>> Basically it is a framework that augments the JIT to understand
>> "changes", such that a mutator process can formulate changes in a
>> language (inspired by DTrace's D), which is too compiled to LLVM and
>> sent to the application process.
>> The application process than transforms the IR and marks the functions
>> as beeing dirty. After a detection period, the changes are detected
>> the functions in question get recompiled and relinked, such that the
>> change is now applied within the application.
>> Every change can be undone. This is done by keeping an undo record of
>> changes (allthough other approaches would seem fit also).
>> The thesis can be found on http://www.prahersoft.com/~jp/da.pdf.
>> Part of the thesis is an extensive documentation of the LLVM framework
>> from a 10000 feet view. This might be interesting to new-comers.
>> The reason why I did not post information on this list, is that the my
>> university rules did not allow me to.
>> I would be interested in hearing from you about it.
>> -- Jakob
>> LLVM Developers mailing list
>> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
More information about the llvm-dev