Reviewers: Jakob,

Message:
PTAL

Description:
Fix using monomorphic store instruction for polymorphic stores.

Please review this at https://chromiumcodereview.appspot.com/16875008/

SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge

Affected files:
  M src/hydrogen.cc
  A + test/mjsunit/regress/regress-polymorphic-store.js


Index: src/hydrogen.cc
diff --git a/src/hydrogen.cc b/src/hydrogen.cc
index 9a2072ec9f054cfc311f0265c41fb07ead0f124b..396e98a7f931cd824e516d3faef20a94c1ec97e0 100644
--- a/src/hydrogen.cc
+++ b/src/hydrogen.cc
@@ -6408,7 +6408,8 @@ bool HOptimizedGraphBuilder::TryStorePolymorphicAsMonomorphic(
   AddInstruction(HCheckMaps::New(object, types, zone()));
   HInstruction* store;
   CHECK_ALIVE_OR_RETURN(
- store = BuildStoreNamedField(object, name, value, types->at(0), &lookup),
+      store = BuildStoreNamedField(
+          object, name, value, types->at(count - 1), &lookup),
       true);
   Push(value);
   store->set_position(expr->position());
Index: test/mjsunit/regress/regress-polymorphic-store.js
diff --git a/test/mjsunit/regress/regress-2671.js b/test/mjsunit/regress/regress-polymorphic-store.js
similarity index 85%
copy from test/mjsunit/regress/regress-2671.js
copy to test/mjsunit/regress/regress-polymorphic-store.js
index 8da1b8f07f69c487fe9913e485c60f3e257e0986..4723a7f4343bb79daf5283325ee5c1082abefa79 100644
--- a/test/mjsunit/regress/regress-2671.js
+++ b/test/mjsunit/regress/regress-polymorphic-store.js
@@ -27,19 +27,22 @@

 // Flags: --allow-natives-syntax

-var y;
-function f() {
-  var a = [];
-  a[20] = 0;
-  y = 3;
-  var i = 7 * (y + -0);
-  a[i] = 1/y;
-  assertFalse(isNaN(a[i]));
-}
+var o1 = {};
+o1.f1 = function() { return 10; };
+o1.x = 5;
+o1.y = 2;
+var o2 = {};
+o2.x = 5;
+o2.y = 5;

-f();
-f();
-f();
-%OptimizeFunctionOnNextCall(f);
-f();
+function store(o, v) {
+  o.y = v;
+}

+store(o2, 0);
+store(o1, 0);
+store(o2, 0);
+%OptimizeFunctionOnNextCall(store);
+store(o1, 10);
+assertEquals(5, o1.x);
+assertEquals(10, o1.y);


--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to