Wondering how Adobe was able to get Flash onto the iPhone, despite Apple's prohibition against anyone's runtime modules from appearing? Look no further than University Illinois computer science professor Vikram Adve's lab, where he and his students working to support their open source Low Level Virtual Machine (LLVM).
LLVM is a compilation strategy able to do sophisticated tasks throughout the complete lifecycle of a process: compile-time, link-time, install-time, load-time, run-time, and even idle-time. Designed from the ground up as a framework for lifelong code representation, LLVM is designed to enable effective program optimization across the entire lifetime of a program. LLVM is capable of supporting both sophisticated cross-module inter-procedural optimization and very fast run-time optimization and code generation.
These capabilities make LLVM well-suited for developers looking to create new mid-level language-independent analyses and optimizations of all sorts, including those that require extensive inter-procedural analysis.
"We created a new compiler front end that allowed LLVM to understand ActionScript 3 and used its existing ARM back end to output native ARM assembly code," explained Aditya Bansod, an Adobe engineer. "We call this Ahead of Time (AOT) compilation -- in contrast to the way Adobe Flash Player and Adobe AIR function on the desktop using Just in Time (JIT) compilation. Since we are able to compile ActionScript to ARM ahead of time, the application gets all the performance benefits that the JIT would offer and the license compliance of not requiring a runtime in the final application."
You can learn more from this Adobe video which discusses Flash development on the iPhone platform.