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

Unified Diff: src/ic/accessor-assembler.h

Issue 2733563002: [ic] Inline LoadIC into LdaNamedProperty bytecode handler (Closed)
Patch Set: Created 3 years, 10 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 side-by-side diff with in-line comments
Download patch
Index: src/ic/accessor-assembler.h
diff --git a/src/ic/accessor-assembler.h b/src/ic/accessor-assembler.h
index e7505f7d3c6a87050f351e1299c83d1f2e1b22eb..81d5a3ca4fa747c80740f42a6550f4ada7efe758 100644
--- a/src/ic/accessor-assembler.h
+++ b/src/ic/accessor-assembler.h
@@ -24,6 +24,7 @@ class AccessorAssembler : public CodeStubAssembler {
: CodeStubAssembler(state) {}
void GenerateLoadIC();
+ void GenerateLoadIC_Noninlined();
void GenerateLoadIC_Uninitialized();
void GenerateLoadField();
void GenerateLoadICTrampoline();
@@ -76,6 +77,22 @@ class AccessorAssembler : public CodeStubAssembler {
ExitPoint* exit_point, Label* miss);
void LoadGlobalIC_MissCase(const LoadICParameters* p, ExitPoint* exit_point);
+ // Checks monomorphic case. There are two variants: the first returns a
+ // ({feedback}, {handler}) pair and falls through on success, while the second
+ // stores {handler} in the given variable and jumps to {if_handler} on
+ // success.
+ std::pair<Node*, Node*> TryMonomorphicCase(Node* slot, Node* vector,
+ Node* receiver_map,
+ Label* if_miss);
+ Node* TryMonomorphicCase(Node* slot, Node* vector, Node* receiver_map,
+ Label* if_handler, Variable* var_handler,
+ Label* if_miss);
+
+ enum ElementSupport { kOnlyProperties, kSupportElements };
+ void HandleLoadICHandlerCase(
+ const LoadICParameters* p, Node* handler, Label* miss,
+ ExitPoint* exit_point, ElementSupport support_elements = kOnlyProperties);
+
protected:
struct StoreICParameters : public LoadICParameters {
StoreICParameters(Node* context, Node* receiver, Node* name, Node* value,
@@ -85,7 +102,6 @@ class AccessorAssembler : public CodeStubAssembler {
Node* value;
};
- enum ElementSupport { kOnlyProperties, kSupportElements };
void HandleStoreICHandlerCase(
const StoreICParameters* p, Node* handler, Label* miss,
ElementSupport support_elements = kOnlyProperties);
@@ -94,7 +110,13 @@ class AccessorAssembler : public CodeStubAssembler {
private:
// Stub generation entry points.
+ // LoadIC contains the full LoadIC logic, while LoadIC_Noninlined contains
+ // logic not inlined into Ignition bytecode handlers.
void LoadIC(const LoadICParameters* p);
+ void LoadIC_Noninlined(const LoadICParameters* p, Node* receiver_map,
+ Node* feedback, Variable* var_handler,
+ Label* if_handler, Label* miss, ExitPoint* exit_point);
+
void LoadIC_Uninitialized(const LoadICParameters* p);
void LoadICProtoArray(const LoadICParameters* p, Node* handler,
bool throw_reference_error_if_nonexistent);
@@ -105,11 +127,6 @@ class AccessorAssembler : public CodeStubAssembler {
void KeyedStoreIC(const StoreICParameters* p, LanguageMode language_mode);
// IC dispatcher behavior.
-
- // Checks monomorphic case. Returns {feedback} entry of the vector.
- Node* TryMonomorphicCase(Node* slot, Node* vector, Node* receiver_map,
- Label* if_handler, Variable* var_handler,
- Label* if_miss);
void HandlePolymorphicCase(Node* receiver_map, Node* feedback,
Label* if_handler, Variable* var_handler,
Label* if_miss, int unroll_count);
@@ -121,10 +138,6 @@ class AccessorAssembler : public CodeStubAssembler {
// LoadIC implementation.
- void HandleLoadICHandlerCase(
- const LoadICParameters* p, Node* handler, Label* miss,
- ElementSupport support_elements = kOnlyProperties);
-
void HandleLoadICSmiHandlerCase(const LoadICParameters* p, Node* holder,
Node* smi_handler, Label* miss,
ExitPoint* exit_point,
@@ -186,6 +199,8 @@ class AccessorAssembler : public CodeStubAssembler {
Representation representation, Node* transition,
Node* value, Label* bailout);
+ Node* LoadFeedbackSlot(Node* vector, Node* slot, int additional_offset);
+
// Extends properties backing store by JSObject::kFieldsAdded elements.
void ExtendPropertiesBackingStore(Node* object);

Powered by Google App Engine
This is Rietveld 408576698