18.02.2012, 10:51, "Filip Pizlo" <[email protected]>:
> It might be possible. But you'd have to solve the following problems:
>
> - OSR exits at the rate of roughly one per opcode. I'm not sure if LLVM 
> supports them at all and if it does, I'm not sure that it can efficiently 
> support as many of them as our backend. We can provide meta-data for how to 
> reify baseline state at almost any point, which allows us to do aggressive 
> profile driven speculations. I don't know if LLVM would allow us to speculate 
> quite so aggressively. And remember, LLVM's main source languages are all 
> strongly typed, so speculation and OSR exit may be underexplored territory.
>
> - Idiom tuning. How you tune a compiler that mainly sees C style code is very 
> different from how you would tune a compiler for JS. This is due to (1) what 
> idioms a programmer is likely to use and (2) what idioms are likely to be 
> introduced by the frontend. If you wanted to get LLVM to compete with our 
> backend you'd have to probably do some tuning.

It's possible to write new JS-specific optimization passes for LLVM.

>
> - Code patching. We rely heavily on self modifying code. I'm not sure if LLVM 
> would give you quite enough flexibility to do that. If you removed code 
> patching, btw, you'd get destroyed on every benchmark.
>
> - Speed of compilation. We optimize for this with great zeal. Often we avoid 
> certain otherwise popular optimization strategies because we don't want to 
> hurt page load times. That said, you could avoid this with the right combo of 
> concurrent JIT and tiering.

It's possible to configure which optimization passes are used, and avoid slow 
ones.

-- 
Regards,
Konstantin
_______________________________________________
webkit-dev mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev

Reply via email to