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

Side by Side Diff: src/compiler/bytecode-graph-builder.cc

Issue 1546683002: [Interpreter] Add support for jumps using constants with wide operands. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Incorporate comments on patchset 13. Created 4 years, 11 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/compiler/bytecode-graph-builder.h ('k') | src/interpreter/bytecode-array-builder.h » ('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/compiler/bytecode-graph-builder.h" 5 #include "src/compiler/bytecode-graph-builder.h"
6 6
7 #include "src/compiler/bytecode-branch-analysis.h" 7 #include "src/compiler/bytecode-branch-analysis.h"
8 #include "src/compiler/linkage.h" 8 #include "src/compiler/linkage.h"
9 #include "src/compiler/operator-properties.h" 9 #include "src/compiler/operator-properties.h"
10 #include "src/interpreter/bytecodes.h" 10 #include "src/interpreter/bytecodes.h"
(...skipping 1471 matching lines...) Expand 10 before | Expand all | Expand 10 after
1482 BuildJump(); 1482 BuildJump();
1483 } 1483 }
1484 1484
1485 1485
1486 void BytecodeGraphBuilder::VisitJumpConstant( 1486 void BytecodeGraphBuilder::VisitJumpConstant(
1487 const interpreter::BytecodeArrayIterator& iterator) { 1487 const interpreter::BytecodeArrayIterator& iterator) {
1488 BuildJump(); 1488 BuildJump();
1489 } 1489 }
1490 1490
1491 1491
1492 void BytecodeGraphBuilder::VisitJumpConstantWide(
1493 const interpreter::BytecodeArrayIterator& iterator) {
1494 BuildJump();
1495 }
1496
1497
1492 void BytecodeGraphBuilder::VisitJumpIfTrue( 1498 void BytecodeGraphBuilder::VisitJumpIfTrue(
1493 const interpreter::BytecodeArrayIterator& iterator) { 1499 const interpreter::BytecodeArrayIterator& iterator) {
1494 Node* condition = BuildCondition(jsgraph()->TrueConstant()); 1500 BuildJumpIfEqual(jsgraph()->TrueConstant());
1495 BuildConditionalJump(condition);
1496 } 1501 }
1497 1502
1498 1503
1499 void BytecodeGraphBuilder::VisitJumpIfTrueConstant( 1504 void BytecodeGraphBuilder::VisitJumpIfTrueConstant(
1500 const interpreter::BytecodeArrayIterator& iterator) { 1505 const interpreter::BytecodeArrayIterator& iterator) {
1501 Node* condition = BuildCondition(jsgraph()->TrueConstant()); 1506 BuildJumpIfEqual(jsgraph()->TrueConstant());
1502 BuildConditionalJump(condition); 1507 }
1508
1509
1510 void BytecodeGraphBuilder::VisitJumpIfTrueConstantWide(
1511 const interpreter::BytecodeArrayIterator& iterator) {
1512 BuildJumpIfEqual(jsgraph()->TrueConstant());
1503 } 1513 }
1504 1514
1505 1515
1506 void BytecodeGraphBuilder::VisitJumpIfFalse( 1516 void BytecodeGraphBuilder::VisitJumpIfFalse(
1507 const interpreter::BytecodeArrayIterator& iterator) { 1517 const interpreter::BytecodeArrayIterator& iterator) {
1508 Node* condition = BuildCondition(jsgraph()->FalseConstant()); 1518 BuildJumpIfEqual(jsgraph()->FalseConstant());
1509 BuildConditionalJump(condition);
1510 } 1519 }
1511 1520
1512 1521
1513 void BytecodeGraphBuilder::VisitJumpIfFalseConstant( 1522 void BytecodeGraphBuilder::VisitJumpIfFalseConstant(
1514 const interpreter::BytecodeArrayIterator& iterator) { 1523 const interpreter::BytecodeArrayIterator& iterator) {
1515 Node* condition = BuildCondition(jsgraph()->FalseConstant()); 1524 BuildJumpIfEqual(jsgraph()->FalseConstant());
1516 BuildConditionalJump(condition); 1525 }
1526
1527
1528 void BytecodeGraphBuilder::VisitJumpIfFalseConstantWide(
1529 const interpreter::BytecodeArrayIterator& iterator) {
1530 BuildJumpIfEqual(jsgraph()->FalseConstant());
1517 } 1531 }
1518 1532
1519 1533
1520 void BytecodeGraphBuilder::VisitJumpIfToBooleanTrue( 1534 void BytecodeGraphBuilder::VisitJumpIfToBooleanTrue(
1521 const interpreter::BytecodeArrayIterator& iterator) { 1535 const interpreter::BytecodeArrayIterator& iterator) {
1522 Node* condition = BuildToBooleanCondition(jsgraph()->TrueConstant()); 1536 BuildJumpIfToBooleanEqual(jsgraph()->TrueConstant());
1523 BuildConditionalJump(condition);
1524 } 1537 }
1525 1538
1526 1539
1527 void BytecodeGraphBuilder::VisitJumpIfToBooleanTrueConstant( 1540 void BytecodeGraphBuilder::VisitJumpIfToBooleanTrueConstant(
1528 const interpreter::BytecodeArrayIterator& iterator) { 1541 const interpreter::BytecodeArrayIterator& iterator) {
1529 Node* condition = BuildToBooleanCondition(jsgraph()->TrueConstant()); 1542 BuildJumpIfToBooleanEqual(jsgraph()->TrueConstant());
1530 BuildConditionalJump(condition); 1543 }
1544
1545
1546 void BytecodeGraphBuilder::VisitJumpIfToBooleanTrueConstantWide(
1547 const interpreter::BytecodeArrayIterator& iterator) {
1548 BuildJumpIfToBooleanEqual(jsgraph()->TrueConstant());
1531 } 1549 }
1532 1550
1533 1551
1534 void BytecodeGraphBuilder::VisitJumpIfToBooleanFalse( 1552 void BytecodeGraphBuilder::VisitJumpIfToBooleanFalse(
1535 const interpreter::BytecodeArrayIterator& iterator) { 1553 const interpreter::BytecodeArrayIterator& iterator) {
1536 Node* condition = BuildToBooleanCondition(jsgraph()->FalseConstant()); 1554 BuildJumpIfToBooleanEqual(jsgraph()->FalseConstant());
1537 BuildConditionalJump(condition);
1538 } 1555 }
1539 1556
1540 1557
1541 void BytecodeGraphBuilder::VisitJumpIfToBooleanFalseConstant( 1558 void BytecodeGraphBuilder::VisitJumpIfToBooleanFalseConstant(
1542 const interpreter::BytecodeArrayIterator& iterator) { 1559 const interpreter::BytecodeArrayIterator& iterator) {
1543 Node* condition = BuildToBooleanCondition(jsgraph()->FalseConstant()); 1560 BuildJumpIfToBooleanEqual(jsgraph()->FalseConstant());
1544 BuildConditionalJump(condition); 1561 }
1562
1563
1564 void BytecodeGraphBuilder::VisitJumpIfToBooleanFalseConstantWide(
1565 const interpreter::BytecodeArrayIterator& iterator) {
1566 BuildJumpIfToBooleanEqual(jsgraph()->FalseConstant());
1545 } 1567 }
1546 1568
1547 1569
1548 void BytecodeGraphBuilder::VisitJumpIfNull( 1570 void BytecodeGraphBuilder::VisitJumpIfNull(
1549 const interpreter::BytecodeArrayIterator& iterator) { 1571 const interpreter::BytecodeArrayIterator& iterator) {
1550 Node* condition = BuildCondition(jsgraph()->NullConstant()); 1572 BuildJumpIfEqual(jsgraph()->NullConstant());
1551 BuildConditionalJump(condition);
1552 } 1573 }
1553 1574
1554 1575
1555 void BytecodeGraphBuilder::VisitJumpIfNullConstant( 1576 void BytecodeGraphBuilder::VisitJumpIfNullConstant(
1556 const interpreter::BytecodeArrayIterator& iterator) { 1577 const interpreter::BytecodeArrayIterator& iterator) {
1557 Node* condition = BuildCondition(jsgraph()->NullConstant()); 1578 BuildJumpIfEqual(jsgraph()->NullConstant());
1558 BuildConditionalJump(condition); 1579 }
1580
1581
1582 void BytecodeGraphBuilder::VisitJumpIfNullConstantWide(
1583 const interpreter::BytecodeArrayIterator& iterator) {
1584 BuildJumpIfEqual(jsgraph()->NullConstant());
1559 } 1585 }
1560 1586
1561 1587
1562 void BytecodeGraphBuilder::VisitJumpIfUndefined( 1588 void BytecodeGraphBuilder::VisitJumpIfUndefined(
1563 const interpreter::BytecodeArrayIterator& iterator) { 1589 const interpreter::BytecodeArrayIterator& iterator) {
1564 Node* condition = BuildCondition(jsgraph()->UndefinedConstant()); 1590 BuildJumpIfEqual(jsgraph()->UndefinedConstant());
1565 BuildConditionalJump(condition);
1566 } 1591 }
1567 1592
1568 1593
1569 void BytecodeGraphBuilder::VisitJumpIfUndefinedConstant( 1594 void BytecodeGraphBuilder::VisitJumpIfUndefinedConstant(
1570 const interpreter::BytecodeArrayIterator& iterator) { 1595 const interpreter::BytecodeArrayIterator& iterator) {
1571 Node* condition = BuildCondition(jsgraph()->UndefinedConstant()); 1596 BuildJumpIfEqual(jsgraph()->UndefinedConstant());
1572 BuildConditionalJump(condition);
1573 } 1597 }
1574 1598
1575 1599
1600 void BytecodeGraphBuilder::VisitJumpIfUndefinedConstantWide(
1601 const interpreter::BytecodeArrayIterator& iterator) {
1602 BuildJumpIfEqual(jsgraph()->UndefinedConstant());
1603 }
1604
1605
1576 void BytecodeGraphBuilder::VisitReturn( 1606 void BytecodeGraphBuilder::VisitReturn(
1577 const interpreter::BytecodeArrayIterator& iterator) { 1607 const interpreter::BytecodeArrayIterator& iterator) {
1578 Node* control = 1608 Node* control =
1579 NewNode(common()->Return(), environment()->LookupAccumulator()); 1609 NewNode(common()->Return(), environment()->LookupAccumulator());
1580 UpdateControlDependencyToLeaveFunction(control); 1610 UpdateControlDependencyToLeaveFunction(control);
1581 set_environment(nullptr); 1611 set_environment(nullptr);
1582 } 1612 }
1583 1613
1584 1614
1585 void BytecodeGraphBuilder::VisitForInPrepare( 1615 void BytecodeGraphBuilder::VisitForInPrepare(
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
1707 int source_offset = bytecode_iterator()->current_offset(); 1737 int source_offset = bytecode_iterator()->current_offset();
1708 NewBranch(condition); 1738 NewBranch(condition);
1709 Environment* if_false_environment = environment()->CopyForConditional(); 1739 Environment* if_false_environment = environment()->CopyForConditional();
1710 NewIfTrue(); 1740 NewIfTrue();
1711 BuildJump(source_offset, bytecode_iterator()->GetJumpTargetOffset()); 1741 BuildJump(source_offset, bytecode_iterator()->GetJumpTargetOffset());
1712 set_environment(if_false_environment); 1742 set_environment(if_false_environment);
1713 NewIfFalse(); 1743 NewIfFalse();
1714 } 1744 }
1715 1745
1716 1746
1717 Node* BytecodeGraphBuilder::BuildCondition(Node* comperand) { 1747 void BytecodeGraphBuilder::BuildJumpIfEqual(Node* comperand) {
1718 Node* accumulator = environment()->LookupAccumulator(); 1748 Node* accumulator = environment()->LookupAccumulator();
1719 return NewNode(javascript()->StrictEqual(), accumulator, comperand); 1749 Node* condition =
1750 NewNode(javascript()->StrictEqual(), accumulator, comperand);
1751 BuildConditionalJump(condition);
1720 } 1752 }
1721 1753
1722 1754
1723 Node* BytecodeGraphBuilder::BuildToBooleanCondition(Node* comperand) { 1755 void BytecodeGraphBuilder::BuildJumpIfToBooleanEqual(Node* comperand) {
1724 Node* accumulator = environment()->LookupAccumulator(); 1756 Node* accumulator = environment()->LookupAccumulator();
1725 Node* to_boolean = 1757 Node* to_boolean =
1726 NewNode(javascript()->ToBoolean(ToBooleanHint::kAny), accumulator); 1758 NewNode(javascript()->ToBoolean(ToBooleanHint::kAny), accumulator);
1727 return NewNode(javascript()->StrictEqual(), to_boolean, comperand); 1759 Node* condition = NewNode(javascript()->StrictEqual(), to_boolean, comperand);
1760 BuildConditionalJump(condition);
1728 } 1761 }
1729 1762
1730 1763
1731 Node** BytecodeGraphBuilder::EnsureInputBufferSize(int size) { 1764 Node** BytecodeGraphBuilder::EnsureInputBufferSize(int size) {
1732 if (size > input_buffer_size_) { 1765 if (size > input_buffer_size_) {
1733 size = size + kInputBufferSizeIncrement + input_buffer_size_; 1766 size = size + kInputBufferSizeIncrement + input_buffer_size_;
1734 input_buffer_ = local_zone()->NewArray<Node*>(size); 1767 input_buffer_ = local_zone()->NewArray<Node*>(size);
1735 input_buffer_size_ = size; 1768 input_buffer_size_ = size;
1736 } 1769 }
1737 return input_buffer_; 1770 return input_buffer_;
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
1878 1911
1879 void BytecodeGraphBuilder::UpdateControlDependencyToLeaveFunction(Node* exit) { 1912 void BytecodeGraphBuilder::UpdateControlDependencyToLeaveFunction(Node* exit) {
1880 if (environment()->IsMarkedAsUnreachable()) return; 1913 if (environment()->IsMarkedAsUnreachable()) return;
1881 environment()->MarkAsUnreachable(); 1914 environment()->MarkAsUnreachable();
1882 exit_controls_.push_back(exit); 1915 exit_controls_.push_back(exit);
1883 } 1916 }
1884 1917
1885 } // namespace compiler 1918 } // namespace compiler
1886 } // namespace internal 1919 } // namespace internal
1887 } // namespace v8 1920 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/bytecode-graph-builder.h ('k') | src/interpreter/bytecode-array-builder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698