Comment #1 on issue 2223 by [email protected]: 15x slower than spidermonkey on skinning benchmark
http://code.google.com/p/v8/issues/detail?id=2223

I looked at it briefly sometime ago and here are my observations.

Benchmark spends all the time in a single function that is called only once.

It has many locals and we fail to perform OSR in it due to constraints on LUnallocated operand encoding.

However just fixing this is not enough. If I steal some bits in the encoding to increase number of locals that OSR can handle I see the following: we OSR function once then deoptimize on soft-deoptimization (@deoptimize) and never attempt to OSR function again unless I artificially bump loop nesting level to kMaxLoopNestingMarker immediately. I did not look why this happens, but it might be a caused by a bug in our stubs that perform counting on back edges.

It seems that there are two major issues here :

1) LUnallocated encoding prevents us from doing an OSR;
2) some issue with back edge counting causes us not to re-attempt OSR again;

Additional issue is soft-deoptimization itself, it might be that type propagation inside the function could have allowed us to avoid it, but I did not analyze that.

--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to