I use LLVM to compile libtomcrypt, it's very fast (a few seconds) but when I use a blank pass (just a module pass that does nothing), it's very slow (several minute).
Someone know why?
I use Fedora 19.
The LLVM I use is LLVM 3.4 in release build.
Thanks
I can think of two ways in which an empty module pass can negatively impact compile-time:
Module passes force a sort of synchronization point on a pass manager. So for example, let's say you have the following:
On a module with two functions f()
and g()
. The pass manager can (and will) first run A and B on f()
, and only then A and B on g()
. This is useful, among other reasons, for memory locality.
However, if you add a module pass:
Then you force the pass manager to first run A on both functions, then the module pass, and then B on both functions.
From the documentation:
If a pass does not implement the getAnalysisUsage method, it defaults to not having any prerequisite passes, and invalidating all other passes.
So if your runOnModule
method returns true
, the pass manager considers every previous analysis pass as invalid, forcing rerunning them if they are needed later on.
For a more complete picture, I recommend reading the documentation for a full explanation on what a pass manager does.