Commit 79a5834c authored by verwaest@chromium.org's avatar verwaest@chromium.org

Wrap PushLoad and BuildStoreInEffect in CHECK_ALIVE.

R=jkummerow@chromium.org

Review URL: https://chromiumcodereview.appspot.com/23903017

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@16558 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 9c21e6b7
...@@ -4911,8 +4911,8 @@ void HOptimizedGraphBuilder::HandlePropertyAssignment(Assignment* expr) { ...@@ -4911,8 +4911,8 @@ void HOptimizedGraphBuilder::HandlePropertyAssignment(Assignment* expr) {
Add<HDeoptimize>("Insufficient type feedback for property assignment", Add<HDeoptimize>("Insufficient type feedback for property assignment",
Deoptimizer::SOFT); Deoptimizer::SOFT);
} }
return BuildStoreNamed(expr, expr->id(), expr->position(), return BuildStoreNamed(
expr->AssignmentId(), prop, object, value); expr, expr->id(), expr->AssignmentId(), prop, object, value);
} else { } else {
// Keyed store. // Keyed store.
CHECK_ALIVE(VisitForValue(prop->key())); CHECK_ALIVE(VisitForValue(prop->key()));
...@@ -4980,7 +4980,6 @@ void HOptimizedGraphBuilder::HandleGlobalVariableAssignment( ...@@ -4980,7 +4980,6 @@ void HOptimizedGraphBuilder::HandleGlobalVariableAssignment(
void HOptimizedGraphBuilder::BuildStoreNamed(Expression* expr, void HOptimizedGraphBuilder::BuildStoreNamed(Expression* expr,
BailoutId id, BailoutId id,
int position,
BailoutId assignment_id, BailoutId assignment_id,
Property* prop, Property* prop,
HValue* object, HValue* object,
...@@ -5020,14 +5019,14 @@ void HOptimizedGraphBuilder::BuildStoreNamed(Expression* expr, ...@@ -5020,14 +5019,14 @@ void HOptimizedGraphBuilder::BuildStoreNamed(Expression* expr,
} else if (types != NULL && types->length() > 1) { } else if (types != NULL && types->length() > 1) {
Drop(2); Drop(2);
return HandlePolymorphicStoreNamedField( return HandlePolymorphicStoreNamedField(
position, id, object, value, types, name); expr->position(), id, object, value, types, name);
} else { } else {
Drop(2); Drop(2);
instr = BuildStoreNamedGeneric(object, name, value); instr = BuildStoreNamedGeneric(object, name, value);
} }
if (!ast_context()->IsEffect()) Push(value); if (!ast_context()->IsEffect()) Push(value);
instr->set_position(position); instr->set_position(expr->position());
AddInstruction(instr); AddInstruction(instr);
if (instr->HasObservableSideEffects()) { if (instr->HasObservableSideEffects()) {
Add<HSimulate>(id, REMOVABLE_SIMULATE); Add<HSimulate>(id, REMOVABLE_SIMULATE);
...@@ -5122,7 +5121,7 @@ void HOptimizedGraphBuilder::HandleCompoundAssignment(Assignment* expr) { ...@@ -5122,7 +5121,7 @@ void HOptimizedGraphBuilder::HandleCompoundAssignment(Assignment* expr) {
// Named property. // Named property.
CHECK_ALIVE(VisitForValue(prop->obj())); CHECK_ALIVE(VisitForValue(prop->obj()));
HValue* object = Top(); HValue* object = Top();
PushLoad(prop, object, expr->position()); CHECK_ALIVE(PushLoad(prop, object, expr->position()));
CHECK_ALIVE(VisitForValue(expr->value())); CHECK_ALIVE(VisitForValue(expr->value()));
HValue* right = Pop(); HValue* right = Pop();
...@@ -5134,8 +5133,8 @@ void HOptimizedGraphBuilder::HandleCompoundAssignment(Assignment* expr) { ...@@ -5134,8 +5133,8 @@ void HOptimizedGraphBuilder::HandleCompoundAssignment(Assignment* expr) {
Add<HSimulate>(operation->id(), REMOVABLE_SIMULATE); Add<HSimulate>(operation->id(), REMOVABLE_SIMULATE);
} }
return BuildStoreNamed(expr, expr->id(), expr->position(), return BuildStoreNamed(
expr->AssignmentId(), prop, object, instr); expr, expr->id(), expr->AssignmentId(), prop, object, instr);
} else { } else {
// Keyed property. // Keyed property.
CHECK_ALIVE(VisitForValue(prop->obj())); CHECK_ALIVE(VisitForValue(prop->obj()));
...@@ -7475,6 +7474,19 @@ HInstruction* HOptimizedGraphBuilder::BuildIncrement( ...@@ -7475,6 +7474,19 @@ HInstruction* HOptimizedGraphBuilder::BuildIncrement(
} }
void HOptimizedGraphBuilder::BuildStoreInEffect(Expression* expr,
Property* prop,
BailoutId ast_id,
BailoutId return_id,
HValue* object,
HValue* value) {
EffectContext for_effect(this);
Push(object);
Push(value);
BuildStoreNamed(expr, ast_id, return_id, prop, object, value);
}
void HOptimizedGraphBuilder::VisitCountOperation(CountOperation* expr) { void HOptimizedGraphBuilder::VisitCountOperation(CountOperation* expr) {
ASSERT(!HasStackOverflow()); ASSERT(!HasStackOverflow());
ASSERT(current_block() != NULL); ASSERT(current_block() != NULL);
...@@ -7561,7 +7573,7 @@ void HOptimizedGraphBuilder::VisitCountOperation(CountOperation* expr) { ...@@ -7561,7 +7573,7 @@ void HOptimizedGraphBuilder::VisitCountOperation(CountOperation* expr) {
CHECK_ALIVE(VisitForValue(prop->obj())); CHECK_ALIVE(VisitForValue(prop->obj()));
HValue* object = Top(); HValue* object = Top();
PushLoad(prop, object, expr->position()); CHECK_ALIVE(PushLoad(prop, object, expr->position()));
after = BuildIncrement(returns_original_input, expr); after = BuildIncrement(returns_original_input, expr);
...@@ -7569,18 +7581,13 @@ void HOptimizedGraphBuilder::VisitCountOperation(CountOperation* expr) { ...@@ -7569,18 +7581,13 @@ void HOptimizedGraphBuilder::VisitCountOperation(CountOperation* expr) {
HValue* result = Pop(); HValue* result = Pop();
HValue* object = Pop(); HValue* object = Pop();
environment()->SetExpressionStackAt(0, result); environment()->SetExpressionStackAt(0, result);
{ CHECK_ALIVE(BuildStoreInEffect(
EffectContext for_effect(this); expr, prop, expr->id(), expr->AssignmentId(), object, after));
Push(object);
Push(after);
BuildStoreNamed(expr, expr->id(), expr->position(),
expr->AssignmentId(), prop, object, after);
}
return ast_context()->ReturnValue(Pop()); return ast_context()->ReturnValue(Pop());
} }
return BuildStoreNamed(expr, expr->id(), expr->position(), return BuildStoreNamed(
expr->AssignmentId(), prop, object, after); expr, expr->id(), expr->AssignmentId(), prop, object, after);
} else { } else {
// Keyed property. // Keyed property.
if (returns_original_input) Push(graph()->GetConstantUndefined()); if (returns_original_input) Push(graph()->GetConstantUndefined());
......
...@@ -2040,9 +2040,15 @@ class HOptimizedGraphBuilder V8_FINAL ...@@ -2040,9 +2040,15 @@ class HOptimizedGraphBuilder V8_FINAL
HValue* object, HValue* object,
int position); int position);
void BuildStoreInEffect(Expression* expression,
Property* prop,
BailoutId ast_id,
BailoutId return_id,
HValue* object,
HValue* value);
void BuildStoreNamed(Expression* expression, void BuildStoreNamed(Expression* expression,
BailoutId id, BailoutId id,
int position,
BailoutId assignment_id, BailoutId assignment_id,
Property* prop, Property* prop,
HValue* object, HValue* object,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment