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.