Ph.D. University of Wisconsin-Madison, 1993
My group's research focuses on compiler technology and its uses. The broad theme of our research is to develop new compiler techniques and novel uses of these techniques to improve the performance, programmability, and security of computing systems.
One broad area of our research is in the use of virtual object code to enable new strategies for compiling and optimizing modern software systems, and for interfacing to modern processor architectures. We have developed a compiler infrastructure called Low Level Virtual Machine, or LLVM, that uses a rich but low-level instruction set (the virtual object code) to enable powerful program analysis and transformation capabilities at link-time and runtime. We are using LLVM to develop new approaches to a wide range of compiler problems including interprocedural (link-time) transformations for entire pointer-based data structures, efficient runtime optimization of native code, static analysis for code security in embedded systems, and virtual architectures for multimedia and embedded processors.
A second broad area of our research is language and compiler support for adaptive distributed applications. Many classes of applications such as parallel programs on Computational Grids, distributed multimedia applications, distributed server systems, and mobile applications share a common requirement: the need to adapt to changing performance and functionality in underlying systems and networks. Current programming strategies for adaptive code are complex, ad hoc, and largely manual. We have developed Program Control Language (PCL), a small set of extensions to C that can be used to simplify the design and development of adaptive distributed applications (not limited to C applications). Our research in this area addresses a number of broad issues: How can we simplify coordination and communication between different processes affected by an adaptation? How can we simplify performance monitoring across large groups of distributed processes? How can we encode application-specific performance properties as first-class features within application code? How can we use our virtual object code technology to migrate, optimize, or specialize code between machines in a distributed system?
In the News