Split the compiler assembly into two assemblies. This is a small step to reduce the hard-dependencies inside project. This makes easier (a bit) to search for bugs. Still is a long way to go.
The middle end has to be separated from the backend (which effectively writes the code).