I don't think it every was a promising approach to let the compiler alone do that work. For one, it means that you basically have to recompile for every microarch, and the compiler needs all those details. But even then, the compiler can't fully predict cache behaviour etc. Which means ooo execution still is important.