documentation for deopt bailouts

241 views
Skip to first unread message

Christoph Sturm

unread,
Oct 11, 2012, 5:48:21 AM10/11/12
to v8-u...@googlegroups.com
I'm trying to optimize my node app with --trace-deopt

how do i see why the method is deopted? for example here:

**** DEOPT: Wlbl.Checker.checkUrl at bailout #24, address 0x0, frame size 88
[deoptimizing: begin 0x25d8e5e85e71 Wlbl.Checker.checkUrl @24]
  translating Wlbl.Checker.checkUrl => node=260, height=40

also when i log optimizer bailouts, i see this: 
Bailout in HGraphBuilder: @"exports.paramsToString": ForInStatement is not fast case

does that mean i should replace the for in with a for loop that iterates over Object.keys?

thanks
 chris

Vyacheslav Egorov

unread,
Oct 11, 2012, 10:16:34 AM10/11/12
to v8-u...@googlegroups.com
Hi,

> how do i see why the method is deopted? for example here:

If you --trace-deopt with --code-comments then in most cases you will
get LIR instruction that deopted in the output (though it is not
always correct). The only reliable way to figure what caused deopt is
run with --print-opt-code and go read assembly around deopt point.

> does that mean i should replace the for in with a for loop that iterates
> over Object.keys?

Yes.

--
Vyacheslav Egorov
> --
> v8-users mailing list
> v8-u...@googlegroups.com
> http://groups.google.com/group/v8-users

Toon Verwaest

unread,
Oct 11, 2012, 10:45:00 AM10/11/12
to v8-u...@googlegroups.com
> does that mean i should replace the for in with a for loop that iterates
> over Object.keys?

It means you have an object that's either in dictionary mode, or has enumerable properties in its prototype chain. Ideally you avoid both of those cases for objects you want to iterate over.

Michael Schwartz

unread,
Oct 11, 2012, 11:46:41 AM10/11/12
to v8-u...@googlegroups.com
Is it really a good idea to optimize for a specific version of v8?  I mean, something you spend a bit of time hand optimizing could be a completely irrelevant optimization in some upcoming v8 release.  It could even be slower.

Or am I wrong? :)

Jakob Kummerow

unread,
Oct 11, 2012, 12:57:18 PM10/11/12
to v8-u...@googlegroups.com
Who's optimizing for a specific version of V8? Avoiding inherently slow things (such as for-in loops over slow objects, or needless polymorphism, etc) in your JS code makes a lot of sense regardless of the VM you're running on.
Sure, some deopts may no longer happen in an upcoming version, but then again maybe they still will, and maybe you want better performance *now* rather than possibly at some unspecified date in the future.
Reply all
Reply to author
Forward
0 new messages