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

Side by Side Diff: src/compiler/types.cc

Issue 2402313003: [turbofan] Quit storing strings in types. (Closed)
Patch Set: Removed StringFromCharCodeTyper optimization. Created 4 years, 2 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/typer.cc ('k') | test/unittests/compiler/graph-unittest.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 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 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 <iomanip> 5 #include <iomanip>
6 6
7 #include "src/compiler/types.h" 7 #include "src/compiler/types.h"
8 8
9 #include "src/handles-inl.h" 9 #include "src/handles-inl.h"
10 #include "src/ostreams.h" 10 #include "src/ostreams.h"
(...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after
399 // static 399 // static
400 bool OtherNumberConstantType::IsOtherNumberConstant(Object* value) { 400 bool OtherNumberConstantType::IsOtherNumberConstant(Object* value) {
401 return value->IsHeapNumber() && 401 return value->IsHeapNumber() &&
402 IsOtherNumberConstant(HeapNumber::cast(value)->value()); 402 IsOtherNumberConstant(HeapNumber::cast(value)->value());
403 } 403 }
404 404
405 HeapConstantType::HeapConstantType(BitsetType::bitset bitset, 405 HeapConstantType::HeapConstantType(BitsetType::bitset bitset,
406 i::Handle<i::HeapObject> object) 406 i::Handle<i::HeapObject> object)
407 : TypeBase(kHeapConstant), bitset_(bitset), object_(object) { 407 : TypeBase(kHeapConstant), bitset_(bitset), object_(object) {
408 DCHECK(!object->IsHeapNumber()); 408 DCHECK(!object->IsHeapNumber());
409 DCHECK(!object->IsString());
409 } 410 }
410 411
411 // ----------------------------------------------------------------------------- 412 // -----------------------------------------------------------------------------
412 // Predicates. 413 // Predicates.
413 414
414 bool Type::SimplyEquals(Type* that) { 415 bool Type::SimplyEquals(Type* that) {
415 DisallowHeapAllocation no_allocation; 416 DisallowHeapAllocation no_allocation;
416 if (this->IsHeapConstant()) { 417 if (this->IsHeapConstant()) {
417 return that->IsHeapConstant() && 418 return that->IsHeapConstant() &&
418 this->AsHeapConstant()->Value().address() == 419 this->AsHeapConstant()->Value().address() ==
(...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after
774 DCHECK(OtherNumberConstantType::IsOtherNumberConstant(value)); 775 DCHECK(OtherNumberConstantType::IsOtherNumberConstant(value));
775 return OtherNumberConstant(value, zone); 776 return OtherNumberConstant(value, zone);
776 } 777 }
777 778
778 Type* Type::NewConstant(i::Handle<i::Object> value, Zone* zone) { 779 Type* Type::NewConstant(i::Handle<i::Object> value, Zone* zone) {
779 if (IsInteger(*value)) { 780 if (IsInteger(*value)) {
780 double v = value->Number(); 781 double v = value->Number();
781 return Range(v, v, zone); 782 return Range(v, v, zone);
782 } else if (value->IsHeapNumber()) { 783 } else if (value->IsHeapNumber()) {
783 return NewConstant(value->Number(), zone); 784 return NewConstant(value->Number(), zone);
785 } else if (value->IsString()) {
786 bitset b = BitsetType::Lub(*value);
787 DCHECK(b == BitsetType::kInternalizedString ||
788 b == BitsetType::kOtherString);
789 if (b == BitsetType::kInternalizedString) {
790 return Type::InternalizedString();
791 } else if (b == BitsetType::kOtherString) {
792 return Type::OtherString();
793 } else {
794 UNREACHABLE();
795 }
784 } 796 }
785 return HeapConstant(i::Handle<i::HeapObject>::cast(value), zone); 797 return HeapConstant(i::Handle<i::HeapObject>::cast(value), zone);
786 } 798 }
787 799
788 Type* Type::Union(Type* type1, Type* type2, Zone* zone) { 800 Type* Type::Union(Type* type1, Type* type2, Zone* zone) {
789 // Fast case: bit sets. 801 // Fast case: bit sets.
790 if (type1->IsBitset() && type2->IsBitset()) { 802 if (type1->IsBitset() && type2->IsBitset()) {
791 return BitsetType::New(type1->AsBitset() | type2->AsBitset()); 803 return BitsetType::New(type1->AsBitset() | type2->AsBitset());
792 } 804 }
793 805
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
994 return i::SmiValuesAre31Bits() ? kSigned31 : kSigned32; 1006 return i::SmiValuesAre31Bits() ? kSigned31 : kSigned32;
995 } 1007 }
996 1008
997 BitsetType::bitset BitsetType::UnsignedSmall() { 1009 BitsetType::bitset BitsetType::UnsignedSmall() {
998 return i::SmiValuesAre31Bits() ? kUnsigned30 : kUnsigned31; 1010 return i::SmiValuesAre31Bits() ? kUnsigned30 : kUnsigned31;
999 } 1011 }
1000 1012
1001 } // namespace compiler 1013 } // namespace compiler
1002 } // namespace internal 1014 } // namespace internal
1003 } // namespace v8 1015 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/typer.cc ('k') | test/unittests/compiler/graph-unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698