|Feature lead engineer=David Anderson, David Mandelin
}}
{{FeaturePageBody
|Feature overview=IonMonkey is a new JIT for SpiderMonkey. Our goal is to implement a new compiler to enable many new JavaScript optimizations. In particular IonMonkey will feature much more organized and explicit data structures typical of advanced compilers. This goal of being clean and flexible will be extremely important for future optimization work and experimentation.
|Feature users and use cases=Goals:
* Provide a backend that can match or beat the Trace JIT or Crankshaft in speed. Sub-goals:
** Fine-grained specialization and de-specialization.
** Integration with type inference.
* Clean, textbook IR so optimization passes can be separated and pipelined with well-known algorithms.
* Document and comment well so the implementation and its side effects can be easily understood.
* Recompilation, debugging, bailouts are all related - and should be solved up-front.
* First SpiderMonkey JIT that starts off with peer reviews!
* (Unknown feasibility) Act as a baseline compiler to replace JM2.
* Manage memory much better, in part to avoid range problems on x64.
Avoiding these:
* Aggressive stores. We should move state syncing to bailout points.
|Feature requirements=* Does not regress correctness.
* Does not regress usability or bench-marketing performance.
|Feature functional spec=See bug 646923 for an experimental design in Python, and bug 650181 for IR plans.
See [[/RegisterAllocator]] for information on the register allocator interfaces.