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 1634 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1645 | 1645 |
1646 Representation HInferRepresentation::TryChange(HValue* value) { | 1646 Representation HInferRepresentation::TryChange(HValue* value) { |
1647 // Array of use counts for each representation. | 1647 // Array of use counts for each representation. |
1648 int use_count[Representation::kNumRepresentations] = { 0 }; | 1648 int use_count[Representation::kNumRepresentations] = { 0 }; |
1649 | 1649 |
1650 for (HUseIterator it(value->uses()); !it.Done(); it.Advance()) { | 1650 for (HUseIterator it(value->uses()); !it.Done(); it.Advance()) { |
1651 HValue* use = it.value(); | 1651 HValue* use = it.value(); |
1652 Representation rep = use->RequiredInputRepresentation(it.index()); | 1652 Representation rep = use->RequiredInputRepresentation(it.index()); |
1653 if (rep.IsNone()) continue; | 1653 if (rep.IsNone()) continue; |
1654 if (use->IsPhi()) HPhi::cast(use)->AddIndirectUsesTo(&use_count[0]); | 1654 if (use->IsPhi()) HPhi::cast(use)->AddIndirectUsesTo(&use_count[0]); |
1655 ++use_count[rep.kind()]; | 1655 use_count[rep.kind()] += use->LoopWeight(); |
1656 } | 1656 } |
1657 int tagged_count = use_count[Representation::kTagged]; | 1657 int tagged_count = use_count[Representation::kTagged]; |
1658 int double_count = use_count[Representation::kDouble]; | 1658 int double_count = use_count[Representation::kDouble]; |
1659 int int32_count = use_count[Representation::kInteger32]; | 1659 int int32_count = use_count[Representation::kInteger32]; |
1660 int non_tagged_count = double_count + int32_count; | 1660 int non_tagged_count = double_count + int32_count; |
1661 | 1661 |
1662 // If a non-loop phi has tagged uses, don't convert it to untagged. | 1662 // If a non-loop phi has tagged uses, don't convert it to untagged. |
1663 if (value->IsPhi() && !value->block()->IsLoopHeader() && tagged_count > 0) { | 1663 if (value->IsPhi() && !value->block()->IsLoopHeader() && tagged_count > 0) { |
1664 return Representation::None(); | 1664 return Representation::None(); |
1665 } | 1665 } |
(...skipping 5321 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6987 } | 6987 } |
6988 } | 6988 } |
6989 | 6989 |
6990 #ifdef DEBUG | 6990 #ifdef DEBUG |
6991 if (graph_ != NULL) graph_->Verify(false); // No full verify. | 6991 if (graph_ != NULL) graph_->Verify(false); // No full verify. |
6992 if (allocator_ != NULL) allocator_->Verify(); | 6992 if (allocator_ != NULL) allocator_->Verify(); |
6993 #endif | 6993 #endif |
6994 } | 6994 } |
6995 | 6995 |
6996 } } // namespace v8::internal | 6996 } } // namespace v8::internal |
OLD | NEW |