-
Notifications
You must be signed in to change notification settings - Fork 52
Description
Currently we use the term "optimizer" to mean three or four different things. This is somewhat confusing.
So let's come up with with better names.
Currently we have "tier1" to refer to the specializing adaptive interpreter, and "tier2" for the next tier, which lacks a name.
Maybe we should come up with a good promotional name for it, but that's another issue.
Each tier has three parts, region selection, an optimizer and an execution engine (runtime).
For tier 1, the region selection is implicit, the optimizer is the specializer and the execution engine is the (now adaptive) bytecode interpreter.
For tier 2, we lack names for the parts.
We need a better name for the optimizer part, for the reason given above. Maybe "transformer"?
For tier 1, region selection is implicit as all regions are 1 instruction.
Each optimizer/transformer can be broken down into several passes. For tier 1, there is just one pass, the specializer. For tier 2, there will be several:
So here are the tiers and passes with their informal names:
Tier 1: "Specializing adaptive interpreter"
- Implicit region selection (1 instruction only). It is implicit, so it has no name.
- Optimizer/Transformer
- "Specializer"
- Execution engine "adaptive interpreter"
Tier 2: Lacks a name
- Region selection. Lacks a name.
- Optimizer/Transformer
- Guard elimination, constant propagation, ...
- ...
- Copy and patch compiler: "Justin".
- Execution engine: Trace stitching?