[turbofan] Also verify lazy bailout points in graph builder.
This adds verification of bailout IDs to {PrepareFrameState} to ensure all bailout points used for lazy deoptimization have been prepared by full codegen. This will catch bailout ID abuse during graph building instead of late in the deoptimizer. Similar verification for all eager deoptimization points is already present. R=jarin@chromium.org Review-Url: https://codereview.chromium.org/2105023003 Cr-Commit-Position: refs/heads/master@{#37421}
This commit is contained in:
parent
fbeb0e6430
commit
9e12b838aa
@ -1916,6 +1916,7 @@ void AstGraphBuilder::VisitObjectLiteral(ObjectLiteral* expr) {
|
||||
case ObjectLiteral::Property::CONSTANT:
|
||||
case ObjectLiteral::Property::COMPUTED:
|
||||
case ObjectLiteral::Property::MATERIALIZED_LITERAL: {
|
||||
if (!property->emit_store()) continue;
|
||||
Node* attr = jsgraph()->Constant(NONE);
|
||||
Node* set_function_name =
|
||||
jsgraph()->Constant(property->NeedsSetFunctionName());
|
||||
@ -4037,14 +4038,13 @@ bool AstGraphBuilder::CheckOsrEntry(IterationStatement* stmt) {
|
||||
void AstGraphBuilder::PrepareFrameState(Node* node, BailoutId ast_id,
|
||||
OutputFrameStateCombine combine) {
|
||||
if (OperatorProperties::GetFrameStateInputCount(node->op()) > 0) {
|
||||
DCHECK(ast_id.IsNone() || info()->shared_info()->VerifyBailoutId(ast_id));
|
||||
DCHECK_EQ(1, OperatorProperties::GetFrameStateInputCount(node->op()));
|
||||
|
||||
DCHECK_EQ(IrOpcode::kDead,
|
||||
NodeProperties::GetFrameStateInput(node, 0)->opcode());
|
||||
bool node_has_exception = NodeProperties::IsExceptionalCall(node);
|
||||
NodeProperties::ReplaceFrameStateInput(
|
||||
node, 0,
|
||||
environment()->Checkpoint(ast_id, combine, node_has_exception));
|
||||
bool has_exception = NodeProperties::IsExceptionalCall(node);
|
||||
Node* state = environment()->Checkpoint(ast_id, combine, has_exception);
|
||||
NodeProperties::ReplaceFrameStateInput(node, 0, state);
|
||||
}
|
||||
}
|
||||
|
||||
@ -4059,8 +4059,8 @@ void AstGraphBuilder::PrepareEagerCheckpoint(BailoutId ast_id) {
|
||||
Node* node = NewNode(common()->Checkpoint());
|
||||
DCHECK_EQ(IrOpcode::kDead,
|
||||
NodeProperties::GetFrameStateInput(node, 0)->opcode());
|
||||
NodeProperties::ReplaceFrameStateInput(node, 0,
|
||||
environment()->Checkpoint(ast_id));
|
||||
Node* state = environment()->Checkpoint(ast_id);
|
||||
NodeProperties::ReplaceFrameStateInput(node, 0, state);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3384,6 +3384,7 @@ void FullCodeGenerator::VisitCountOperation(CountOperation* expr) {
|
||||
}
|
||||
case NAMED_SUPER_PROPERTY: {
|
||||
EmitNamedSuperPropertyStore(prop);
|
||||
PrepareForBailoutForId(expr->AssignmentId(), BailoutState::TOS_REGISTER);
|
||||
if (expr->is_postfix()) {
|
||||
if (!context()->IsEffect()) {
|
||||
context()->PlugTOS();
|
||||
@ -3395,6 +3396,7 @@ void FullCodeGenerator::VisitCountOperation(CountOperation* expr) {
|
||||
}
|
||||
case KEYED_SUPER_PROPERTY: {
|
||||
EmitKeyedSuperPropertyStore(prop);
|
||||
PrepareForBailoutForId(expr->AssignmentId(), BailoutState::TOS_REGISTER);
|
||||
if (expr->is_postfix()) {
|
||||
if (!context()->IsEffect()) {
|
||||
context()->PlugTOS();
|
||||
|
@ -3305,6 +3305,7 @@ void FullCodeGenerator::VisitCountOperation(CountOperation* expr) {
|
||||
}
|
||||
case NAMED_SUPER_PROPERTY: {
|
||||
EmitNamedSuperPropertyStore(prop);
|
||||
PrepareForBailoutForId(expr->AssignmentId(), BailoutState::TOS_REGISTER);
|
||||
if (expr->is_postfix()) {
|
||||
if (!context()->IsEffect()) {
|
||||
context()->PlugTOS();
|
||||
@ -3316,6 +3317,7 @@ void FullCodeGenerator::VisitCountOperation(CountOperation* expr) {
|
||||
}
|
||||
case KEYED_SUPER_PROPERTY: {
|
||||
EmitKeyedSuperPropertyStore(prop);
|
||||
PrepareForBailoutForId(expr->AssignmentId(), BailoutState::TOS_REGISTER);
|
||||
if (expr->is_postfix()) {
|
||||
if (!context()->IsEffect()) {
|
||||
context()->PlugTOS();
|
||||
|
@ -3283,6 +3283,7 @@ void FullCodeGenerator::VisitCountOperation(CountOperation* expr) {
|
||||
}
|
||||
case NAMED_SUPER_PROPERTY: {
|
||||
EmitNamedSuperPropertyStore(prop);
|
||||
PrepareForBailoutForId(expr->AssignmentId(), BailoutState::TOS_REGISTER);
|
||||
if (expr->is_postfix()) {
|
||||
if (!context()->IsEffect()) {
|
||||
context()->PlugTOS();
|
||||
@ -3294,6 +3295,7 @@ void FullCodeGenerator::VisitCountOperation(CountOperation* expr) {
|
||||
}
|
||||
case KEYED_SUPER_PROPERTY: {
|
||||
EmitKeyedSuperPropertyStore(prop);
|
||||
PrepareForBailoutForId(expr->AssignmentId(), BailoutState::TOS_REGISTER);
|
||||
if (expr->is_postfix()) {
|
||||
if (!context()->IsEffect()) {
|
||||
context()->PlugTOS();
|
||||
|
@ -3393,6 +3393,7 @@ void FullCodeGenerator::VisitCountOperation(CountOperation* expr) {
|
||||
}
|
||||
case NAMED_SUPER_PROPERTY: {
|
||||
EmitNamedSuperPropertyStore(prop);
|
||||
PrepareForBailoutForId(expr->AssignmentId(), BailoutState::TOS_REGISTER);
|
||||
if (expr->is_postfix()) {
|
||||
if (!context()->IsEffect()) {
|
||||
context()->PlugTOS();
|
||||
@ -3404,6 +3405,7 @@ void FullCodeGenerator::VisitCountOperation(CountOperation* expr) {
|
||||
}
|
||||
case KEYED_SUPER_PROPERTY: {
|
||||
EmitKeyedSuperPropertyStore(prop);
|
||||
PrepareForBailoutForId(expr->AssignmentId(), BailoutState::TOS_REGISTER);
|
||||
if (expr->is_postfix()) {
|
||||
if (!context()->IsEffect()) {
|
||||
context()->PlugTOS();
|
||||
|
@ -3393,6 +3393,7 @@ void FullCodeGenerator::VisitCountOperation(CountOperation* expr) {
|
||||
}
|
||||
case NAMED_SUPER_PROPERTY: {
|
||||
EmitNamedSuperPropertyStore(prop);
|
||||
PrepareForBailoutForId(expr->AssignmentId(), BailoutState::TOS_REGISTER);
|
||||
if (expr->is_postfix()) {
|
||||
if (!context()->IsEffect()) {
|
||||
context()->PlugTOS();
|
||||
@ -3404,6 +3405,7 @@ void FullCodeGenerator::VisitCountOperation(CountOperation* expr) {
|
||||
}
|
||||
case KEYED_SUPER_PROPERTY: {
|
||||
EmitKeyedSuperPropertyStore(prop);
|
||||
PrepareForBailoutForId(expr->AssignmentId(), BailoutState::TOS_REGISTER);
|
||||
if (expr->is_postfix()) {
|
||||
if (!context()->IsEffect()) {
|
||||
context()->PlugTOS();
|
||||
|
@ -3379,6 +3379,7 @@ void FullCodeGenerator::VisitCountOperation(CountOperation* expr) {
|
||||
}
|
||||
case NAMED_SUPER_PROPERTY: {
|
||||
EmitNamedSuperPropertyStore(prop);
|
||||
PrepareForBailoutForId(expr->AssignmentId(), BailoutState::TOS_REGISTER);
|
||||
if (expr->is_postfix()) {
|
||||
if (!context()->IsEffect()) {
|
||||
context()->PlugTOS();
|
||||
@ -3390,6 +3391,7 @@ void FullCodeGenerator::VisitCountOperation(CountOperation* expr) {
|
||||
}
|
||||
case KEYED_SUPER_PROPERTY: {
|
||||
EmitKeyedSuperPropertyStore(prop);
|
||||
PrepareForBailoutForId(expr->AssignmentId(), BailoutState::TOS_REGISTER);
|
||||
if (expr->is_postfix()) {
|
||||
if (!context()->IsEffect()) {
|
||||
context()->PlugTOS();
|
||||
|
@ -3299,6 +3299,7 @@ void FullCodeGenerator::VisitCountOperation(CountOperation* expr) {
|
||||
}
|
||||
case NAMED_SUPER_PROPERTY: {
|
||||
EmitNamedSuperPropertyStore(prop);
|
||||
PrepareForBailoutForId(expr->AssignmentId(), BailoutState::TOS_REGISTER);
|
||||
if (expr->is_postfix()) {
|
||||
if (!context()->IsEffect()) {
|
||||
context()->PlugTOS();
|
||||
@ -3310,6 +3311,7 @@ void FullCodeGenerator::VisitCountOperation(CountOperation* expr) {
|
||||
}
|
||||
case KEYED_SUPER_PROPERTY: {
|
||||
EmitKeyedSuperPropertyStore(prop);
|
||||
PrepareForBailoutForId(expr->AssignmentId(), BailoutState::TOS_REGISTER);
|
||||
if (expr->is_postfix()) {
|
||||
if (!context()->IsEffect()) {
|
||||
context()->PlugTOS();
|
||||
|
@ -3274,6 +3274,7 @@ void FullCodeGenerator::VisitCountOperation(CountOperation* expr) {
|
||||
}
|
||||
case NAMED_SUPER_PROPERTY: {
|
||||
EmitNamedSuperPropertyStore(prop);
|
||||
PrepareForBailoutForId(expr->AssignmentId(), BailoutState::TOS_REGISTER);
|
||||
if (expr->is_postfix()) {
|
||||
if (!context()->IsEffect()) {
|
||||
context()->PlugTOS();
|
||||
@ -3285,6 +3286,7 @@ void FullCodeGenerator::VisitCountOperation(CountOperation* expr) {
|
||||
}
|
||||
case KEYED_SUPER_PROPERTY: {
|
||||
EmitKeyedSuperPropertyStore(prop);
|
||||
PrepareForBailoutForId(expr->AssignmentId(), BailoutState::TOS_REGISTER);
|
||||
if (expr->is_postfix()) {
|
||||
if (!context()->IsEffect()) {
|
||||
context()->PlugTOS();
|
||||
|
@ -3275,6 +3275,7 @@ void FullCodeGenerator::VisitCountOperation(CountOperation* expr) {
|
||||
}
|
||||
case NAMED_SUPER_PROPERTY: {
|
||||
EmitNamedSuperPropertyStore(prop);
|
||||
PrepareForBailoutForId(expr->AssignmentId(), BailoutState::TOS_REGISTER);
|
||||
if (expr->is_postfix()) {
|
||||
if (!context()->IsEffect()) {
|
||||
context()->PlugTOS();
|
||||
@ -3286,6 +3287,7 @@ void FullCodeGenerator::VisitCountOperation(CountOperation* expr) {
|
||||
}
|
||||
case KEYED_SUPER_PROPERTY: {
|
||||
EmitKeyedSuperPropertyStore(prop);
|
||||
PrepareForBailoutForId(expr->AssignmentId(), BailoutState::TOS_REGISTER);
|
||||
if (expr->is_postfix()) {
|
||||
if (!context()->IsEffect()) {
|
||||
context()->PlugTOS();
|
||||
|
Loading…
Reference in New Issue
Block a user