Tag previously GENERIC stubs that potentially IC_Miss as MONOMORPHIC.
authorverwaest@chromium.org <verwaest@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Tue, 29 Jan 2013 12:00:56 +0000 (12:00 +0000)
committerverwaest@chromium.org <verwaest@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Tue, 29 Jan 2013 12:00:56 +0000 (12:00 +0000)
Review URL: https://chromiumcodereview.appspot.com/12079024

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@13537 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

src/builtins.h
src/ic.cc
src/type-info.cc

index b53297a..f13865b 100644 (file)
@@ -145,11 +145,11 @@ enum BuiltinExtraArguments {
                                     Code::kNoExtraICState)              \
   V(KeyedLoadIC_Generic,            KEYED_LOAD_IC, GENERIC,             \
                                     Code::kNoExtraICState)              \
-  V(KeyedLoadIC_String,             KEYED_LOAD_IC, GENERIC,             \
+  V(KeyedLoadIC_String,             KEYED_LOAD_IC, MONOMORPHIC,         \
                                     Code::kNoExtraICState)              \
-  V(KeyedLoadIC_IndexedInterceptor, KEYED_LOAD_IC, GENERIC,             \
+  V(KeyedLoadIC_IndexedInterceptor, KEYED_LOAD_IC, MONOMORPHIC,         \
                                     Code::kNoExtraICState)              \
-  V(KeyedLoadIC_NonStrictArguments, KEYED_LOAD_IC, GENERIC,             \
+  V(KeyedLoadIC_NonStrictArguments, KEYED_LOAD_IC, MONOMORPHIC,         \
                                     Code::kNoExtraICState)              \
                                                                         \
   V(StoreIC_Initialize,             STORE_IC, UNINITIALIZED,            \
@@ -180,7 +180,7 @@ enum BuiltinExtraArguments {
                                     kStrictMode)                        \
   V(KeyedStoreIC_Generic_Strict,    KEYED_STORE_IC, GENERIC,            \
                                     kStrictMode)                        \
-  V(KeyedStoreIC_NonStrictArguments, KEYED_STORE_IC, GENERIC,           \
+  V(KeyedStoreIC_NonStrictArguments, KEYED_STORE_IC, MONOMORPHIC,       \
                                      Code::kNoExtraICState)             \
   V(TransitionElementsSmiToDouble,  BUILTIN, UNINITIALIZED,             \
                                     Code::kNoExtraICState)              \
index 23a5a7e..cd9095b 100644 (file)
--- a/src/ic.cc
+++ b/src/ic.cc
@@ -989,9 +989,11 @@ void IC::PatchCache(State state,
                  ? *generic_stub_strict()
                  : *generic_stub());
       break;
-    case GENERIC:
     case DEBUG_STUB:
       break;
+    case GENERIC:
+      UNREACHABLE();
+      break;
   }
 }
 
@@ -1154,11 +1156,11 @@ static void GetReceiverMapsForStub(Handle<Code> stub,
       break;
     }
     case MEGAMORPHIC:
-    case GENERIC:
       break;
     case UNINITIALIZED:
     case PREMONOMORPHIC:
     case MONOMORPHIC_PROTOTYPE_FAILURE:
+    case GENERIC:
     case DEBUG_STUB:
       UNREACHABLE();
       break;
@@ -1208,7 +1210,7 @@ Handle<Code> KeyedLoadIC::LoadElementStub(Handle<JSObject> receiver) {
     return isolate()->stub_cache()->ComputeKeyedLoadElement(receiver_map);
   }
 
-  ASSERT(target() != *generic_stub());
+  ASSERT(ic_state != GENERIC);
 
   // Determine the list of receiver maps that this call site has seen,
   // adding the map that was just encountered.
@@ -1590,7 +1592,7 @@ Handle<Code> KeyedStoreIC::StoreElementStub(Handle<JSObject> receiver,
         monomorphic_map, stub_kind, strict_mode, grow_mode);
   }
 
-  ASSERT(target() != *generic_stub() && target() != *generic_stub_strict());
+  ASSERT(ic_state != GENERIC);
 
   bool map_added =
       AddOneReceiverMapIfMissing(&target_receiver_maps, receiver_map);
index fb0f45a..80d3434 100644 (file)
@@ -493,8 +493,7 @@ void TypeFeedbackOracle::CollectReceiverTypes(TypeFeedbackId ast_id,
   Handle<Object> object = GetInfo(ast_id);
   if (object->IsUndefined() || object->IsSmi()) return;
 
-  if (*object ==
-      isolate_->builtins()->builtin(Builtins::kStoreIC_GlobalProxy)) {
+  if (object.is_identical_to(isolate_->builtins()->StoreIC_GlobalProxy())) {
     // TODO(fschneider): We could collect the maps and signal that
     // we need a generic store (or load) here.
     ASSERT(Handle<Code>::cast(object)->ic_state() == GENERIC);