That makes sense for statically typed languages like C and Java.
But it's not useful to generate assembly code for dynamic languages -- most of the time you don't know what the data types are, so variable references will result in branches branch depending on the data type. There is some benefit from removing the interpreter dispatch overhead, but it seems not significant enough that languages would want to adopt it. It may indeed explode your cache footprint if all those branches become inlined rather than being in the interpreter loop.
And depending on on what level the compilation is done, you may lose much of the flexibility and introspection that dynamic languages give you.
That's why all fast dynamic language implementations use a JIT rather than static a compiler -- they benefit from knowing what the types are run-time and can fall back to the interpreter in un-optimized cases.