Reading (and viewing) list
David M. Lloyd edited this page Jun 7, 2023
·
5 revisions
This is a continually updated listing of relevant and interesting documents (and, where possible, links) for further reading:
- C2, The JIT In HotSpot by Cliff Click (:tv: here is a video)
- A Simple Graph-Based Intermediate Representation by Cliff Click, Michael Paleczny
- CT IR Graph and Nodes (OpenJDK wiki page)
- Too Much Theory by Cliff Click:
- No More Gotos: ... by Khaled Yakdan, Sebastian Eschweiler, Elmar Gerhards-Padilla, Matthew Smith
- A Fast Algorithm for Finding Dominators in a Flowgraph by Thomas Lengauer and Robert Endre Tarjan (here's another link)
- SSA-based reduction of operator strength Christopher Allen Vick (pages 11-15, "Find Loops", is specifically of interest)
- Testing Flow Graph Reducibility by Robert Endre Tarjan
- Combining Analyses, Combining Optimizations by Cliff Click (not OCR'd)
- Copy-and-Patch Compilation by Haoran Xu, Fredrik Kjolstad
- Computing Liveness Sets for SSA-Form Programs by Florian Brandner, Benoit Boissinot, Alain Darte, Benoît Dupont de Dinechin, Fabrice Rastello
- An Improvement to Bottom-up Tree Pattern Matching by David R. Chase
- Beyond Relooper: recursive translation of unstructured control flow to structured control flow by Norman Ramsey and related project Waffle by Chris Fallin
- Register Allocation for Programs in SSA Form by Sebastian Hack
- SSA Elimination After Register Allocation by Fernando Magno Quintão Pereira, Jens Palsberg
- The JVM Specification (version 17)
- The Moxie JVM Experience by S. Blackburn, Sergey I. Salishev, M. Danilov, Oleg A. Mokhovikov, Anton A. Nashatyrev, P. Novodvorsky, Vadim I. Bogdanov, X. Li, D. Ushakov
- Confinement in the VM by John Rose
- Fast Interprocedural Class Analysis by Greg DeFouw, David Grove, Craig Chambers
- Space- and Time-Efficient Implementation of the Java Object Model by David F. Bacon, Stephen J. Fink, and David Grove
- Efficient implementation of Java interfaces: Invokeinterface considered harmless by Bowen Alpern, Anthony Cocchi, Stephen Fink, David Grove (paywall)
- Fast Static Analysis of C++ Virtual Function Calls by David F. Bacon and Peter F. Sweeney (describes RTA in section 2.3) (here's another link)
- Perfect Hashing as an Almost Perfect Subtype Test by Roland Docournau
- Practical virtual method call resolution for Java by Vijay Sundaresan, Laurie J. Hendren, Chrislain Razafimahefa, Raja Vallée-Rai, Patrick Lam, Etienne Gagnon, Charles Godin
- The LLVM language reference
- The LLVM
getelementptr
instruction - A Complete Guide to LLVM for Programming Language Creators by Mukul Rathi
- Mapping High Level Constructs to LLVM IR by Various authors
- How to learn compilers: LLVM edition
- Opaque pointers
- Java Memory Model Pragmatics by Aleksey Shipilëv
- Using JDK 9 Memory Order Modes by Doug Lea
- P0098R0: Towards Implementation and Use of memory order consume by Paul E. McKenney, Torvald Riegel, Jeff Preshing, Hans Boehm, Clark Nelson, Olivier Giroux, and Lawrence Crowl, among others
- Eclipse OMR, with some useful/interesting GC implementations
- Jarmin, a closed-world DCE tool for Java
- An interesting article about coroutines using
swapcontext(3)
- 📺 C++ Exceptions and Stack Unwinding by Dave Watson at CppCon 2017
- Implementing Fast Java™ Monitors and Relaxed-Locks by David Dice
- Thin Locks: Featherweight Synchronization for Java by David F. Bacon, Ravi Konuru, Chet Murthy, Mauricio Serrano
- Compact Java Monitors by Dave Dice, Alex Kogan
- A Tutorial Introduction to the ARM and POWER Relaxed Memory Models by Luc Maranget, Susmit Sarkar, Peter Sewell
- Specifying ARM Concurrency: Multicopy-Atomic Axiomatic and Operational Models for ARMv8 by Christopher Pulte, Shaked Flur, Will Deacon, Jon French, Susmit Sarkar, Peter Sewell
- 📺 Falcon JIT and escape analysis (video) by Artur Pitipenko
- Partial Escape Analysis and Scalar Replacement for Java by Lukas Stadler
- 📺 Current state of [escape analysis] and its uses in the JVM (video) by Charlie Gracie
-
Escape analysis for Java by Jong-Deok Choi, Manish Gupta, Mauricio Serrano, Vugranam C. Sreedhar, Sam Midkiff
- Stack Allocation and Synchronization Optimizations for Java Using Escape Analysis by Jong-Deok Choi, Manish Gupta, Mauricio Serrano, Vugranam C. Sreedhar, Samuel Midkiff (NOTE: This is a longer version of the "Escape analysis for Java" paper)
-
Gist: HotSpot Escape Analysis and Scalar Replacement Status
- Escape Analysis in the Context of Dynamic Compilation and Deoptimization by Thomas Kotzmann, Hanspeter Mössenböck - According to the gist, C2's interprocedural analysis is currently based on this paper.
- Scalable Propagation-Based Call Graph Construction Algorithms by Frank Tip, Jens Palberg
- 📺 The Coffee Compiler Club (ongoing video series) by Cliff Click and various others
- Initialize Once, Start Fast: Application Initialization at Build Time by Christian Wimmer, Codrut Stancu, Peter Hofer, Vojin Jovanovic, Paul Wögerer, Peter B. Kessler, Oleg Pliss, Thomas Würthinger
- GraalVM Publications by various authors