1983•Medical Entomology and ZoologyRequires access

Register Allocation in Optimizing Compilers

Bruce W. Leverett

Open publisher page 29 citations

Abstract

The subject of this treatise is code optimization in compilers. I discuss both general strategies of optimizing compiler design and specific techniques for achieving individual optimizations. I am only secondarily interested in introducing new optimizations and algorithms; my goal is to integrate a comprehensive set of optimizations into a retargetable compiler. I introduce new formalizations of techniques that are, in many cases, already known. A compiler is retargetable if it can easily be adapted to changes in the machine for which it generates code. These include changing to a completely different machine (different instruction set). In the broadest sense they also include changes to the run-time conventions. Historically, it has proven to be difficult to achieve both retargetability and a high degree of code optimization with a single compiler design. I describe the design and implementation of part of a compiler that achieves both of those goals. I focus on a set of techniques somewhat loosely known as register allocation. This is the process of mapping data items in the source program onto storage locations in the target machine. Data items include variables, results of expression evaluations, results of hidden (implicit) computations, and frequently-used constants. Storage locations include accumulators, index registers, base registers, and (not least) memory locations.

About this research paper

What this paper is about

The subject of this treatise is code optimization in compilers. I discuss both general strategies of optimizing compiler design and specific techniques for achieving individual optimizations. I am only secondarily interested in introducing new optimizations and algorithms; my goal is to integrate a comprehensive set of optimizations into a retargetable compiler. I introduce new formalizations of techniques that are, in many cases, already known. A compiler is retargetable if it can easily be adapted to changes in the machine for which it generates code. These include changing to a completely different machine (different instruction set). In the broadest sense they also include changes to the run-time conventions. Historically, it has proven to be difficult to achieve both retargetability and a high degree of code optimization with a single compiler design. I describe the design and implementation of part of a compiler that achieves both of those goals. I focus on a set of techniques somewhat loosely known as register allocation. This is the process of mapping data items in the source program onto storage locations in the target machine. Data items include variables, results of expression evaluations, results of hidden (implicit) computations, and frequently-used constants. Storage locations include accumulators, index registers, base registers, and (not least) memory locations.

Why it matters

OpenAlex reports 29 citations for this work. Citation counts describe recorded attention and do not establish research quality.

Key contribution

A contribution statement is not available in the OpenAlex record.

Method / approach

Method details are not available in the OpenAlex metadata.

Main findings

Findings are not separately available in the OpenAlex metadata.

Limitations

Limitations are not available in the OpenAlex metadata.

Applications

Application details are not available in the OpenAlex metadata.

Available abstract

The subject of this treatise is code optimization in compilers. I discuss both general strategies of optimizing compiler design and specific techniques for achieving individual optimizations. I am only secondarily interested in introducing new optimizations and algorithms; my goal is to integrate a comprehensive set of optimizations into a retargetable compiler. I introduce new formalizations of techniques that are, in many cases, already known. A compiler is retargetable if it can easily be adapted to changes in the machine for which it generates code. These include changing to a completely different machine (different instruction set). In the broadest sense they also include changes to the run-time conventions. Historically, it has proven to be difficult to achieve both retargetability and a high degree of code optimization with a single compiler design. I describe the design and implementation of part of a compiler that achieves both of those goals. I focus on a set of techniques somewhat loosely known as register allocation. This is the process of mapping data items in the source program onto storage locations in the target machine. Data items include variables, results of expression evaluations, results of hidden (implicit) computations, and frequently-used constants. Storage locations include accumulators, index registers, base registers, and (not least) memory locations.

Key concepts: Compiler, Register allocation, Computer science, Interprocedural optimization, Programming language, Optimizing compiler, Parallel computing, Set (abstract data type)

Related papers

Back to paper searchBrowse research topicsOriginal source
Register Allocation in Optimizing Compilers — Research Paper | ScholarLens