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

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

Issue 2379573002: [turbofan] Type::Contains() and Constants() is unnecessary. (Closed)
Patch Set: 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 | « no previous file | src/compiler/types.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 #ifndef V8_COMPILER_TYPES_H_ 5 #ifndef V8_COMPILER_TYPES_H_
6 #define V8_COMPILER_TYPES_H_ 6 #define V8_COMPILER_TYPES_H_
7 7
8 #include "src/conversions.h" 8 #include "src/conversions.h"
9 #include "src/handles.h" 9 #include "src/handles.h"
10 #include "src/objects.h" 10 #include "src/objects.h"
(...skipping 495 matching lines...) Expand 10 before | Expand all | Expand 10 after
506 } 506 }
507 static Type* For(i::Handle<i::Map> map) { return For(*map); } 507 static Type* For(i::Handle<i::Map> map) { return For(*map); }
508 508
509 // Predicates. 509 // Predicates.
510 bool IsInhabited() { return BitsetType::IsInhabited(this->BitsetLub()); } 510 bool IsInhabited() { return BitsetType::IsInhabited(this->BitsetLub()); }
511 511
512 bool Is(Type* that) { return this == that || this->SlowIs(that); } 512 bool Is(Type* that) { return this == that || this->SlowIs(that); }
513 bool Maybe(Type* that); 513 bool Maybe(Type* that);
514 bool Equals(Type* that) { return this->Is(that) && that->Is(this); } 514 bool Equals(Type* that) { return this->Is(that) && that->Is(this); }
515 515
516 // Equivalent to Constant(val)->Is(this), but avoiding allocation.
517 bool Contains(i::Object* val);
518 bool Contains(i::Handle<i::Object> val) { return this->Contains(*val); }
519
520 // Inspection. 516 // Inspection.
521 bool IsRange() { return IsKind(TypeBase::kRange); } 517 bool IsRange() { return IsKind(TypeBase::kRange); }
522 bool IsConstant() { return IsKind(TypeBase::kConstant); } 518 bool IsConstant() { return IsKind(TypeBase::kConstant); }
523 bool IsTuple() { return IsKind(TypeBase::kTuple); } 519 bool IsTuple() { return IsKind(TypeBase::kTuple); }
524 520
525 ConstantType* AsConstant() { return ConstantType::cast(this); } 521 ConstantType* AsConstant() { return ConstantType::cast(this); }
526 RangeType* AsRange() { return RangeType::cast(this); } 522 RangeType* AsRange() { return RangeType::cast(this); }
527 TupleType* AsTuple() { return TupleType::cast(this); } 523 TupleType* AsTuple() { return TupleType::cast(this); }
528 524
529 // Minimum and maximum of a numeric type. 525 // Minimum and maximum of a numeric type.
530 // These functions do not distinguish between -0 and +0. If the type equals 526 // These functions do not distinguish between -0 and +0. If the type equals
531 // kNaN, they return NaN; otherwise kNaN is ignored. Only call these 527 // kNaN, they return NaN; otherwise kNaN is ignored. Only call these
532 // functions on subtypes of Number. 528 // functions on subtypes of Number.
533 double Min(); 529 double Min();
534 double Max(); 530 double Max();
535 531
536 // Extracts a range from the type: if the type is a range or a union 532 // Extracts a range from the type: if the type is a range or a union
537 // containing a range, that range is returned; otherwise, NULL is returned. 533 // containing a range, that range is returned; otherwise, NULL is returned.
538 Type* GetRange(); 534 Type* GetRange();
539 535
540 static bool IsInteger(i::Object* x); 536 static bool IsInteger(i::Object* x);
541 static bool IsInteger(double x) { 537 static bool IsInteger(double x) {
542 return nearbyint(x) == x && !i::IsMinusZero(x); // Allows for infinities. 538 return nearbyint(x) == x && !i::IsMinusZero(x); // Allows for infinities.
543 } 539 }
544 540
545 int NumConstants(); 541 int NumConstants();
Jarin 2016/09/28 13:27:02 Is this necessary?
mvstanton 2016/09/28 13:46:08 It gets used by tests, I'd prefer to keep it for n
546 542
547 template <class T>
548 class Iterator {
549 public:
550 bool Done() const { return index_ < 0; }
551 i::Handle<T> Current();
552 void Advance();
553
554 private:
555 friend class Type;
556
557 Iterator() : index_(-1) {}
558 explicit Iterator(Type* type) : type_(type), index_(-1) { Advance(); }
559
560 inline bool matches(Type* type);
561 inline Type* get_type();
562
563 Type* type_;
564 int index_;
565 };
566
567 Iterator<i::Object> Constants() {
568 if (this->IsBitset()) return Iterator<i::Object>();
569 return Iterator<i::Object>(this);
570 }
571
572 // Printing. 543 // Printing.
573 544
574 void PrintTo(std::ostream& os); 545 void PrintTo(std::ostream& os);
575 546
576 #ifdef DEBUG 547 #ifdef DEBUG
577 void Print(); 548 void Print();
578 #endif 549 #endif
579 550
580 // Helpers for testing. 551 // Helpers for testing.
581 bool IsBitsetForTesting() { return IsBitset(); } 552 bool IsBitsetForTesting() { return IsBitset(); }
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
627 RangeType::Limits* limits, Zone* zone); 598 RangeType::Limits* limits, Zone* zone);
628 static Type* NormalizeUnion(Type* unioned, int size, Zone* zone); 599 static Type* NormalizeUnion(Type* unioned, int size, Zone* zone);
629 static Type* NormalizeRangeAndBitset(Type* range, bitset* bits, Zone* zone); 600 static Type* NormalizeRangeAndBitset(Type* range, bitset* bits, Zone* zone);
630 }; 601 };
631 602
632 } // namespace compiler 603 } // namespace compiler
633 } // namespace internal 604 } // namespace internal
634 } // namespace v8 605 } // namespace v8
635 606
636 #endif // V8_COMPILER_TYPES_H_ 607 #endif // V8_COMPILER_TYPES_H_
OLDNEW
« no previous file with comments | « no previous file | src/compiler/types.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698