[LLVMdev] Rendering MachineFunctions as HTML.

Lang Hames lhames at gmail.com
Tue Jul 20 00:15:32 PDT 2010

Hi All,

I've developed a pass to render machine functions as HTML pages with some
accompanying information about liveness and register pressure.

Current features:

Renders machine functions, optionally displaying estimated register pressure
for selected register classes, and liveness for selected intervals.

The following command line options can be used to enable and customise the

-regalloc=pbqp -rmf-funcs=<function list> -rmf-classes=<class
list> -rmf-intervals=<interval list>

<function list> is a coma seperated list of functions to render, or * to
render all functions in the module (each will be output to its own html

<class list> is a coma seperated list of register classes to render pressure
for (give their string names, such as GR32), or * to render all classes).

<interval list> is a list of interval ranges to render. Each range can be
one of the following:
           *  : all intervals
        virt* : all virtual register intervals
        phys* : all physical intervals
        <reg> : the interval for register <reg>
<start>-<end> : intervals for all registers in [start, end]

So an example invocation might look like:

llc -regalloc=pbqp -rmf-funcs=* -rmf-classes=GR8,GR16,GR32
-rmf-intervals=virt* -o s76t_info.s s76t_info.opt.bc

(Render all functions s76t_info.opt.bc in showing register pressure for GR8,
GR16 and GR32, and showing live intervals for all virtual registers.)

By using the options above to narrow the rending to the things you're
interested in (or turning everything on to get a big picture), you can gain
a bit of insight into what the compiler is doing with your function.

There's still plenty to be done (see postscript for suggestions), but it's
stable enough to be worth checking out, if you're in to this kind of
thing. Feedback and suggestions very welcome.

Finally an acknowledgement: The machine function rendering project got
started at AusHac2010 (http://www.haskell.org/haskellwiki/AusHac2010) due to
strong interest in LLVM's register allocator from several GHC LLVM backend
hackers. Many thanks to Alex Mason and Ivan Miljenovic for organising such a
great event, and to all the other attendees for making it a really enjoyable



* Better register pressure estimates.
* Markers for where spilled intervals were defined/used.
* Loop depth information.
* Nicer rendering (syntax highlighted MachineInstrs?)
* Reduce redundancy in HTML code (files are very big for large functions).
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20100720/7c50f1dc/attachment.html>

More information about the llvm-dev mailing list