- Green Bay Packers                                    - Wisconsin Badgers                                    - PGA Tour                                    - US Golf Association                                    - Golf Instruction                                    - ESPN

obtained by PhD in Computer Science from the University of Wisconsin-Madison in February 1998. My thesis dissertation was entitled Partial Evaluation Using Dependence Graphs. My advisor was Thomas Reps, whose background is in the area of program representations and static analysis techniques. In particular, he has worked on attribute grammars, interprocedural data flow analysis, and program slicing. Other member of my thesis committee were Susan Horwitz, Charles Fischer, Raghu Ramakrishnan (Databases) and Kewal Saluja (Hardware Design Languages).

In my thesis work, I used static analysis techniques to ensure the termination of off-line partial evaluation. Partial evaluation is a program specialization operation in which programs with multiple inputs are specialized to take into account known values for some of their inputs. The intent of partial evaluation is that the specialized program will usually run faster than the original program, because computations that are dependent only on the known inputs will be eliminated in the specialized program. An off-line partial evaluator is divided into two phases: An analysis phase (termed binding-time analysis or BTA) that determines which parts of the program are computable using only the known inputs (these are `static' computations), and a program specialization phase. In recent years, partial evaluators have been developed for a variety of programming languages and paradigms. As a result, partial evaluators are increasingly being used as `black-box' tools by users who are not familiar with the design of partial evaluators. Therefore, it is important to ensure that partial evaluators terminate and return a specialized program to the user regardless of the input program. However, partial evaluators commonly fall short of this requirement, either because the binding-time analysis is `incorrect', in the sense that it marks computations that require unknown values as static, or because the partial evaluator attempts to enumerate an unbounded set of values for a static program variable.

I showed that incorrect partial evaluators arise because their BTA phase fails to account for hidden data flow through control dependences when tracing the flow of dynamic values through a program. I therefore used the data and control dependences that are explicit in the structure and semantics of program dependence graphs to define `correct' binding-time analyses that are simple reachability operations on dependence graphs. The argument against using control dependences for BTA has been that the analysis becomes overly conservative (too little of the program is marked static). However, I have shown that it is possible to identify the particular situations in which control dependences should be followed. Therefore, the analyses developed in my thesis research have the advantage of a semantic guarantee of safety, without unduly compromising the performance of the specialized program. As part of this work, I extended program representation graphs, a form of dependence graph with a well-defined semantics, to a class of programs containing recursive procedure calls. I also developed a correct binding-time analysis for C programs.


In my thesis, I addressed the problem of unbounded static code by defining termination analyses based on graph reachability that identify function parameters that take values from a bounded set. Finally, I extended the operation of program specialization to dependence graphs. As a consequence, I developed a partial evaluator for imperative programs that transforms a program into its dependence graph, performs binding-time analysis and specialization on the dependence graph, and transforms the specialized dependence graph into program text.

Since my graduation, I have not actively pursued research in the area of partial evaluation, for two reasons: First, the analysis algorithms developed in my thesis are cubic in their worst-case complexity. The largest programs I was able to analyze consisted of 2000 lines of C source code. Thus, it is not clear whether these methods will be applicable to larger programs. Second, I believe that the major hurdle with partial evaluation as it stands today is that programs must be written in a certain style for a partial evaluator to exploit maximum benefit. This is where I feel research in the area should be focused. Although I don't have the time to work on this problem, I continue to track the latest research in the area of partial evaluation, and I am hopeful that partial evaluation will become a useful, practical method.



Copyright 2003, Manuvir Das, MSR. Site assistance by ATD