Results 1 -
5 of
5
Register allocation by proof transformation
- Science of Computer Programming
, 2004
"... Abstract. This paper presents a proof-theoretical framework for register allocation that accounts for the entire process of register allocation. Liveness analysis is proof reconstruction (similar to type inference), and register allocation is proof transformation from a proof system with unrestricte ..."
Abstract
-
Cited by 7 (3 self)
- Add to MetaCart
Abstract. This paper presents a proof-theoretical framework for register allocation that accounts for the entire process of register allocation. Liveness analysis is proof reconstruction (similar to type inference), and register allocation is proof transformation from a proof system with unrestricted variable accesses to the one with restricted variable access. In our framework, the set of registers acts as the “working set ” of the live variables at each instruction step, which changes during the execution of the code. This eliminates the ad-hoc notion of “spilling”. The necessary memory-register moves are systematically incorporated in the proof transformation process. Its correctness is a simple corollary of our construction; the resulting proof is equivalent to the proof of the original code modulo the treatment of structural rules. This yields a simple yet powerful register allocation algorithm. The algorithm has been implemented, demonstrating the feasibility of the framework 1. 1
A Framework for End-to-End Verification and Evaluation of Register Allocators
"... This paper presents a framework for designing, verifying, and evaluating register allocation algorithms. The proposed framework has three main components. The first component is MIRA, a language for describing programs prior to register allocation. The second component is FORD, a language that desc ..."
Abstract
-
Cited by 6 (3 self)
- Add to MetaCart
This paper presents a framework for designing, verifying, and evaluating register allocation algorithms. The proposed framework has three main components. The first component is MIRA, a language for describing programs prior to register allocation. The second component is FORD, a language that describes the results produced by the register allocator. The third component is a type checker for the output of a register allocator which helps to find bugs. To illustrate the effectiveness of the framework, we present RALF, a tool that allows a register allocator to be integrated into the gcc compiler for the StrongARM architecture. RALF simplifies the development of register allocators by sheltering the programmer from the internal complexity of gcc. MIRA and FORD’s features are sufficient to implement most of the register allocators currently in use and are independent of any particular register allocation algorithm or compiler. To demonstrate the generality of our framework, we have used RALF to evaluate eight different register allocators, including iterated register coalescing, linear scan, a chordal based allocator, and two integer linear programming approaches.
A Typed Functional Language for Expressing Register Usage
, 1998
"... This paper lays a theoretical ground for exploring a type based approach to register allocation for purely functional languages. We present the compiler intermediate language R , a typed functional language with explicit register usage. The basic idea in our system is to use annotated types to propa ..."
Abstract
-
Cited by 2 (0 self)
- Add to MetaCart
(Show Context)
This paper lays a theoretical ground for exploring a type based approach to register allocation for purely functional languages. We present the compiler intermediate language R , a typed functional language with explicit register usage. The basic idea in our system is to use annotated types to propagate information on where, i.e., in which register or stack-slot, a value is or is expected to be. For functions, their types state which registers might be overwritten upon application of the function. The language R , which is a call by value lambda calculus with flavours of assembly language, contains annotations that specify the register and stack behaviour of the machine-code that will be generated for a particular term. The type system uses annotated types and effects to capture estimates and descriptions of the register behaviour of terms. Polymorphism and sub-typing (sub-effecting) allows for very accurate register behaviour descriptions to be made by the types. We state a soundness ...
Inferring Annotated Types for Inter-procedural Register Allocation with Constructor Flattening
, 2002
"... We introduce an annotated type system for a compiler intermediate language. The type system is designed to support inter-procedural register allocation and the representation of tuples and variants directly in the register file. We present an algorithm that generates constraints for assigning annota ..."
Abstract
-
Cited by 1 (0 self)
- Add to MetaCart
We introduce an annotated type system for a compiler intermediate language. The type system is designed to support inter-procedural register allocation and the representation of tuples and variants directly in the register file. We present an algorithm that generates constraints for assigning annotations, and prove its soundness with respect to the type system.
General Terms
"... We introduce an annotated type system for a compiler intermediate language. The type system is designed to support inter-procedural register allocation and the representation of tuples and variants directly in the register file. We present an algorithm that generates constraints for assigning annota ..."
Abstract
- Add to MetaCart
We introduce an annotated type system for a compiler intermediate language. The type system is designed to support inter-procedural register allocation and the representation of tuples and variants directly in the register file. We present an algorithm that generates constraints for assigning annotations, and prove its soundness with respect to the type system. Categories and Subject Descriptors