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