<html><head></head><body bgcolor="#FFFFFF"><div><div><span class="Apple-style-span" style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.296875); -webkit-composition-fill-color: rgba(175, 192, 227, 0.230469); -webkit-composition-frame-color: rgba(77, 128, 180, 0.230469); ">On Feb 27, 2012, at 6:55 AM, vahag vardanyan <<a href="mailto:vahagvardanyan@gmail.com">vahagvardanyan@gmail.com</a>> wrote:</span><br></div><div><br></div><div></div><blockquote type="cite"><div>Hi.<div>In this article <a href="http://wingolog.org/archives/2011/10/28/javascriptcore-the-webkit-js-implementation">http://wingolog.org/archives/2011/10/28/javascriptcore-the-webkit-js-implementation</a> is saying that DFG jit doesn't support loop invariant code motion.</div>
<div>But the article is written on 28 October, so does DFG currently support loop invariant code motion or is anyone working on it??</div>
</div></blockquote><div><br></div><div>Loop invariant code motion (LICM) is one of two ways of removing expensive operations from loops. The other is loop peeling with global common subexpression elimination. We haven't really decided which one we want; I think we'll have to investigate a broader range of JS programs to decide. </div><div><br></div><div>Yuqiang's excellent LICM implementation (see <a href="https://bugs.webkit.org/show_bug.cgi?id=76770">https://bugs.webkit.org/show_bug.cgi?id=76770</a>) achieves a significant speed-up on one benchmark (Kraken/ai-astar). Unfortunately this formulation does not currently significantly progress other benchmark suites, and imposes significant infrastructural limitations. This will probably no longer be the case once we tweak the DFG to better support code motion - something that it does not do well right now. </div><div><br></div><div>It's a tough trade off though, but one we decided to make because we're in the middle of adding a variety of other features to the compiler (like activations, nested functions, better debugability, and better register allocation). </div><br></div><div>-Filip</div><div><span></span></div></body></html>