Sofistikerete kompilatorer utfører vanligvis flere pass med ulike mellomformer. Denne prosessen med flere stadier blir benyttet fordi mange algoritmer for programvareoptimalisering er enklere å anvende en av gangen, eller fordi en optimalisering avhenger av den komplette prosessering som er utført av en annen optimalisering. Denne organiseringen gjør det også mulig å skape en kompilator for flere ulike arkitekturer, ettersom bare det siste av kodegenereringstadiene behøver å endres fra arkitektur til arkitektur.