CMI is an optimizing frontend for gcc which allows gcc to inline across module boundaries without requiring you to put inline functions in header files or even mark inline functions for inlining. It makes your code go faster, makes your code smaller, makes your embedded software use less stack space, is a preprocessor for gcc, supports most gcc extensions, and is able to deal with such notoriously tricky code as the glibc header files. It works by merging multiple C files into one file, topologically sorting the definitions so that definitions come before uses, and marks functions as inline. It controls code bloat by deleting dead code and inlining up until a user-specified budget is reached. You can use user-specified heuristics to select which functions to inline (it includes a tool which uses gprof output to choose inlinings to illustrate this).