[LLVMdev] Most efficient way to count # of intrcutions in a module ?

Nick Lewycky nicholas at mxc.ca
Tue Apr 13 23:13:41 PDT 2010


Gabi wrote:
> I need to count the total number of instructions in a given module.
> The only way I found is using the obvious  double iteration as seen
> below. Is there any more efficient way to achieve this ? I don't like
> the fact that simple calculation like that has performance of o(F*B)
> (# of functions * # of blocks per function)

If you just want to know given a .bc file, you can run 'opt -instcount 
-stats' which is a pass that does pretty much what you wrote, except 
that it does a per-instruction breakdown which means that it will be a 
little slower.

> unsigned int calcSize(Module* mod)
> {
>      unsigned int size = 0;
>      for (Module::iterator f = mod->begin(), fe = mod->end(); f != fe; ++f)
>          for (Function::iterator b = f->begin(), be = f->end(); b != be; ++b)
>          {
>              BasicBlock* bb = (BasicBlock*) b;
>              size+=bb->getInstList().size();
>          }
>      return size;
> }

Your implementation isn't actually O(n^2) if that's what you're worried 
about. It's just O(n) where n is the # instructions in the whole 
program. You're doing it as efficiently as possible.

Also, you should be able to write 'size += b->getInstList().size()' 
without the explicit cast.

Nick



More information about the llvm-dev mailing list