Reviewers: jarin,
Message:
PTAL
Description:
Pass the ast_id to HandleKeyed to make sure it's the right one (e.g.,
CountOperation, not just the load-expression's id)
BUG=
Please review this at https://codereview.chromium.org/595453002/
SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge
Affected files (+42, -5 lines):
M src/hydrogen.h
M src/hydrogen.cc
M test/mjsunit/keyed-named-access.js
Index: src/hydrogen.cc
diff --git a/src/hydrogen.cc b/src/hydrogen.cc
index
e5a93a7bd5b1f4ec513e0427d54f033b0fdf5dce..848178c4b0741af37292a4532aec80a8962f460f
100644
--- a/src/hydrogen.cc
+++ b/src/hydrogen.cc
@@ -6436,7 +6436,7 @@ void HOptimizedGraphBuilder::BuildStore(Expression*
expr,
HValue* key = environment()->ExpressionStackAt(1);
HValue* object = environment()->ExpressionStackAt(2);
bool has_side_effects = false;
- HandleKeyedElementAccess(object, key, value, expr, return_id, STORE,
+ HandleKeyedElementAccess(object, key, value, expr, ast_id, return_id,
STORE,
&has_side_effects);
Drop(3);
Push(value);
@@ -7129,7 +7129,7 @@ HValue*
HOptimizedGraphBuilder::HandlePolymorphicElementAccess(
HValue* HOptimizedGraphBuilder::HandleKeyedElementAccess(
- HValue* obj, HValue* key, HValue* val, Expression* expr,
+ HValue* obj, HValue* key, HValue* val, Expression* expr, BailoutId
ast_id,
BailoutId return_id, PropertyAccessType access_type,
bool* has_side_effects) {
if (key->ActualValue()->IsConstant()) {
@@ -7143,7 +7143,7 @@ HValue*
HOptimizedGraphBuilder::HandleKeyedElementAccess(
Handle<String>::cast(constant));
}
HInstruction* instr =
- BuildNamedAccess(access_type, expr->id(), return_id, expr, obj,
+ BuildNamedAccess(access_type, ast_id, return_id, expr, obj,
Handle<String>::cast(constant), val, false);
if (instr == NULL || instr->IsLinked()) {
*has_side_effects = false;
@@ -7365,7 +7365,7 @@ void HOptimizedGraphBuilder::BuildLoad(Property* expr,
bool has_side_effects = false;
HValue* load = HandleKeyedElementAccess(
- obj, key, NULL, expr, expr->LoadId(), LOAD, &has_side_effects);
+ obj, key, NULL, expr, ast_id, expr->LoadId(), LOAD,
&has_side_effects);
if (has_side_effects) {
if (ast_context()->IsEffect()) {
Add<HSimulate>(ast_id, REMOVABLE_SIMULATE);
Index: src/hydrogen.h
diff --git a/src/hydrogen.h b/src/hydrogen.h
index
6b031708c767cbcdbd596e58c9959a513a8b40ac..d5e208f3709977d7a6354fb05c2617fffce5dda4
100644
--- a/src/hydrogen.h
+++ b/src/hydrogen.h
@@ -2627,7 +2627,8 @@ class HOptimizedGraphBuilder : public HGraphBuilder,
public AstVisitor {
bool* has_side_effects);
HValue* HandleKeyedElementAccess(HValue* obj, HValue* key, HValue* val,
- Expression* expr, BailoutId return_id,
+ Expression* expr, BailoutId ast_id,
+ BailoutId return_id,
PropertyAccessType access_type,
bool* has_side_effects);
Index: test/mjsunit/keyed-named-access.js
diff --git a/test/mjsunit/keyed-named-access.js
b/test/mjsunit/keyed-named-access.js
index
f9541e8e0aa9c2cd9a96faab478270964104f2a4..11f8fb50d879c123a1868ca317d3987f5d0e905d
100644
--- a/test/mjsunit/keyed-named-access.js
+++ b/test/mjsunit/keyed-named-access.js
@@ -34,3 +34,39 @@ f(o3);
f(o3);
%OptimizeFunctionOnNextCall(f);
assertEquals(1200, f(o3));
+
+(function CountOperationDeoptimizationGetter() {
+ var global = {};
+ global.__defineGetter__("A", function () { return "x"; });
+
+ function h() {
+ return "A";
+ }
+
+ function g(a, b, c) {
+ try {
+ return a + b.toString() + c;
+ } catch (e) { }
+ }
+
+ function test(o) {
+ return g(1, o[h()]--, 10);
+ }
+
+ test(global);
+ test(global);
+ %OptimizeFunctionOnNextCall(test);
+ print(test(global));
+})();
+
+
+(function CountOperationDeoptimizationPoint() {
+ function test() {
+ this[0, ""]--;
+ }
+
+ test();
+ test();
+ %OptimizeFunctionOnNextCall(test);
+ test();
+})();
--
--
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/d/optout.