| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 689 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 700 stream->Add(")"); | 700 stream->Add(")"); |
| 701 } | 701 } |
| 702 | 702 |
| 703 | 703 |
| 704 void HUnaryControlInstruction::PrintDataTo(StringStream* stream) { | 704 void HUnaryControlInstruction::PrintDataTo(StringStream* stream) { |
| 705 value()->PrintNameTo(stream); | 705 value()->PrintNameTo(stream); |
| 706 HControlInstruction::PrintDataTo(stream); | 706 HControlInstruction::PrintDataTo(stream); |
| 707 } | 707 } |
| 708 | 708 |
| 709 | 709 |
| 710 void HIsNilAndBranch::PrintDataTo(StringStream* stream) { |
| 711 value()->PrintNameTo(stream); |
| 712 stream->Add(kind() == kStrictEquality ? " === " : " == "); |
| 713 stream->Add(nil() == kNullValue ? "null" : "undefined"); |
| 714 HControlInstruction::PrintDataTo(stream); |
| 715 } |
| 716 |
| 717 |
| 710 void HReturn::PrintDataTo(StringStream* stream) { | 718 void HReturn::PrintDataTo(StringStream* stream) { |
| 711 value()->PrintNameTo(stream); | 719 value()->PrintNameTo(stream); |
| 712 } | 720 } |
| 713 | 721 |
| 714 | 722 |
| 715 void HCompareMap::PrintDataTo(StringStream* stream) { | 723 void HCompareMap::PrintDataTo(StringStream* stream) { |
| 716 value()->PrintNameTo(stream); | 724 value()->PrintNameTo(stream); |
| 717 stream->Add(" (%p)", *map()); | 725 stream->Add(" (%p)", *map()); |
| 718 HControlInstruction::PrintDataTo(stream); | 726 HControlInstruction::PrintDataTo(stream); |
| 719 } | 727 } |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 770 default: | 778 default: |
| 771 break; | 779 break; |
| 772 } | 780 } |
| 773 } | 781 } |
| 774 | 782 |
| 775 | 783 |
| 776 void HTypeofIsAndBranch::PrintDataTo(StringStream* stream) { | 784 void HTypeofIsAndBranch::PrintDataTo(StringStream* stream) { |
| 777 value()->PrintNameTo(stream); | 785 value()->PrintNameTo(stream); |
| 778 stream->Add(" == "); | 786 stream->Add(" == "); |
| 779 stream->Add(type_literal_->GetFlatContent().ToAsciiVector()); | 787 stream->Add(type_literal_->GetFlatContent().ToAsciiVector()); |
| 788 HControlInstruction::PrintDataTo(stream); |
| 789 } |
| 790 |
| 791 |
| 792 void HTypeof::PrintDataTo(StringStream* stream) { |
| 793 value()->PrintNameTo(stream); |
| 780 } | 794 } |
| 781 | 795 |
| 782 | 796 |
| 783 void HChange::PrintDataTo(StringStream* stream) { | 797 void HChange::PrintDataTo(StringStream* stream) { |
| 784 HUnaryOperation::PrintDataTo(stream); | 798 HUnaryOperation::PrintDataTo(stream); |
| 785 stream->Add(" %s to %s", from_.Mnemonic(), to().Mnemonic()); | 799 stream->Add(" %s to %s", from().Mnemonic(), to().Mnemonic()); |
| 786 | 800 |
| 787 if (CanTruncateToInt32()) stream->Add(" truncating-int32"); | 801 if (CanTruncateToInt32()) stream->Add(" truncating-int32"); |
| 788 if (CheckFlag(kBailoutOnMinusZero)) stream->Add(" -0?"); | 802 if (CheckFlag(kBailoutOnMinusZero)) stream->Add(" -0?"); |
| 803 if (CheckFlag(kDeoptimizeOnUndefined)) stream->Add(" deopt-on-undefined"); |
| 789 } | 804 } |
| 790 | 805 |
| 791 | 806 |
| 792 void HJSArrayLength::PrintDataTo(StringStream* stream) { | 807 void HJSArrayLength::PrintDataTo(StringStream* stream) { |
| 793 value()->PrintNameTo(stream); | 808 value()->PrintNameTo(stream); |
| 794 stream->Add(" "); | 809 stream->Add(" "); |
| 795 typecheck()->PrintNameTo(stream); | 810 typecheck()->PrintNameTo(stream); |
| 796 } | 811 } |
| 797 | 812 |
| 798 | 813 |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 850 stream->Add(" %p", *map()); | 865 stream->Add(" %p", *map()); |
| 851 } | 866 } |
| 852 | 867 |
| 853 | 868 |
| 854 void HCheckFunction::PrintDataTo(StringStream* stream) { | 869 void HCheckFunction::PrintDataTo(StringStream* stream) { |
| 855 value()->PrintNameTo(stream); | 870 value()->PrintNameTo(stream); |
| 856 stream->Add(" %p", *target()); | 871 stream->Add(" %p", *target()); |
| 857 } | 872 } |
| 858 | 873 |
| 859 | 874 |
| 875 const char* HCheckInstanceType::GetCheckName() { |
| 876 switch (check_) { |
| 877 case IS_SPEC_OBJECT: return "object"; |
| 878 case IS_JS_ARRAY: return "array"; |
| 879 case IS_STRING: return "string"; |
| 880 case IS_SYMBOL: return "symbol"; |
| 881 } |
| 882 UNREACHABLE(); |
| 883 return ""; |
| 884 } |
| 885 |
| 886 void HCheckInstanceType::PrintDataTo(StringStream* stream) { |
| 887 stream->Add("%s ", GetCheckName()); |
| 888 HUnaryOperation::PrintDataTo(stream); |
| 889 } |
| 890 |
| 891 |
| 860 void HCallStub::PrintDataTo(StringStream* stream) { | 892 void HCallStub::PrintDataTo(StringStream* stream) { |
| 861 stream->Add("%s ", | 893 stream->Add("%s ", |
| 862 CodeStub::MajorName(major_key_, false)); | 894 CodeStub::MajorName(major_key_, false)); |
| 863 HUnaryCall::PrintDataTo(stream); | 895 HUnaryCall::PrintDataTo(stream); |
| 864 } | 896 } |
| 865 | 897 |
| 866 | 898 |
| 867 void HInstanceOf::PrintDataTo(StringStream* stream) { | 899 void HInstanceOf::PrintDataTo(StringStream* stream) { |
| 868 left()->PrintNameTo(stream); | 900 left()->PrintNameTo(stream); |
| 869 stream->Add(" "); | 901 stream->Add(" "); |
| (...skipping 434 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1304 void HCompareIDAndBranch::PrintDataTo(StringStream* stream) { | 1336 void HCompareIDAndBranch::PrintDataTo(StringStream* stream) { |
| 1305 stream->Add(Token::Name(token())); | 1337 stream->Add(Token::Name(token())); |
| 1306 stream->Add(" "); | 1338 stream->Add(" "); |
| 1307 left()->PrintNameTo(stream); | 1339 left()->PrintNameTo(stream); |
| 1308 stream->Add(" "); | 1340 stream->Add(" "); |
| 1309 right()->PrintNameTo(stream); | 1341 right()->PrintNameTo(stream); |
| 1310 HControlInstruction::PrintDataTo(stream); | 1342 HControlInstruction::PrintDataTo(stream); |
| 1311 } | 1343 } |
| 1312 | 1344 |
| 1313 | 1345 |
| 1346 void HCompareObjectEqAndBranch::PrintDataTo(StringStream* stream) { |
| 1347 left()->PrintNameTo(stream); |
| 1348 stream->Add(" "); |
| 1349 right()->PrintNameTo(stream); |
| 1350 HControlInstruction::PrintDataTo(stream); |
| 1351 } |
| 1352 |
| 1353 |
| 1314 void HGoto::PrintDataTo(StringStream* stream) { | 1354 void HGoto::PrintDataTo(StringStream* stream) { |
| 1315 stream->Add("B%d", SuccessorAt(0)->block_id()); | 1355 stream->Add("B%d", SuccessorAt(0)->block_id()); |
| 1316 } | 1356 } |
| 1317 | 1357 |
| 1318 | 1358 |
| 1319 void HCompareIDAndBranch::SetInputRepresentation(Representation r) { | 1359 void HCompareIDAndBranch::SetInputRepresentation(Representation r) { |
| 1320 input_representation_ = r; | 1360 input_representation_ = r; |
| 1321 if (r.IsDouble()) { | 1361 if (r.IsDouble()) { |
| 1322 SetFlag(kDeoptimizeOnUndefined); | 1362 SetFlag(kDeoptimizeOnUndefined); |
| 1323 } else { | 1363 } else { |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1418 | 1458 |
| 1419 | 1459 |
| 1420 void HLoadKeyedFastElement::PrintDataTo(StringStream* stream) { | 1460 void HLoadKeyedFastElement::PrintDataTo(StringStream* stream) { |
| 1421 object()->PrintNameTo(stream); | 1461 object()->PrintNameTo(stream); |
| 1422 stream->Add("["); | 1462 stream->Add("["); |
| 1423 key()->PrintNameTo(stream); | 1463 key()->PrintNameTo(stream); |
| 1424 stream->Add("]"); | 1464 stream->Add("]"); |
| 1425 } | 1465 } |
| 1426 | 1466 |
| 1427 | 1467 |
| 1428 bool HLoadKeyedFastElement::RequiresHoleCheck() const { | 1468 bool HLoadKeyedFastElement::RequiresHoleCheck() { |
| 1429 for (HUseIterator it(uses()); !it.Done(); it.Advance()) { | 1469 for (HUseIterator it(uses()); !it.Done(); it.Advance()) { |
| 1430 HValue* use = it.value(); | 1470 HValue* use = it.value(); |
| 1431 if (!use->IsChange()) return true; | 1471 if (!use->IsChange()) return true; |
| 1432 } | 1472 } |
| 1433 return false; | 1473 return false; |
| 1434 } | 1474 } |
| 1435 | 1475 |
| 1436 | 1476 |
| 1437 void HLoadKeyedFastDoubleElement::PrintDataTo(StringStream* stream) { | 1477 void HLoadKeyedFastDoubleElement::PrintDataTo(StringStream* stream) { |
| 1438 elements()->PrintNameTo(stream); | 1478 elements()->PrintNameTo(stream); |
| 1439 stream->Add("["); | 1479 stream->Add("["); |
| 1440 key()->PrintNameTo(stream); | 1480 key()->PrintNameTo(stream); |
| 1441 stream->Add("]"); | 1481 stream->Add("]"); |
| 1442 } | 1482 } |
| 1443 | 1483 |
| 1444 | 1484 |
| 1445 bool HLoadKeyedFastDoubleElement::RequiresHoleCheck() const { | |
| 1446 return true; | |
| 1447 } | |
| 1448 | |
| 1449 | |
| 1450 void HLoadKeyedGeneric::PrintDataTo(StringStream* stream) { | 1485 void HLoadKeyedGeneric::PrintDataTo(StringStream* stream) { |
| 1451 object()->PrintNameTo(stream); | 1486 object()->PrintNameTo(stream); |
| 1452 stream->Add("["); | 1487 stream->Add("["); |
| 1453 key()->PrintNameTo(stream); | 1488 key()->PrintNameTo(stream); |
| 1454 stream->Add("]"); | 1489 stream->Add("]"); |
| 1455 } | 1490 } |
| 1456 | 1491 |
| 1457 | 1492 |
| 1458 void HLoadKeyedSpecializedArrayElement::PrintDataTo( | 1493 void HLoadKeyedSpecializedArrayElement::PrintDataTo( |
| 1459 StringStream* stream) { | 1494 StringStream* stream) { |
| (...skipping 21 matching lines...) Expand all Loading... |
| 1481 case EXTERNAL_FLOAT_ELEMENTS: | 1516 case EXTERNAL_FLOAT_ELEMENTS: |
| 1482 stream->Add("float"); | 1517 stream->Add("float"); |
| 1483 break; | 1518 break; |
| 1484 case EXTERNAL_DOUBLE_ELEMENTS: | 1519 case EXTERNAL_DOUBLE_ELEMENTS: |
| 1485 stream->Add("double"); | 1520 stream->Add("double"); |
| 1486 break; | 1521 break; |
| 1487 case EXTERNAL_PIXEL_ELEMENTS: | 1522 case EXTERNAL_PIXEL_ELEMENTS: |
| 1488 stream->Add("pixel"); | 1523 stream->Add("pixel"); |
| 1489 break; | 1524 break; |
| 1490 case FAST_ELEMENTS: | 1525 case FAST_ELEMENTS: |
| 1526 case FAST_SMI_ONLY_ELEMENTS: |
| 1491 case FAST_DOUBLE_ELEMENTS: | 1527 case FAST_DOUBLE_ELEMENTS: |
| 1492 case DICTIONARY_ELEMENTS: | 1528 case DICTIONARY_ELEMENTS: |
| 1493 case NON_STRICT_ARGUMENTS_ELEMENTS: | 1529 case NON_STRICT_ARGUMENTS_ELEMENTS: |
| 1494 UNREACHABLE(); | 1530 UNREACHABLE(); |
| 1495 break; | 1531 break; |
| 1496 } | 1532 } |
| 1497 stream->Add("["); | 1533 stream->Add("["); |
| 1498 key()->PrintNameTo(stream); | 1534 key()->PrintNameTo(stream); |
| 1499 stream->Add("]"); | 1535 stream->Add("]"); |
| 1500 } | 1536 } |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1575 break; | 1611 break; |
| 1576 case EXTERNAL_FLOAT_ELEMENTS: | 1612 case EXTERNAL_FLOAT_ELEMENTS: |
| 1577 stream->Add("float"); | 1613 stream->Add("float"); |
| 1578 break; | 1614 break; |
| 1579 case EXTERNAL_DOUBLE_ELEMENTS: | 1615 case EXTERNAL_DOUBLE_ELEMENTS: |
| 1580 stream->Add("double"); | 1616 stream->Add("double"); |
| 1581 break; | 1617 break; |
| 1582 case EXTERNAL_PIXEL_ELEMENTS: | 1618 case EXTERNAL_PIXEL_ELEMENTS: |
| 1583 stream->Add("pixel"); | 1619 stream->Add("pixel"); |
| 1584 break; | 1620 break; |
| 1621 case FAST_SMI_ONLY_ELEMENTS: |
| 1585 case FAST_ELEMENTS: | 1622 case FAST_ELEMENTS: |
| 1586 case FAST_DOUBLE_ELEMENTS: | 1623 case FAST_DOUBLE_ELEMENTS: |
| 1587 case DICTIONARY_ELEMENTS: | 1624 case DICTIONARY_ELEMENTS: |
| 1588 case NON_STRICT_ARGUMENTS_ELEMENTS: | 1625 case NON_STRICT_ARGUMENTS_ELEMENTS: |
| 1589 UNREACHABLE(); | 1626 UNREACHABLE(); |
| 1590 break; | 1627 break; |
| 1591 } | 1628 } |
| 1592 stream->Add("["); | 1629 stream->Add("["); |
| 1593 key()->PrintNameTo(stream); | 1630 key()->PrintNameTo(stream); |
| 1594 stream->Add("] = "); | 1631 stream->Add("] = "); |
| 1595 value()->PrintNameTo(stream); | 1632 value()->PrintNameTo(stream); |
| 1596 } | 1633 } |
| 1597 | 1634 |
| 1598 | 1635 |
| 1599 void HLoadGlobalCell::PrintDataTo(StringStream* stream) { | 1636 void HLoadGlobalCell::PrintDataTo(StringStream* stream) { |
| 1600 stream->Add("[%p]", *cell()); | 1637 stream->Add("[%p]", *cell()); |
| 1601 if (check_hole_value()) stream->Add(" (deleteable/read-only)"); | 1638 if (!details_.IsDontDelete()) stream->Add(" (deleteable)"); |
| 1639 if (details_.IsReadOnly()) stream->Add(" (read-only)"); |
| 1640 } |
| 1641 |
| 1642 |
| 1643 bool HLoadGlobalCell::RequiresHoleCheck() { |
| 1644 if (details_.IsDontDelete() && !details_.IsReadOnly()) return false; |
| 1645 for (HUseIterator it(uses()); !it.Done(); it.Advance()) { |
| 1646 HValue* use = it.value(); |
| 1647 if (!use->IsChange()) return true; |
| 1648 } |
| 1649 return false; |
| 1602 } | 1650 } |
| 1603 | 1651 |
| 1604 | 1652 |
| 1605 void HLoadGlobalGeneric::PrintDataTo(StringStream* stream) { | 1653 void HLoadGlobalGeneric::PrintDataTo(StringStream* stream) { |
| 1606 stream->Add("%o ", *name()); | 1654 stream->Add("%o ", *name()); |
| 1607 } | 1655 } |
| 1608 | 1656 |
| 1609 | 1657 |
| 1610 void HStoreGlobalCell::PrintDataTo(StringStream* stream) { | 1658 void HStoreGlobalCell::PrintDataTo(StringStream* stream) { |
| 1611 stream->Add("[%p] = ", *cell()); | 1659 stream->Add("[%p] = ", *cell()); |
| 1612 value()->PrintNameTo(stream); | 1660 value()->PrintNameTo(stream); |
| 1661 if (!details_.IsDontDelete()) stream->Add(" (deleteable)"); |
| 1662 if (details_.IsReadOnly()) stream->Add(" (read-only)"); |
| 1613 } | 1663 } |
| 1614 | 1664 |
| 1615 | 1665 |
| 1616 void HStoreGlobalGeneric::PrintDataTo(StringStream* stream) { | 1666 void HStoreGlobalGeneric::PrintDataTo(StringStream* stream) { |
| 1617 stream->Add("%o = ", *name()); | 1667 stream->Add("%o = ", *name()); |
| 1618 value()->PrintNameTo(stream); | 1668 value()->PrintNameTo(stream); |
| 1619 } | 1669 } |
| 1620 | 1670 |
| 1621 | 1671 |
| 1622 void HLoadContextSlot::PrintDataTo(StringStream* stream) { | 1672 void HLoadContextSlot::PrintDataTo(StringStream* stream) { |
| (...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1885 | 1935 |
| 1886 | 1936 |
| 1887 void HCheckPrototypeMaps::Verify() { | 1937 void HCheckPrototypeMaps::Verify() { |
| 1888 HInstruction::Verify(); | 1938 HInstruction::Verify(); |
| 1889 ASSERT(HasNoUses()); | 1939 ASSERT(HasNoUses()); |
| 1890 } | 1940 } |
| 1891 | 1941 |
| 1892 #endif | 1942 #endif |
| 1893 | 1943 |
| 1894 } } // namespace v8::internal | 1944 } } // namespace v8::internal |
| OLD | NEW |