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 88 articles , 1 standard article )

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

1 2 3 4 5 next

  1. Schrijvers, Tom; Oliveira, Bruno C. D. S.; Wadler, Philip; Marntirosian, Koar: COCHIS: stable and coherent implicits (2019)
  2. Baydin, Atılım Güneş; Pearlmutter, Barak A.; Radul, Alexey Andreyevich; Siskind, Jeffrey Mark: Automatic differentiation in machine learning: a survey (2018)
  3. Bendkowski, Maciej; Grygiel, Katarzyna; Tarau, Paul: Random generation of closed simply typed (\lambda)-terms: a synergy between logic programming and Boltzmann samplers (2018)
  4. Ishii, Hiromi: A purely functional computer algebra system embedded in Haskell (2018)
  5. Orchard, Dominic: Complexity bounds for container functors and comonads (2018)
  6. Shaikhha, Amir; Dashti, Mohammad; Koch, Christoph: Push versus pull-based loop fusion in query engines (2018)
  7. Ahn, Ki Yung; Vezzosi, Andrea: Executable relational specifications of polymorphic type systems using Prolog (2016)
  8. Breitner, Joachim; Eisenberg, Richard A.; Peyton Jones, Simon; Weirich, Stephanie: Safe zero-cost coercions for Haskell (2016)
  9. Downen, Paul; Maurer, Luke; Ariola, Zena M.; Peyton Jones, Simon: Sequent calculus as a compiler intermediate language (2016)
  10. Kapfer, Simon: Computing cup products in integral cohomology of Hilbert schemes of points on (K3) surfaces (2016)
  11. Sivaramakrishnan, K. C.; Harris, Tim; Marlow, Simon; Peyton Jones, Simon: Composable scheduler activations for Haskell (2016)
  12. Newton, Ryan R.; Fogg, Peter P.; Varamesh, Ali: Adaptive lock-free maps: purely-functional to scalable (2015)
  13. Smetsers, Sjaak; van Eekelen, Marko: Derivation and inference of higher-order strictness types (2015)
  14. 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)
  15. Duck, Gregory J.; Haemmerlé, Rémy; Sulzmann, Martin: On termination, confluence and consistent CHR-based type inference (2014)
  16. 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)
  17. Mainland, Geoffrey; Leshchinskiy, Roman; Peyton Jones, Simon: Exploiting vector instructions with generalized stream fusion (2013)
  18. Petersen, Leaf; Orchard, Dominic; Glew, Neal: Automatic SIMD vectorization for Haskell (2013)
  19. Popeea, Corneliu; Chin, Wei-Ngan: Dual analysis for proving safety and finding bugs (2013)
  20. Weirich, Stephanie; Hsu, Justin; Eisenberg, Richard A.: System FC with explicit kind equality (2013)

1 2 3 4 5 next