I am interested in all aspects of programming language implementation, static analysis and optimizing compilation. Here are a few key themes of my research ...

intermediate representations

Program representations that enable accurate and efficient analysis and transformation by optimizing compilers. Static single assignment form (SSA) and other virtual register renaming schemes.

program prediction

Branch prediction and value prediction at the microarchitectural level. Object lifetime prediction at the memory management level. Using techniques from machine learning.

virtual machines

Bytecode instruction sets, and execution engines such as interpreters and just-in-time compilers. Expertise in Java virtual machine and .NET common language runtime.

software reverse engineering

Decompilation, which recovers high-level source code from low-level machine code. Concept assignment, which recovers human-oriented concepts from source code. Slicing, which reduces programs to focus on interesting data flow behaviour.