3 ms·
Am I misunderstanding or does his "tracing" stop at the basic block level? While basic blocks are completely predictable traces through the program, they are u
by sparky 16y ago
Am I misunderstanding or does his "tracing" stop at the basic block level? While basic blocks are completely predictable traces through the program, they are usually very short. You can get much more benefit by finding long common traces through multiple basic blocks and compiling the whole thing as a unit, providing tests and/or fixup code in case you find you actually needed to branch somewhere else in the middle of a trace. This is what I think most compiler people would call a "tracing JIT."
- thristian 16y agoHm, that's a good point. For some reason I assumed it would trace through unconditional branches, but the post I linked to does indeed say "I terminate the trace after any branch instruction", not "any conditional branch instruction". That seems like quite a missed opportunity; I wonder why the code has that restriction.
- daeken 16y agoIn the context of a JIT, you have a tradeoff to make: do you exhaust all possibilities for optimization, or do you do as little as possible to get something running. That's why you have things like Hotspot, where they initially do as little as possible to get things rolling, then optimize heavily as it finds bottlenecks. This is no easy task.