Function code size estimation


I am working on a pass that finds identical basic blocks and abstracts
them into functions, in order to reduce code size.

To decide, whether particular basic block group is worth factoring
out, I want to estimate code size of some function that uses one of
basic blocks in question 'as is', and after factoring the basic block
into a new function.

Can you please suggest a proper way to do this?


You could just count the number of Instructions as an extremely rough
estimate. llvm/Analysis/InlineCost.h has the functions used by the
inliner and other similar transforms to estimate the cost of a basic
block or function, which are somewhat more accurate.


Thanks Eli,

The thing that worries me in this approach is that it is really rough,
and to make it work I need to introduce and tune some target-specific
coefficients. I thought that if there is a way to just generate real
code and measure it's size, it would be simpler as well as more


I don't know the current state of the MC project
(, but
it could be used to measure the size of the native version of a
function assuming you can JIT it.