These are separate, mostly unrelated passes. Putting them in their own files makes it easier to read the code, understand how to control the passes, and makes it possible to independently trace, and debug them.