| Index: src/register-allocator.h
|
| diff --git a/src/register-allocator.h b/src/register-allocator.h
|
| index c5391918d5d91ba9673ece889e67d73636c32846..f7167d9262d4cd7e7b7cd719d9891c9edb9659e0 100644
|
| --- a/src/register-allocator.h
|
| +++ b/src/register-allocator.h
|
| @@ -45,80 +45,6 @@ namespace internal {
|
|
|
|
|
| // -------------------------------------------------------------------------
|
| -// StaticType
|
| -//
|
| -// StaticType represent the type of an expression or a word at runtime.
|
| -// The types are ordered by knowledge, so that if a value can come about
|
| -// in more than one way, and there are different static types inferred
|
| -// for the different ways, the types can be combined to a type that we
|
| -// are still certain of (possibly just "unknown").
|
| -
|
| -class StaticType BASE_EMBEDDED {
|
| - public:
|
| - StaticType() : static_type_(UNKNOWN_TYPE) {}
|
| -
|
| - static StaticType unknown() { return StaticType(); }
|
| - static StaticType smi() { return StaticType(SMI_TYPE); }
|
| - static StaticType jsstring() { return StaticType(STRING_TYPE); }
|
| - static StaticType heap_object() { return StaticType(HEAP_OBJECT_TYPE); }
|
| -
|
| - // Accessors
|
| - bool is_unknown() { return static_type_ == UNKNOWN_TYPE; }
|
| - bool is_smi() { return static_type_ == SMI_TYPE; }
|
| - bool is_heap_object() { return (static_type_ & HEAP_OBJECT_TYPE) != 0; }
|
| - bool is_jsstring() { return static_type_ == STRING_TYPE; }
|
| -
|
| - bool operator==(StaticType other) const {
|
| - return static_type_ == other.static_type_;
|
| - }
|
| -
|
| - // Find the best approximating type for a value.
|
| - // The argument must not be NULL.
|
| - static StaticType TypeOf(Object* object) {
|
| - // Remember to make the most specific tests first. A string is also a heap
|
| - // object, so test for string-ness first.
|
| - if (object->IsSmi()) return smi();
|
| - if (object->IsString()) return jsstring();
|
| - if (object->IsHeapObject()) return heap_object();
|
| - return unknown();
|
| - }
|
| -
|
| - // Merges two static types to a type that combines the knowledge
|
| - // of both. If there is no way to combine (e.g., being a string *and*
|
| - // being a smi), the resulting type is unknown.
|
| - StaticType merge(StaticType other) {
|
| - StaticType x(
|
| - static_cast<StaticTypeEnum>(static_type_ & other.static_type_));
|
| - return x;
|
| - }
|
| -
|
| - private:
|
| - enum StaticTypeEnum {
|
| - // Numbers are chosen so that least upper bound of the following
|
| - // partial order is implemented by bitwise "and":
|
| - //
|
| - // string
|
| - // |
|
| - // heap-object smi
|
| - // \ /
|
| - // unknown
|
| - //
|
| - UNKNOWN_TYPE = 0x00,
|
| - SMI_TYPE = 0x01,
|
| - HEAP_OBJECT_TYPE = 0x02,
|
| - STRING_TYPE = 0x04 | HEAP_OBJECT_TYPE
|
| - };
|
| - explicit StaticType(StaticTypeEnum static_type) : static_type_(static_type) {}
|
| -
|
| - // StaticTypeEnum static_type_;
|
| - StaticTypeEnum static_type_;
|
| -
|
| - friend class FrameElement;
|
| - friend class Result;
|
| -};
|
| -
|
| -
|
| -// -------------------------------------------------------------------------
|
| // Results
|
| //
|
| // Results encapsulate the compile-time values manipulated by the code
|
| @@ -138,13 +64,9 @@ class Result BASE_EMBEDDED {
|
| // Construct a register Result.
|
| explicit Result(Register reg);
|
|
|
| - // Construct a register Result with a known static type.
|
| - Result(Register reg, StaticType static_type);
|
| -
|
| // Construct a Result whose value is a compile-time constant.
|
| explicit Result(Handle<Object> value) {
|
| - value_ = StaticTypeField::encode(StaticType::TypeOf(*value).static_type_)
|
| - | TypeField::encode(CONSTANT)
|
| + value_ = TypeField::encode(CONSTANT)
|
| | DataField::encode(ConstantList()->length());
|
| ConstantList()->Add(value);
|
| }
|
| @@ -182,15 +104,6 @@ class Result BASE_EMBEDDED {
|
|
|
| inline void Unuse();
|
|
|
| - StaticType static_type() const {
|
| - return StaticType(StaticTypeField::decode(value_));
|
| - }
|
| -
|
| - void set_static_type(StaticType type) {
|
| - value_ = value_ & ~StaticTypeField::mask();
|
| - value_ = value_ | StaticTypeField::encode(type.static_type_);
|
| - }
|
| -
|
| Type type() const { return TypeField::decode(value_); }
|
|
|
| void invalidate() { value_ = TypeField::encode(INVALID); }
|
| @@ -225,9 +138,8 @@ class Result BASE_EMBEDDED {
|
| private:
|
| uint32_t value_;
|
|
|
| - class StaticTypeField: public BitField<StaticType::StaticTypeEnum, 0, 3> {};
|
| - class TypeField: public BitField<Type, 3, 2> {};
|
| - class DataField: public BitField<uint32_t, 5, 32 - 6> {};
|
| + class TypeField: public BitField<Type, 0, 2> {};
|
| + class DataField: public BitField<uint32_t, 2, 32 - 3> {};
|
|
|
| inline void CopyTo(Result* destination) const;
|
|
|
|
|