Split into multiple compiler passes