Here is a data point on the subject of compilers that directly generate
object code :

The new SunPro SPARCompiler 3.0 does not go through an assembler to
generate object code (the previous versions did). However, it has been a
major pain to handle things like asm() instructions in C and assembly
language inline templates. However, the assembler front-end that was put
into the code generator was designed to take a character buffer and
disguise it as a file so that the same code could be used to handle asm(),
inline templates, as well as assembly language that could come from a file.

I personally feel that the compile time gain makes it worth doing direct
object code formatting, but it really complicates the code generator
design because whenever the code generator wants to emit anything, it
can't just do a "printf" -- it has to explicitly create a node with all
the right information on it. This has led to a general increase in the
amount of code in the code generator.