Compilers: principles, techniques, and tools
Compilers: principles, techniques, and tools
ORBIT: an optimizing compiler for scheme
SIGPLAN '86 Proceedings of the 1986 SIGPLAN symposium on Compiler construction
Characterizing computer performance with a single number
Communications of the ACM
Realistic compilation by program transformation (detailed summary)
POPL '89 Proceedings of the 16th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Compilation of functional languages by program transformation
ACM Transactions on Programming Languages and Systems (TOPLAS)
A modular fully-lazy lambda lifter in Haskell
Software—Practice & Experience
Unboxed values as first class citizens in a non-strict functional language
Proceedings of the 5th ACM conference on Functional programming languages and computer architecture
Compiling with continuations
The essence of compiling with continuations
PLDI '93 Proceedings of the ACM SIGPLAN 1993 conference on Programming language design and implementation
A natural semantics for lazy evaluation
POPL '93 Proceedings of the 20th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Compiler transformations for high-performance computing
ACM Computing Surveys (CSUR)
A call-by-need lambda calculus
POPL '95 Proceedings of the 22nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
The Expressiveness of Simple and Second-Order Type Structures
Journal of the ACM (JACM)
The nofib Benchmark Suite of Haskell Programs
Proceedings of the 1992 Glasgow Workshop on Functional Programming
Orbit: an optimizing compiler for scheme
Orbit: an optimizing compiler for scheme
Compilation by program transformation
Compilation by program transformation
The Implementation of Functional Programming Languages (Prentice-Hall International Series in Computer Science)
Lambda-splitting: a higher-order approach to cross-module optimizations
ICFP '97 Proceedings of the second ACM SIGPLAN international conference on Functional programming
Graphs in compilation (poster)
ICFP '97 Proceedings of the second ACM SIGPLAN international conference on Functional programming
Lambda-dropping: transforming recursive equations into programs with block structure
PEPM '97 Proceedings of the 1997 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
Bridging the gulf: a common intermediate language for ML and Haskell
POPL '98 Proceedings of the 25th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A systematic study of functional language implementations
ACM Transactions on Programming Languages and Systems (TOPLAS)
Proceedings of the 26th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Improvement in a lazy context: an operational theory for call-by-need
Proceedings of the 26th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Higher-Order and Symbolic Computation
Proceedings of the sixth ACM SIGPLAN international conference on Functional programming
Possibilities and limitations of call-by-need space improvement
Proceedings of the sixth ACM SIGPLAN international conference on Functional programming
Concatenate, reverse and map vanish for free
Proceedings of the seventh ACM SIGPLAN international conference on Functional programming
Erratic fudgets: a semantic theory for an embedded coordination language
Science of Computer Programming - Special issue on coordination languages and architectures
Specification and Correctness of Lambda Lifting
SAIG '00 Proceedings of the International Workshop on Semantics, Applications, and Implementation of Program Generation
Erratic Fudgets: A Semantic Theory for an Embedded Coordination Language
COORDINATION '99 Proceedings of the Third International Conference on Coordination Languages and Models
Non-determinism Analysis in a Parallel-Functional Language
IFL '00 Selected Papers from the 12th International Workshop on Implementation of Functional Languages
A Usage Analysis with Bounded Usage Polymorphism and Subtyping
IFL '00 Selected Papers from the 12th International Workshop on Implementation of Functional Languages
A Polynomial-Cost Non-determinism Analysis
IFL '02 Selected Papers from the 13th International Workshop on Implementation of Functional Languages
Observable Sharing for Functional Circuit Description
ASIAN '99 Proceedings of the 5th Asian Computing Science Conference on Advances in Computing Science
Specification and correctness of lambda lifting
Journal of Functional Programming
Secrets of the Glasgow Haskell Compiler inliner
Journal of Functional Programming
Using Circular Programs to Deforest in Accumulating Parameters
Higher-Order and Symbolic Computation
Call-pattern specialisation for Haskell programs
ICFP '07 Proceedings of the 12th ACM SIGPLAN international conference on Functional programming
Higher-Order and Symbolic Computation
A Supercompiler for Core Haskell
Implementation and Application of Functional Languages
A higher-order strategy for eliminating common subexpressions
Computer Languages, Systems and Structures
Proceedings of the 2nd ACM SIGPLAN symposium on Haskell
Electronic Notes in Theoretical Computer Science (ENTCS)
Proceedings of the 15th ACM SIGPLAN international conference on Functional programming
Polymorphism, subtyping, whole program analysis and accurate data types in usage analysis
APLAS'06 Proceedings of the 4th Asian conference on Programming Languages and Systems
Guiding parallel array fusion with indexed types
Proceedings of the 2012 Haskell Symposium
Work efficient higher-order vectorisation
Proceedings of the 17th ACM SIGPLAN international conference on Functional programming
Causality of optimized Haskell: what is burning our cycles?
Proceedings of the 2013 ACM SIGPLAN symposium on Haskell
Modular, higher-order cardinality analysis in theory and practice
Proceedings of the 41st ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages
Hi-index | 0.01 |
Virtually every compiler performs transformations on the program it is compiling in an attempt to improve efficiency. Despite their importance, however, there have been few systematic attempts to categorise such transformations and measure their impact.In this paper we describe a particular group of transformations --- the "let-floating" transformations --- and give detailed measurements of their effect in an optimizing compiler for the non-strict functional language Haskell. Let-floating has not received much explicit attention in the past, but our measurements show that it is an important group of transformations (at least for lazy languages), offering a reduction of more than 30% in heap allocation and 15% in execution time.