Tm: a code generator for recursive data structures
Software—Practice & Experience
Syntactic abstraction in Scheme
Lisp and Symbolic Computation
Register allocation using lazy saves, eager restores, and greedy shuffling
PLDI '95 Proceedings of the ACM SIGPLAN 1995 conference on Programming language design and implementation
Extending the scope of syntactic abstraction
Proceedings of the 26th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Functional Programming with Bananas, Lenses, Envelopes and Barbed Wire
Proceedings of the 5th ACM Conference on Functional Programming Languages and Computer Architecture
Fast and Effective Procedure Inlining
SAS '97 Proceedings of the 4th International Symposium on Static Analysis
SableCC, an Object-Oriented Compiler Framework
TOOLS '98 Proceedings of the Technology of Object-Oriented Languages and Systems
A nanopass infrastructure for compiler education
Proceedings of the ninth ACM SIGPLAN international conference on Functional programming
Automated soundness proofs for dataflow analyses and transformations via local rules
Proceedings of the 32nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Fixing Letrec: A Faithful Yet Efficient Implementation of Scheme's Recursive Binding Construct
Higher-Order and Symbolic Computation
Automatic inference of optimizer flow functions from semantic meanings
Proceedings of the 2007 ACM SIGPLAN conference on Programming language design and implementation
Implicit phasing for R6RS libraries
ICFP '07 Proceedings of the 12th ACM SIGPLAN international conference on Functional programming
The JastAdd system — modular extensible compiler construction
Science of Computer Programming
Stratego/XT 0.17. A language and toolset for program transformation
Science of Computer Programming
A language for specifying compiler optimizations for generic software
A language for specifying compiler optimizations for generic software
The Scheme Programming Language, 4th Edition
The Scheme Programming Language, 4th Edition
A pattern for almost homomorphic functions
Proceedings of the 8th ACM SIGPLAN workshop on Generic programming
A nanopass framework for commercial compiler development
A nanopass framework for commercial compiler development
Hi-index | 0.00 |
Contemporary compilers must typically handle sophisticated high-level source languages, generate efficient code for multiple hardware architectures and operating systems, and support source-level debugging, profiling, and other program development tools. As a result, compilers tend to be among the most complex of software systems. Nanopass frameworks are designed to help manage this complexity. A nanopass compiler is comprised of many single-task passes with formally defined intermediate languages. The perceived downside of a nanopass compiler is that the extra passes will lead to substantially longer compilation times. To determine whether this is the case, we have created a plug replacement for the commercial Chez Scheme compiler, implemented using an updated nanopass framework, and we have compared the speed of the new compiler and the code it generates against the original compiler for a large set of benchmark programs. This paper describes the updated nanopass framework, the new compiler, and the results of our experiments. The compiler produces faster code than the original, averaging 15-27% depending on architecture and optimization level, due to a more sophisticated but slower register allocator and improvements to several optimizations. Compilation times average well within a factor of two of the original compiler, despite the slower register allocator and the replacement of five passes of the original 10 with over 50 nanopasses.