Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(93)

Side by Side Diff: src/interpreter/bytecode-array-builder.cc

Issue 2331033002: [interpreter] Merge {OsrPoll} with {Jump} bytecode. (Closed)
Patch Set: One more test. Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/interpreter/bytecode-array-builder.h ('k') | src/interpreter/bytecode-array-writer.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/interpreter/bytecode-array-builder.h" 5 #include "src/interpreter/bytecode-array-builder.h"
6 6
7 #include "src/globals.h" 7 #include "src/globals.h"
8 #include "src/interpreter/bytecode-array-writer.h" 8 #include "src/interpreter/bytecode-array-writer.h"
9 #include "src/interpreter/bytecode-dead-code-optimizer.h" 9 #include "src/interpreter/bytecode-dead-code-optimizer.h"
10 #include "src/interpreter/bytecode-label.h" 10 #include "src/interpreter/bytecode-label.h"
(...skipping 434 matching lines...) Expand 10 before | Expand all | Expand 10 after
445 return *this; 445 return *this;
446 } 446 }
447 447
448 BytecodeArrayBuilder& BytecodeArrayBuilder::Bind(const BytecodeLabel& target, 448 BytecodeArrayBuilder& BytecodeArrayBuilder::Bind(const BytecodeLabel& target,
449 BytecodeLabel* label) { 449 BytecodeLabel* label) {
450 pipeline_->BindLabel(target, label); 450 pipeline_->BindLabel(target, label);
451 LeaveBasicBlock(); 451 LeaveBasicBlock();
452 return *this; 452 return *this;
453 } 453 }
454 454
455 BytecodeArrayBuilder& BytecodeArrayBuilder::OutputJump(Bytecode jump_bytecode, 455 BytecodeArrayBuilder& BytecodeArrayBuilder::OutputJump(BytecodeNode* node,
456 BytecodeLabel* label) { 456 BytecodeLabel* label) {
457 BytecodeNode node(jump_bytecode, 0); 457 AttachSourceInfo(node);
458 AttachSourceInfo(&node); 458 pipeline_->WriteJump(node, label);
459 pipeline_->WriteJump(&node, label);
460 LeaveBasicBlock(); 459 LeaveBasicBlock();
461 return *this; 460 return *this;
462 } 461 }
463 462
464 BytecodeArrayBuilder& BytecodeArrayBuilder::Jump(BytecodeLabel* label) { 463 BytecodeArrayBuilder& BytecodeArrayBuilder::Jump(BytecodeLabel* label) {
465 return OutputJump(Bytecode::kJump, label); 464 BytecodeNode node(Bytecode::kJump, 0);
465 return OutputJump(&node, label);
466 } 466 }
467 467
468 BytecodeArrayBuilder& BytecodeArrayBuilder::JumpIfTrue(BytecodeLabel* label) { 468 BytecodeArrayBuilder& BytecodeArrayBuilder::JumpIfTrue(BytecodeLabel* label) {
469 // The peephole optimizer attempts to simplify JumpIfToBooleanTrue 469 // The peephole optimizer attempts to simplify JumpIfToBooleanTrue
470 // to JumpIfTrue. 470 // to JumpIfTrue.
471 return OutputJump(Bytecode::kJumpIfToBooleanTrue, label); 471 BytecodeNode node(Bytecode::kJumpIfToBooleanTrue, 0);
472 return OutputJump(&node, label);
472 } 473 }
473 474
474 BytecodeArrayBuilder& BytecodeArrayBuilder::JumpIfFalse(BytecodeLabel* label) { 475 BytecodeArrayBuilder& BytecodeArrayBuilder::JumpIfFalse(BytecodeLabel* label) {
475 // The peephole optimizer attempts to simplify JumpIfToBooleanFalse 476 // The peephole optimizer attempts to simplify JumpIfToBooleanFalse
476 // to JumpIfFalse. 477 // to JumpIfFalse.
477 return OutputJump(Bytecode::kJumpIfToBooleanFalse, label); 478 BytecodeNode node(Bytecode::kJumpIfToBooleanFalse, 0);
479 return OutputJump(&node, label);
478 } 480 }
479 481
480 BytecodeArrayBuilder& BytecodeArrayBuilder::JumpIfNull(BytecodeLabel* label) { 482 BytecodeArrayBuilder& BytecodeArrayBuilder::JumpIfNull(BytecodeLabel* label) {
481 return OutputJump(Bytecode::kJumpIfNull, label); 483 BytecodeNode node(Bytecode::kJumpIfNull, 0);
484 return OutputJump(&node, label);
482 } 485 }
483 486
484 BytecodeArrayBuilder& BytecodeArrayBuilder::JumpIfUndefined( 487 BytecodeArrayBuilder& BytecodeArrayBuilder::JumpIfUndefined(
485 BytecodeLabel* label) { 488 BytecodeLabel* label) {
486 return OutputJump(Bytecode::kJumpIfUndefined, label); 489 BytecodeNode node(Bytecode::kJumpIfUndefined, 0);
490 return OutputJump(&node, label);
487 } 491 }
488 492
489 BytecodeArrayBuilder& BytecodeArrayBuilder::JumpIfNotHole( 493 BytecodeArrayBuilder& BytecodeArrayBuilder::JumpIfNotHole(
490 BytecodeLabel* label) { 494 BytecodeLabel* label) {
491 return OutputJump(Bytecode::kJumpIfNotHole, label); 495 BytecodeNode node(Bytecode::kJumpIfNotHole, 0);
496 return OutputJump(&node, label);
497 }
498
499 BytecodeArrayBuilder& BytecodeArrayBuilder::JumpLoop(BytecodeLabel* label,
500 int loop_depth) {
501 BytecodeNode node(Bytecode::kJumpLoop, 0, UnsignedOperand(loop_depth));
502 return OutputJump(&node, label);
492 } 503 }
493 504
494 BytecodeArrayBuilder& BytecodeArrayBuilder::StackCheck(int position) { 505 BytecodeArrayBuilder& BytecodeArrayBuilder::StackCheck(int position) {
495 if (position != kNoSourcePosition) { 506 if (position != kNoSourcePosition) {
496 // We need to attach a non-breakable source position to a stack 507 // We need to attach a non-breakable source position to a stack
497 // check, so we simply add it as expression position. There can be 508 // check, so we simply add it as expression position. There can be
498 // a prior statement position from constructs like: 509 // a prior statement position from constructs like:
499 // 510 //
500 // do var x; while (false); 511 // do var x; while (false);
501 // 512 //
502 // A Nop could be inserted for empty statements, but since no code 513 // A Nop could be inserted for empty statements, but since no code
503 // is associated with these positions, instead we force the stack 514 // is associated with these positions, instead we force the stack
504 // check's expression position which eliminates the empty 515 // check's expression position which eliminates the empty
505 // statement's position. 516 // statement's position.
506 latest_source_info_.ForceExpressionPosition(position); 517 latest_source_info_.ForceExpressionPosition(position);
507 } 518 }
508 Output(Bytecode::kStackCheck); 519 Output(Bytecode::kStackCheck);
509 return *this; 520 return *this;
510 } 521 }
511 522
512 BytecodeArrayBuilder& BytecodeArrayBuilder::OsrPoll(int loop_depth) {
513 Output(Bytecode::kOsrPoll, UnsignedOperand(loop_depth));
514 return *this;
515 }
516
517 BytecodeArrayBuilder& BytecodeArrayBuilder::Throw() { 523 BytecodeArrayBuilder& BytecodeArrayBuilder::Throw() {
518 Output(Bytecode::kThrow); 524 Output(Bytecode::kThrow);
519 return *this; 525 return *this;
520 } 526 }
521 527
522 BytecodeArrayBuilder& BytecodeArrayBuilder::ReThrow() { 528 BytecodeArrayBuilder& BytecodeArrayBuilder::ReThrow() {
523 Output(Bytecode::kReThrow); 529 Output(Bytecode::kReThrow);
524 return *this; 530 return *this;
525 } 531 }
526 532
(...skipping 469 matching lines...) Expand 10 before | Expand all | Expand 10 after
996 return Bytecode::kTailCall; 1002 return Bytecode::kTailCall;
997 default: 1003 default:
998 UNREACHABLE(); 1004 UNREACHABLE();
999 } 1005 }
1000 return Bytecode::kIllegal; 1006 return Bytecode::kIllegal;
1001 } 1007 }
1002 1008
1003 } // namespace interpreter 1009 } // namespace interpreter
1004 } // namespace internal 1010 } // namespace internal
1005 } // namespace v8 1011 } // namespace v8
OLDNEW
« no previous file with comments | « src/interpreter/bytecode-array-builder.h ('k') | src/interpreter/bytecode-array-writer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698