[ic] Also collect known map for relational comparison.
authorbmeurer <bmeurer@chromium.org>
Mon, 21 Sep 2015 16:05:27 +0000 (09:05 -0700)
committerCommit bot <commit-bot@chromium.org>
Mon, 21 Sep 2015 16:05:43 +0000 (16:05 +0000)
commite56f265f6d41fadbcea2be65d9b573bad8b4709d
treeb3c7bcefe05f58bd7f4c380a9988f9f0fb594d21
parentc7a6790050023ff22515233f820fe5c8dc104a11
[ic] Also collect known map for relational comparison.

Previously we only collected the known map for equality comparisons. But
if we also collect it for relational comparisons, we can inline a fast
path of ToPrimitive on the objects, which is especially interesting
since both sides have the same map.

For now we only inline a very limited subset of ToPrimitive in
Crankshaft, which is when the receiver map (and its prototype chain)
doesn't have @@toPrimitive, and both valueOf and toString are the
default versions on the %ObjectPrototype%. In this case the relational
comparison would reduce to a string comparison of "[object CLASS]" with
itself and so we can reduce that to a boolean constant plus map checks
on both left and right hand side, plus code dependencies on the
prototype chain. This repairs the regression on box2d.

R=jkummerow@chromium.org
BUG=chromium:534200
LOG=n

Review URL: https://codereview.chromium.org/1355113002

Cr-Commit-Position: refs/heads/master@{#30852}
13 files changed:
src/arm/code-stubs-arm.cc
src/arm64/code-stubs-arm64.cc
src/code-stubs.cc
src/contexts.h
src/hydrogen.cc
src/ia32/code-stubs-ia32.cc
src/ic/ic-state.cc
src/mips/code-stubs-mips.cc
src/mips64/code-stubs-mips64.cc
src/v8natives.js
src/x64/code-stubs-x64.cc
test/mjsunit/compare-known-objects-slow.js
test/mjsunit/compare-known-objects.js