I agree with your comments. When I started with the Lifeboat compiler "back in the day" I could visualize the assembly that would be generated with the C code being written. Reading from K&R, it's clear that constructs such as switch(), prefix/postfix increments and the like, the register modifer, etc. were all there to make it easier to generate straight-line assembly in a friendlier syntax (I seem to recall that it would, in fact, generate an assembly source listing if requested.). Even the #asm shows the intimacy between the two.
To your points, modern compilers "interpreting" C source into something that is much smaller/faster may get a Good Thing in the long run, but I miss the days when I could just code and know exactly what the compiler would produce. I also remember those times I had to write subroutines in assembler because the compiler refused to produce what I wanted. Sometimes the optimizer is wrong.