ANN: CMI 1.0.0 - a cross-module inliner for C - written in Haskell

Alastair Reid alastair at
Mon Nov 24 16:13:35 EST 2003

[The following GPLed program may be of interest to you if:

- You want examples of programs written in Haskell that do something
- You sometimes hack C code as well as Haskell and want to make
  your code smaller, faster or better structured.
- You want a library of code for parsing and manipulating C programs.

Alastair Reid

The University of Utah's Flux Research Group announces the first
release of CMI, our cross-module inliner for C.  CMI is an optimizing
frontend for gcc which allows gcc to inline across module (i.e.,
function) boundaries without requiring you to put inline functions in
header files or even mark inline functions for inlining.  Get CMI's
open source code and docs at:

o makes your code go faster;
o is a preprocessor for gcc;
o supports most gcc extensions and is able to deal with such notoriosly
  tricky code as the glibc header files;
o works by merging multiple C files into one file, topologically sorting 
  the definitions so that definitions come before uses, and marks functions
  as inline;
o controls code-bloat by deleting dead code and inlining up until a
  user-specified budget is reached;
o can use user-specified heuristics to select which functions to inline
  (we include a tool which uses gprof output to choose inlinings to
  illustrate this);

CMI is part of an ongoing R&D effort.  We seek feedback, external
users, and collaborators whose experiences and insight will help
evolve CMI.

CMI is a small part of Knit, our C Components project.  To join the
knit-users or knit-announce mailing lists, send email to
majordomo at with, e.g., "subscribe knit-users" in the

Thanks go to DARPA for their support, and thanks go to the entire Knit
crew, but especially Alastair Reid, for the fine research,
development, and hard work that led to this release.

and Alastair says... Enjoy!

Jay Lepreau, lepreau at
Flux Research Group, School of Computing
University of Utah

More information about the Haskell mailing list