Yep, I guess it doesn't quite reflect the modern reality for memory and cache access there - although at least primitive types are unboxed, inlined in arrays and records, and represented as machine types. There are probably more opportunities to do that in a whole-program compiler, which doesn't need to carry type information between modules.
I believe it also doesn't do SIMD auto-vectorization, which is a recent improvement in C++ compilers that's made a difference to some of my own code.