Reviewers: Igor Sheludko,

Message:
PTAL

Description:
Remove extended_extra_ic_state and extend extra_ic_state instead.

BUG=

Please review this at https://codereview.chromium.org/159013003/

SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge

Affected files (+27, -64 lines):
  M src/code-stubs-hydrogen.cc
  M src/code-stubs.h
  M src/code-stubs.cc
  M src/compiler.cc
  M src/ic.cc
  M src/objects-inl.h
  M src/objects.h
  M src/objects.cc
  M src/type-info.cc


Index: src/code-stubs-hydrogen.cc
diff --git a/src/code-stubs-hydrogen.cc b/src/code-stubs-hydrogen.cc
index bd3d8d2860d27a4de110b1e4ab5d4ffaa325ecec..03a1bd8a4006433b2e6a777be79ce7c48c9447cf 100644
--- a/src/code-stubs-hydrogen.cc
+++ b/src/code-stubs-hydrogen.cc
@@ -248,7 +248,7 @@ Handle<Code> HydrogenCodeStub::GenerateLightweightMissCode(Isolate* isolate) {
       GetICState(),
       GetExtraICState(),
       GetStubType(),
-      GetStubFlags());
+      GetHandlerKind());
   Handle<Code> new_object = factory->NewCode(
       desc, flags, masm.CodeObject(), NeedsImmovableCode());
   return new_object;
Index: src/code-stubs.cc
diff --git a/src/code-stubs.cc b/src/code-stubs.cc
index d86bc70dcf105399d1f0ba91cb2dbc605797601c..0f76dee1efc307912e41d09162bfe15413d5c072 100644
--- a/src/code-stubs.cc
+++ b/src/code-stubs.cc
@@ -120,7 +120,7 @@ Handle<Code> PlatformCodeStub::GenerateCode(Isolate* isolate) {
       GetICState(),
       GetExtraICState(),
       GetStubType(),
-      GetStubFlags());
+      GetHandlerKind());
   Handle<Code> new_object = factory->NewCode(
       desc, flags, masm.CodeObject(), NeedsImmovableCode());
   return new_object;
Index: src/code-stubs.h
diff --git a/src/code-stubs.h b/src/code-stubs.h
index a7283ba642ef4ea2742cbba7ed77e9783faf39a1..49a5dd0783c56895b8b3e06a090fca6c388118a6 100644
--- a/src/code-stubs.h
+++ b/src/code-stubs.h
@@ -188,8 +188,8 @@ class CodeStub BASE_EMBEDDED {
   virtual Code::StubType GetStubType() {
     return Code::NORMAL;
   }
-  virtual int GetStubFlags() {
-    return -1;
+  virtual Code::Kind GetHandlerKind() {
+    return Code::STUB;
   }

   virtual void PrintName(StringStream* stream);
@@ -883,7 +883,7 @@ class HICStub: public HydrogenCodeStub {
 class HandlerStub: public HICStub {
  public:
   virtual Code::Kind GetCodeKind() const { return Code::HANDLER; }
-  virtual int GetStubFlags() { return kind(); }
+  virtual Code::Kind GetHandlerKind() { return kind(); }

  protected:
   HandlerStub() : HICStub() { }
Index: src/compiler.cc
diff --git a/src/compiler.cc b/src/compiler.cc
index b9e13c166172595b298ae227348f5a40a35dca20..38927405d425515c231e3bca5be9e1cc5ae48460 100644
--- a/src/compiler.cc
+++ b/src/compiler.cc
@@ -212,7 +212,7 @@ Code::Flags CompilationInfo::flags() const {
                               code_stub()->GetICState(),
                               code_stub()->GetExtraICState(),
                               code_stub()->GetStubType(),
-                              code_stub()->GetStubFlags());
+                              code_stub()->GetHandlerKind());
   } else {
     return Code::ComputeFlags(Code::OPTIMIZED_FUNCTION);
   }
Index: src/ic.cc
diff --git a/src/ic.cc b/src/ic.cc
index fb1273941822c95429714f0e2a59b06139daf644..e1405396c1fe90cec1c272f3c7192175c4aad924 100644
--- a/src/ic.cc
+++ b/src/ic.cc
@@ -148,9 +148,7 @@ IC::IC(FrameDepth depth, Isolate* isolate)
   pc_address_ = StackFrame::ResolveReturnAddressLocation(pc_address);
   target_ = handle(raw_target(), isolate);
   state_ = target_->ic_state();
-  extra_ic_state_ = target_->needs_extended_extra_ic_state(target_->kind())
-      ? target_->extended_extra_ic_state()
-      : target_->extra_ic_state();
+  extra_ic_state_ = target_->extra_ic_state();
 }


@@ -2371,7 +2369,7 @@ Type* BinaryOpIC::State::KindToType(Kind kind, Zone* zone) {
 MaybeObject* BinaryOpIC::Transition(Handle<AllocationSite> allocation_site,
                                     Handle<Object> left,
                                     Handle<Object> right) {
-  State state(target()->extended_extra_ic_state());
+  State state(target()->extra_ic_state());

   // Compute the actual result using the builtin for the binary operation.
   Object* builtin = isolate()->js_builtins_object()->javascript_builtin(
@@ -2687,7 +2685,7 @@ RUNTIME_FUNCTION(Code*, CompareIC_Miss) {

 void CompareNilIC::Clear(Address address, Code* target) {
   if (IsCleared(target)) return;
-  ExtraICState state = target->extended_extra_ic_state();
+  ExtraICState state = target->extra_ic_state();

   CompareNilICStub stub(state, HydrogenCodeStub::UNINITIALIZED);
   stub.ClearState();
@@ -2709,7 +2707,7 @@ MaybeObject* CompareNilIC::DoCompareNilSlow(NilValue nil,


 MaybeObject* CompareNilIC::CompareNil(Handle<Object> object) {
-  ExtraICState extra_ic_state = target()->extended_extra_ic_state();
+  ExtraICState extra_ic_state = target()->extra_ic_state();

   CompareNilICStub stub(extra_ic_state);

@@ -2793,7 +2791,7 @@ Builtins::JavaScript BinaryOpIC::TokenToJSBuiltin(Token::Value op) {


 MaybeObject* ToBooleanIC::ToBoolean(Handle<Object> object) {
-  ToBooleanStub stub(target()->extended_extra_ic_state());
+  ToBooleanStub stub(target()->extra_ic_state());
   bool to_boolean_value = stub.UpdateStatus(object);
   Handle<Code> code = stub.GetCode(isolate());
   set_target(*code);
Index: src/objects-inl.h
diff --git a/src/objects-inl.h b/src/objects-inl.h
index dbac0f4685e2d0e594014e97410698499d5b84ff..546519caa4c150f2a8c27c93bca441ddc9795953 100644
--- a/src/objects-inl.h
+++ b/src/objects-inl.h
@@ -4205,16 +4205,8 @@ InlineCacheState Code::ic_state() {


 ExtraICState Code::extra_ic_state() {
-  ASSERT((is_inline_cache_stub() && !needs_extended_extra_ic_state(kind()))
-         || ic_state() == DEBUG_STUB);
-  return ExtractExtraICStateFromFlags(flags());
-}
-
-
-ExtraICState Code::extended_extra_ic_state() {
   ASSERT(is_inline_cache_stub() || ic_state() == DEBUG_STUB);
-  ASSERT(needs_extended_extra_ic_state(kind()));
-  return ExtractExtendedExtraICStateFromFlags(flags());
+  return ExtractExtraICStateFromFlags(flags());
 }


@@ -4432,7 +4424,7 @@ void Code::set_back_edges_patched_for_osr(bool value) {


 byte Code::to_boolean_state() {
-  return extended_extra_ic_state();
+  return extra_ic_state();
 }


@@ -4503,17 +4495,16 @@ Code::Flags Code::ComputeFlags(Kind kind,
                                InlineCacheState ic_state,
                                ExtraICState extra_ic_state,
                                StubType type,
-                               int argc,
+                               Kind handler_kind,
                                InlineCacheHolderFlag holder) {
-  ASSERT(argc <= Code::kMaxArguments);
   // Compute the bit mask.
   unsigned int bits = KindField::encode(kind)
       | ICStateField::encode(ic_state)
       | TypeField::encode(type)
-      | ExtendedExtraICStateField::encode(extra_ic_state)
+      | ExtraICStateField::encode(extra_ic_state)
       | CacheHolderField::encode(holder);
-  if (!Code::needs_extended_extra_ic_state(kind)) {
-    bits |= (argc << kArgumentsCountShift);
+  if (handler_kind != STUB) {
+    bits |= (handler_kind << kArgumentsCountShift);
   }
   return static_cast<Flags>(bits);
 }
@@ -4523,8 +4514,9 @@ Code::Flags Code::ComputeMonomorphicFlags(Kind kind,
                                           ExtraICState extra_ic_state,
                                           InlineCacheHolderFlag holder,
                                           StubType type,
-                                          int argc) {
- return ComputeFlags(kind, MONOMORPHIC, extra_ic_state, type, argc, holder);
+                                          Kind handler_kind) {
+  return ComputeFlags(kind, MONOMORPHIC, extra_ic_state, type,
+                      handler_kind, holder);
 }


@@ -4543,12 +4535,6 @@ ExtraICState Code::ExtractExtraICStateFromFlags(Flags flags) {
 }


-ExtraICState Code::ExtractExtendedExtraICStateFromFlags(
-    Flags flags) {
-  return ExtendedExtraICStateField::decode(flags);
-}
-
-
 Code::StubType Code::ExtractTypeFromFlags(Flags flags) {
   return TypeField::decode(flags);
 }
Index: src/objects.cc
diff --git a/src/objects.cc b/src/objects.cc
index 48d77db4580cb9462380d045ac6fa2e63fbfc868..7fc406cbd36ed425d4a4b469a02bdc5710a0b0d5 100644
--- a/src/objects.cc
+++ b/src/objects.cc
@@ -11091,8 +11091,7 @@ void Code::Disassemble(const char* name, FILE* out) {
   }
   if (is_inline_cache_stub()) {
     PrintF(out, "ic_state = %s\n", ICState2String(ic_state()));
-    PrintExtraICState(out, kind(), needs_extended_extra_ic_state(kind()) ?
-        extended_extra_ic_state() : extra_ic_state());
+    PrintExtraICState(out, kind(), extra_ic_state());
     if (ic_state() == MONOMORPHIC) {
       PrintF(out, "type = %s\n", StubType2String(type()));
     }
Index: src/objects.h
diff --git a/src/objects.h b/src/objects.h
index 6e3e94132def173e13fcfbaf03b797a5796c5aa9..9557d5ebfb84f36ca681b721a617c86c5af7e29a 100644
--- a/src/objects.h
+++ b/src/objects.h
@@ -5236,16 +5236,6 @@ class Code: public HeapObject {
   inline InlineCacheState ic_state();  // Only valid for IC stubs.
   inline ExtraICState extra_ic_state();  // Only valid for IC stubs.

-  inline ExtraICState extended_extra_ic_state();  // Only valid for
-                                                  // non-call IC stubs.
-  static bool needs_extended_extra_ic_state(Kind kind) {
-    // TODO(danno): This is a bit of a hack right now since there are still
- // clients of this API that pass "extra" values in for argc. These clients
-    // should be retrofitted to used ExtendedExtraICState.
-    return kind == COMPARE_NIL_IC || kind == TO_BOOLEAN_IC ||
-           kind == BINARY_OP_IC;
-  }
-
   inline StubType type();  // Only valid for monomorphic IC stubs.
   inline int arguments_count();  // Only valid for call IC stubs.

@@ -5386,7 +5376,7 @@ class Code: public HeapObject {
       InlineCacheState ic_state = UNINITIALIZED,
       ExtraICState extra_ic_state = kNoExtraICState,
       StubType type = NORMAL,
-      int argc = -1,
+      Kind handler_kind = STUB,
       InlineCacheHolderFlag holder = OWN_MAP);

   static inline Flags ComputeMonomorphicFlags(
@@ -5394,14 +5384,13 @@ class Code: public HeapObject {
       ExtraICState extra_ic_state = kNoExtraICState,
       InlineCacheHolderFlag holder = OWN_MAP,
       StubType type = NORMAL,
-      int argc = -1);
+      Kind handler_kind = STUB);

   static inline InlineCacheState ExtractICStateFromFlags(Flags flags);
   static inline StubType ExtractTypeFromFlags(Flags flags);
   static inline Kind ExtractKindFromFlags(Flags flags);
static inline InlineCacheHolderFlag ExtractCacheHolderFromFlags(Flags flags);
   static inline ExtraICState ExtractExtraICStateFromFlags(Flags flags);
- static inline ExtraICState ExtractExtendedExtraICStateFromFlags(Flags flags);
   static inline int ExtractArgumentsCountFromFlags(Flags flags);

   static inline Flags RemoveTypeFromFlags(Flags flags);
@@ -5567,10 +5556,8 @@ class Code: public HeapObject {
   class CacheHolderField: public BitField<InlineCacheHolderFlag, 5, 1> {};
   class KindField: public BitField<Kind, 6, 4> {};
   // TODO(bmeurer): Bit 10 is available for free use. :-)
-  class ExtraICStateField: public BitField<ExtraICState, 11, 6> {};
-  class ExtendedExtraICStateField: public BitField<ExtraICState, 11,
+  class ExtraICStateField: public BitField<ExtraICState, 11,
       PlatformSmiTagging::kSmiValueSize - 11 + 1> {};  // NOLINT
- STATIC_ASSERT(ExtraICStateField::kShift == ExtendedExtraICStateField::kShift);

   // KindSpecificFlags1 layout (STUB and OPTIMIZED_FUNCTION)
   static const int kStackSlotsFirstBit = 0;
@@ -5631,13 +5618,6 @@ class Code: public HeapObject {
       PlatformSmiTagging::kSmiValueSize - Code::kArgumentsCountShift + 1;
   static const int kMaxArguments = (1 << kArgumentsBits) - 1;

- // ICs can use either argument count or ExtendedExtraIC, since their storage
-  // overlaps.
-  STATIC_ASSERT(ExtraICStateField::kShift +
-                ExtraICStateField::kSize + kArgumentsBits ==
-                ExtendedExtraICStateField::kShift +
-                ExtendedExtraICStateField::kSize);
-
   // This constant should be encodable in an ARM instruction.
   static const int kFlagsNotUsedInLookup =
       TypeField::kMask | CacheHolderField::kMask;
Index: src/type-info.cc
diff --git a/src/type-info.cc b/src/type-info.cc
index 2ca04b88fcccd1128d9d386626573a271ada0836..554a81f223e3d74d489898c1371ed8aee9569037 100644
--- a/src/type-info.cc
+++ b/src/type-info.cc
@@ -206,7 +206,7 @@ void TypeFeedbackOracle::CompareType(TypeFeedbackId id,
     CompareIC::StubInfoToType(
         stub_minor_key, left_type, right_type, combined_type, map, zone());
   } else if (code->is_compare_nil_ic_stub()) {
-    CompareNilICStub stub(code->extended_extra_ic_state());
+    CompareNilICStub stub(code->extra_ic_state());
     *combined_type = stub.GetType(zone(), map);
     *left_type = *right_type = stub.GetInputType(zone(), map);
   }
@@ -233,7 +233,7 @@ void TypeFeedbackOracle::BinaryType(TypeFeedbackId id,
   }
   Handle<Code> code = Handle<Code>::cast(object);
   ASSERT_EQ(Code::BINARY_OP_IC, code->kind());
-  BinaryOpIC::State state(code->extended_extra_ic_state());
+  BinaryOpIC::State state(code->extra_ic_state());
   ASSERT_EQ(op, state.op());

   *left = state.GetLeftType(zone());
@@ -255,7 +255,7 @@ Type* TypeFeedbackOracle::CountType(TypeFeedbackId id) {
   if (!object->IsCode()) return Type::None(zone());
   Handle<Code> code = Handle<Code>::cast(object);
   ASSERT_EQ(Code::BINARY_OP_IC, code->kind());
-  BinaryOpIC::State state(code->extended_extra_ic_state());
+  BinaryOpIC::State state(code->extra_ic_state());
   return state.GetLeftType(zone());
 }



--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to