Secrets of the Glasgow Haskell Compiler inliner. Higher-order languages such as Haskell encourage the programmer to build abstractions by composing functions. A good compiler must inline many of these calls to recover an efficiently executable program. In principle, inclining is dead simple: just replace the call of a function by an instance of its body. But any compiler-writer will tell you that inclining is a black art, full of delicate compromises that work together to give good performance without unnecessary code bloat. The purpose of this paper is, therefore, to articulate the key lessons we learned from a full-scale “production” inliner, the one used in the Glasgow Haskell compiler. We focus mainly on the algorithmic aspects, but we also provide some indicative measurements to substantiate the importance of various aspects of the inliner.

References in zbMATH (referenced in 67 articles , 1 standard article )

Showing results 1 to 20 of 67.
Sorted by year (citations)

1 2 3 4 next

  1. Ahn, Ki Yung; Vezzosi, Andrea: Executable relational specifications of polymorphic type systems using Prolog (2016)
  2. Downen, Paul; Maurer, Luke; Ariola, Zena M.; Peyton Jones, Simon: Sequent calculus as a compiler intermediate language (2016)
  3. Kapfer, Simon: Computing cup products in integral cohomology of Hilbert schemes of points on $K3$ surfaces (2016)
  4. Newton, Ryan R.; Fogg, Peter P.; Varamesh, Ali: Adaptive lock-free maps: purely-functional to scalable (2015)
  5. Yang, Edward Z.; Campagna, Giovanni; Ağacan, Ömer S.; El-Hassany, Ahmed; Kulkarni, Abhishek; Newton, Ryan R.: Efficient communication and collection with compact normal forms (2015)
  6. Duck, Gregory J.; Haemmerlé, Rémy; Sulzmann, Martin: On termination, confluence and consistent CHR-based type inference (2014)
  7. Linton, S.; Hammond, K.; Konovalov, A.; Brown, C.; Trinder, P.W.; Loidl, H.-W.; Horn, P.; Roozemond, D.: Easy composition of symbolic computation software using SCSCP: a new Lingua Franca for symbolic computation (2013)
  8. Mainland, Geoffrey; Leshchinskiy, Roman; Peyton Jones, Simon: Exploiting vector instructions with generalized stream fusion (2013)
  9. Petersen, Leaf; Orchard, Dominic; Glew, Neal: Automatic SIMD vectorization for Haskell (2013)
  10. Popeea, Corneliu; Chin, Wei-Ngan: Dual analysis for proving safety and finding bugs (2013)
  11. Weirich, Stephanie; Hsu, Justin; Eisenberg, Richard A.: System FC with explicit kind equality (2013)
  12. Axelsson, Emil; Sheeran, Mary: Feldspar: Application and implementation (2012) ioport
  13. Bergstrom, Lars; Reppy, John: Nested data-parallelism on the GPU (2012)
  14. Schilling, Thomas: Challenges for a trace-based just-in-time compiler for Haskell (2012) ioport
  15. Schilling, Thomas: Constraint-free type error slicing (2012) ioport
  16. Vytiniotis, Dimitrios; Peyton Jones, Simon; Magalhães, José Pedro: Equality proofs and deferred type errors, a compiler pearl (2012) ioport
  17. Weirich, Stephanie: Dependently-typed programming in GHC (2012) ioport
  18. Liu, Hai; Cheng, Eric; Hudak, Paul: Causal commutative arrows (2011)
  19. Morihata, Akimasa: A short cut to optimal sequences (2011)
  20. Hamana, Makoto: Semantic labelling for proving termination of combinatory reduction systems (2010)

1 2 3 4 next