&gt; if you are thrashing a single graph over-and-over again, you are doing many passes.<p>A single &quot;pass&quot; can be thrashing a graph many times too, think of the things like instcombine (in LLVM parlance) or ADCE.<p>Essentially, compilation is rewriting of a source AST into the target machine code. It is up to you how to structure this rewrite, but the amount of work to be done remains the same.<p>For a human it is much easier to structure such a rewrite as a sequence of very trivial changes. And a &quot;sufficiently smart&quot; compiler must realise that it can be done in less steps.