I like the nanopass concept,  particularly I am applying it to domain specific languages.  It is not necessarily so inefficient if it is optimized.  For instance,  data indexing and methods such as RETE networks can make the cost of running an irrelevant pass close to nothing.