Randy Allen, Ken Kennedy — Optimizing Compilers for Modern Architectures — Morgan Kaufmann, 2002, 790 pp. ISBN 1-55860-286-0
The book presents all the high-performance and vectorizing optimizations a compiler should be able to perform on source code while using trade-offs from the underlying architecture (with considerations such as the memory hierarchy and the instruction set) and the semantics of the language.
The book uses Fortran-like pseudo-code for the examples. At first, it seemed somewhat queer, but in the end it makes perfect sense as the pseudo-code language is so simple and unambiguous that it requires no explaination at all. Only two chapters are dedicated to “real” programming languages: C and Fortran, and I might have wanted another one, maybe Java, to show that the techniques can be applied to virtual-machine based languages. Everything else is concerned with abstract optimisation strategies.