On Validity of Program Transformations in the Java Memory Model
Compilers: Principles, Techniques, and Tools