Results 1 -
5 of
5
Program Analysis and Specialization for the C Programming Language
, 1994
"... Software engineers are faced with a dilemma. They want to write general and wellstructured programs that are flexible and easy to maintain. On the other hand, generality has a price: efficiency. A specialized program solving a particular problem is often significantly faster than a general program. ..."
Abstract
-
Cited by 472 (0 self)
- Add to MetaCart
Software engineers are faced with a dilemma. They want to write general and wellstructured programs that are flexible and easy to maintain. On the other hand, generality has a price: efficiency. A specialized program solving a particular problem is often significantly faster than a general program. However, the development of specialized software is time-consuming, and is likely to exceed the production of today’s programmers. New techniques are required to solve this so-called software crisis. Partial evaluation is a program specialization technique that reconciles the benefits of generality with efficiency. This thesis presents an automatic partial evaluator for the Ansi C programming language. The content of this thesis is analysis and transformation of C programs. We develop several analyses that support the transformation of a program into its generating extension. A generating extension is a program that produces specialized programs when executed on parts of the input. The thesis contains the following main results.
Little Languages and their Programming Environments
- in Monterey Workshop on Engineering Automation for Software Intensive System Integration
, 2001
"... Programmers constantly design, implement, and program in little languages. Two different approaches to the implementation of little languages have evolved. One emphasizes the design of little languages from scratch, using conventional technology to implement interpreters and compilers. The other adv ..."
Abstract
-
Cited by 16 (1 self)
- Add to MetaCart
Programmers constantly design, implement, and program in little languages. Two different approaches to the implementation of little languages have evolved. One emphasizes the design of little languages from scratch, using conventional technology to implement interpreters and compilers. The other advances the idea of extending a general-purpose host language; that is, the little language shares the host language’s features (variables, data, loops, functions) where possible; its interpreters and compilers; and even its type soundness theorem. The second approach is often called a language embedding. This paper directs the attention of little language designers to a badly neglected area: the programming environments of little languages. We argue that an embedded little language should inherit not only the host language’s syntactic and semantic structure, but also its programming environment. We illustrate the idea with our DrScheme programming environment and S-XML, a little transformation language for XML trees. DrScheme provides a host of tools for Scheme: a syntax analysis tool, a static debugger, an algebraic stepper, a portable plugin system, and an interactive evaluator. S-XML supports the definition of XML languages using a simple form of schemas, the convenient creation of XML data, and the definition of XML transformations.
Experiences Using the ParaScope Editor: an Interactive Parallel Programming Tool
, 1993
"... The ParaScope Editor is an interactive parallel programming tool that assists knowledgeable users in developing scientific Fortran programs. It displays the results of sophisticated program analyses, provides a set of powerful interactive transformations, and supports program editing. This paper sum ..."
Abstract
-
Cited by 14 (2 self)
- Add to MetaCart
The ParaScope Editor is an interactive parallel programming tool that assists knowledgeable users in developing scientific Fortran programs. It displays the results of sophisticated program analyses, provides a set of powerful interactive transformations, and supports program editing. This paper summarizes experiences of scientific programmers and tool designers using the ParaScope Editor. We evaluate existing features and describe enhancements in three key areas: user interface, analysis, and transformation. Many existing features prove crucial to successful program parallelization. They include interprocedural array sideeffect analysis and program and dependence view filtering. Desirable functionality includes improved program navigation based on performance estimation, incorporating user assertions in analysis and more guidance in selecting transformations. These results offer insights for the authors of a variety of programming tools and parallelizing compilers. 1 Introduction Th...
Procedure Cloning
- Computer Languages
, 1992
"... Procedure cloning is an interprocedural optimization where the compiler creates specialized copies of procedure bodies. To clone a procedure, the compiler replicates it and then divides the incoming calls between the original procedure and the copy. By carefully partitioning the call sites, the comp ..."
Abstract
- Add to MetaCart
Procedure cloning is an interprocedural optimization where the compiler creates specialized copies of procedure bodies. To clone a procedure, the compiler replicates it and then divides the incoming calls between the original procedure and the copy. By carefully partitioning the call sites, the compiler can ensure that each clone inherits an environment that allows for better code optimization. Subsequent optimization tailors the various procedure bodies. This paper examines the problem of procedure cloning. It describes an experiment where cloning was required to enable other transformations. It presents a three-phase algorithm for deciding how to clone a program, and analyzes the algorithm's complexity. Finally, it presents a set of assumptions that bound both the running time of the algorithm and the expansion in code size. 1 Introduction Compiler developers have long understood that procedure calls pose a barrier to code optimization. The problem shows up in two distinct ways: t...
A Methodology for Procedure Cloning
, 1993
"... Procedure cloning is an interprocedural transformation where the compiler creates specialized copies of procedure bodies. The compiler divides incoming calls between the original procedure and its copies. By carefully partitioning the calls, the compiler ensures that each clone inherits an environ ..."
Abstract
- Add to MetaCart
Procedure cloning is an interprocedural transformation where the compiler creates specialized copies of procedure bodies. The compiler divides incoming calls between the original procedure and its copies. By carefully partitioning the calls, the compiler ensures that each clone inherits an environment that allows for better code optimization. This paper presents a three-phase algorithm for deciding when to clone a procedure. The algorithm seeks to avoid unnecessary code growth by considering how the information exposed by cloning will be used during optimization. We present a set of assumptions that bound both the algorithm's running time and code expansion. Keywords: cloning, specialization, interprocedural data-flow analysis, interprocedural optimization 1 Introduction Compiler developers have long understood that procedure calls pose a barrier to code optimization. The problem shows up in two distinct ways: the overhead of the call itself and its impact on the code around ...

