OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 "v8.h" | 5 #include "v8.h" |
6 | 6 |
7 #include "double.h" | 7 #include "double.h" |
8 #include "factory.h" | 8 #include "factory.h" |
9 #include "hydrogen-infer-representation.h" | 9 #include "hydrogen-infer-representation.h" |
10 #include "property-details-inl.h" | 10 #include "property-details-inl.h" |
(...skipping 1651 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1662 case IS_INTERNALIZED_STRING: | 1662 case IS_INTERNALIZED_STRING: |
1663 *mask = kIsNotStringMask | kIsNotInternalizedMask; | 1663 *mask = kIsNotStringMask | kIsNotInternalizedMask; |
1664 *tag = kInternalizedTag; | 1664 *tag = kInternalizedTag; |
1665 return; | 1665 return; |
1666 default: | 1666 default: |
1667 UNREACHABLE(); | 1667 UNREACHABLE(); |
1668 } | 1668 } |
1669 } | 1669 } |
1670 | 1670 |
1671 | 1671 |
1672 bool HCheckMaps::HandleSideEffectDominator(GVNFlag side_effect, | |
1673 HValue* dominator) { | |
1674 ASSERT(side_effect == kMaps); | |
1675 // TODO(mstarzinger): For now we specialize on HStoreNamedField, but once | |
1676 // type information is rich enough we should generalize this to any HType | |
1677 // for which the map is known. | |
1678 if (HasNoUses() && dominator->IsStoreNamedField()) { | |
1679 HStoreNamedField* store = HStoreNamedField::cast(dominator); | |
1680 if (!store->has_transition() || store->object() != value()) return false; | |
1681 HConstant* transition = HConstant::cast(store->transition()); | |
1682 if (map_set_.Contains(Unique<Map>::cast(transition->GetUnique()))) { | |
1683 DeleteAndReplaceWith(NULL); | |
1684 return true; | |
1685 } | |
1686 } | |
1687 return false; | |
1688 } | |
1689 | |
1690 | |
1691 void HCheckMaps::PrintDataTo(StringStream* stream) { | 1672 void HCheckMaps::PrintDataTo(StringStream* stream) { |
1692 value()->PrintNameTo(stream); | 1673 value()->PrintNameTo(stream); |
1693 stream->Add(" [%p", *map_set_.at(0).handle()); | 1674 stream->Add(" [%p", *map_set_.at(0).handle()); |
1694 for (int i = 1; i < map_set_.size(); ++i) { | 1675 for (int i = 1; i < map_set_.size(); ++i) { |
1695 stream->Add(",%p", *map_set_.at(i).handle()); | 1676 stream->Add(",%p", *map_set_.at(i).handle()); |
1696 } | 1677 } |
1697 stream->Add("]%s", CanOmitMapChecks() ? "(omitted)" : ""); | 1678 stream->Add("]%s", CanOmitMapChecks() ? "(omitted)" : ""); |
1698 } | 1679 } |
1699 | 1680 |
1700 | 1681 |
(...skipping 3063 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4764 break; | 4745 break; |
4765 case kExternalMemory: | 4746 case kExternalMemory: |
4766 stream->Add("[external-memory]"); | 4747 stream->Add("[external-memory]"); |
4767 break; | 4748 break; |
4768 } | 4749 } |
4769 | 4750 |
4770 stream->Add("@%d", offset()); | 4751 stream->Add("@%d", offset()); |
4771 } | 4752 } |
4772 | 4753 |
4773 } } // namespace v8::internal | 4754 } } // namespace v8::internal |
OLD | NEW |