Plenty of people produce object directly. (On the other hand, several
reasearch compilers produce C :-). Sometimes they'll also have a way to
produce assembly, for people who want to see what's happened to their
code, but it'll be a side step from the main compilation path.

A recent paper describing a fast C compiler is

A New C Compiler
Ken Thompson

I'm not sure it's been published. I pulled it from an ftp archive of
material on the Plan 9 OS.

Thompson achieves speed by combining the preprocessor with the parser, by
hand-coding the back end, by building object code directly, and by using a
special (slow) loader.

Fraser and Hanson don't include a preprocessor, use a hand written scanner
and parser and a machine-generated back end. On the other hand, I can't
tell from the paper if they generate object directly. I suspect not.
Why? Portability, probably.