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

Side by Side Diff: src/compiler/ast-graph-builder.cc

Issue 2198473002: [turbofan] Add support for accessor inlining. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@TurboFan_CheckMaps
Patch Set: Fix bailouts Created 4 years, 4 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 | « src/compiler/access-info.cc ('k') | src/compiler/code-generator.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 #include "src/compiler/ast-graph-builder.h" 5 #include "src/compiler/ast-graph-builder.h"
6 6
7 #include "src/ast/scopes.h" 7 #include "src/ast/scopes.h"
8 #include "src/compiler.h" 8 #include "src/compiler.h"
9 #include "src/compiler/ast-loop-assignment-analyzer.h" 9 #include "src/compiler/ast-loop-assignment-analyzer.h"
10 #include "src/compiler/control-builders.h" 10 #include "src/compiler/control-builders.h"
(...skipping 2222 matching lines...) Expand 10 before | Expand all | Expand 10 after
2233 case VARIABLE: { 2233 case VARIABLE: {
2234 Variable* variable = expr->target()->AsVariableProxy()->var(); 2234 Variable* variable = expr->target()->AsVariableProxy()->var();
2235 BuildVariableAssignment(variable, value, expr->op(), feedback, expr->id(), 2235 BuildVariableAssignment(variable, value, expr->op(), feedback, expr->id(),
2236 ast_context()->GetStateCombine()); 2236 ast_context()->GetStateCombine());
2237 break; 2237 break;
2238 } 2238 }
2239 case NAMED_PROPERTY: { 2239 case NAMED_PROPERTY: {
2240 Node* object = environment()->Pop(); 2240 Node* object = environment()->Pop();
2241 Handle<Name> name = property->key()->AsLiteral()->AsPropertyName(); 2241 Handle<Name> name = property->key()->AsLiteral()->AsPropertyName();
2242 Node* store = BuildNamedStore(object, name, value, feedback); 2242 Node* store = BuildNamedStore(object, name, value, feedback);
2243 PrepareFrameState(store, expr->id(), ast_context()->GetStateCombine()); 2243 PrepareFrameState(store, expr->AssignmentId(),
2244 OutputFrameStateCombine::Push());
2244 break; 2245 break;
2245 } 2246 }
2246 case KEYED_PROPERTY: { 2247 case KEYED_PROPERTY: {
2247 Node* key = environment()->Pop(); 2248 Node* key = environment()->Pop();
2248 Node* object = environment()->Pop(); 2249 Node* object = environment()->Pop();
2249 Node* store = BuildKeyedStore(object, key, value, feedback); 2250 Node* store = BuildKeyedStore(object, key, value, feedback);
2250 PrepareFrameState(store, expr->id(), ast_context()->GetStateCombine()); 2251 PrepareFrameState(store, expr->AssignmentId(),
2252 OutputFrameStateCombine::Push());
2251 break; 2253 break;
2252 } 2254 }
2253 case NAMED_SUPER_PROPERTY: { 2255 case NAMED_SUPER_PROPERTY: {
2254 Node* home_object = environment()->Pop(); 2256 Node* home_object = environment()->Pop();
2255 Node* receiver = environment()->Pop(); 2257 Node* receiver = environment()->Pop();
2256 Handle<Name> name = property->key()->AsLiteral()->AsPropertyName(); 2258 Handle<Name> name = property->key()->AsLiteral()->AsPropertyName();
2257 Node* store = BuildNamedSuperStore(receiver, home_object, name, value); 2259 Node* store = BuildNamedSuperStore(receiver, home_object, name, value);
2258 PrepareFrameState(store, expr->id(), ast_context()->GetStateCombine()); 2260 PrepareFrameState(store, expr->id(), ast_context()->GetStateCombine());
2259 break; 2261 break;
2260 } 2262 }
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
2293 VectorSlotPair pair = CreateVectorSlotPair(expr->PropertyFeedbackSlot()); 2295 VectorSlotPair pair = CreateVectorSlotPair(expr->PropertyFeedbackSlot());
2294 switch (property_kind) { 2296 switch (property_kind) {
2295 case VARIABLE: 2297 case VARIABLE:
2296 UNREACHABLE(); 2298 UNREACHABLE();
2297 break; 2299 break;
2298 case NAMED_PROPERTY: { 2300 case NAMED_PROPERTY: {
2299 VisitForValue(expr->obj()); 2301 VisitForValue(expr->obj());
2300 Node* object = environment()->Pop(); 2302 Node* object = environment()->Pop();
2301 Handle<Name> name = expr->key()->AsLiteral()->AsPropertyName(); 2303 Handle<Name> name = expr->key()->AsLiteral()->AsPropertyName();
2302 value = BuildNamedLoad(object, name, pair); 2304 value = BuildNamedLoad(object, name, pair);
2303 PrepareFrameState(value, expr->id(), ast_context()->GetStateCombine()); 2305 PrepareFrameState(value, expr->LoadId(),
2306 ast_context()->GetStateCombine());
Jarin 2016/08/01 05:37:54 Should be Push (here and below). Could you write a
Benedikt Meurer 2016/08/01 06:16:06 Done.
2304 break; 2307 break;
2305 } 2308 }
2306 case KEYED_PROPERTY: { 2309 case KEYED_PROPERTY: {
2307 VisitForValue(expr->obj()); 2310 VisitForValue(expr->obj());
2308 VisitForValue(expr->key()); 2311 VisitForValue(expr->key());
2309 Node* key = environment()->Pop(); 2312 Node* key = environment()->Pop();
2310 Node* object = environment()->Pop(); 2313 Node* object = environment()->Pop();
2311 value = BuildKeyedLoad(object, key, pair); 2314 value = BuildKeyedLoad(object, key, pair);
2312 PrepareFrameState(value, expr->id(), ast_context()->GetStateCombine()); 2315 PrepareFrameState(value, expr->LoadId(),
2316 ast_context()->GetStateCombine());
2313 break; 2317 break;
2314 } 2318 }
2315 case NAMED_SUPER_PROPERTY: { 2319 case NAMED_SUPER_PROPERTY: {
2316 VisitForValue(expr->obj()->AsSuperPropertyReference()->this_var()); 2320 VisitForValue(expr->obj()->AsSuperPropertyReference()->this_var());
2317 VisitForValue(expr->obj()->AsSuperPropertyReference()->home_object()); 2321 VisitForValue(expr->obj()->AsSuperPropertyReference()->home_object());
2318 Node* home_object = environment()->Pop(); 2322 Node* home_object = environment()->Pop();
2319 Node* receiver = environment()->Pop(); 2323 Node* receiver = environment()->Pop();
2320 Handle<Name> name = expr->key()->AsLiteral()->AsPropertyName(); 2324 Handle<Name> name = expr->key()->AsLiteral()->AsPropertyName();
2321 value = BuildNamedSuperLoad(receiver, home_object, name, pair); 2325 value = BuildNamedSuperLoad(receiver, home_object, name, pair);
2322 PrepareFrameState(value, expr->id(), ast_context()->GetStateCombine()); 2326 PrepareFrameState(value, expr->LoadId(),
2327 ast_context()->GetStateCombine());
2323 break; 2328 break;
2324 } 2329 }
2325 case KEYED_SUPER_PROPERTY: { 2330 case KEYED_SUPER_PROPERTY: {
2326 VisitForValue(expr->obj()->AsSuperPropertyReference()->this_var()); 2331 VisitForValue(expr->obj()->AsSuperPropertyReference()->this_var());
2327 VisitForValue(expr->obj()->AsSuperPropertyReference()->home_object()); 2332 VisitForValue(expr->obj()->AsSuperPropertyReference()->home_object());
2328 VisitForValue(expr->key()); 2333 VisitForValue(expr->key());
2329 Node* key = environment()->Pop(); 2334 Node* key = environment()->Pop();
2330 Node* home_object = environment()->Pop(); 2335 Node* home_object = environment()->Pop();
2331 Node* receiver = environment()->Pop(); 2336 Node* receiver = environment()->Pop();
2332 value = BuildKeyedSuperLoad(receiver, home_object, key, pair); 2337 value = BuildKeyedSuperLoad(receiver, home_object, key, pair);
2333 PrepareFrameState(value, expr->id(), ast_context()->GetStateCombine()); 2338 PrepareFrameState(value, expr->LoadId(),
2339 ast_context()->GetStateCombine());
2334 break; 2340 break;
2335 } 2341 }
2336 } 2342 }
2337 ast_context()->ProduceValue(expr, value); 2343 ast_context()->ProduceValue(expr, value);
2338 } 2344 }
2339 2345
2340 2346
2341 void AstGraphBuilder::VisitCall(Call* expr) { 2347 void AstGraphBuilder::VisitCall(Call* expr) {
2342 Expression* callee = expr->expression(); 2348 Expression* callee = expr->expression();
2343 Call::CallType call_type = expr->GetCallType(isolate()); 2349 Call::CallType call_type = expr->GetCallType(isolate());
(...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after
2747 environment()->Push(value); 2753 environment()->Push(value);
2748 BuildVariableAssignment(variable, value, expr->op(), feedback, 2754 BuildVariableAssignment(variable, value, expr->op(), feedback,
2749 expr->AssignmentId()); 2755 expr->AssignmentId());
2750 environment()->Pop(); 2756 environment()->Pop();
2751 break; 2757 break;
2752 } 2758 }
2753 case NAMED_PROPERTY: { 2759 case NAMED_PROPERTY: {
2754 Node* object = environment()->Pop(); 2760 Node* object = environment()->Pop();
2755 Handle<Name> name = property->key()->AsLiteral()->AsPropertyName(); 2761 Handle<Name> name = property->key()->AsLiteral()->AsPropertyName();
2756 Node* store = BuildNamedStore(object, name, value, feedback); 2762 Node* store = BuildNamedStore(object, name, value, feedback);
2757 environment()->Push(value);
2758 PrepareFrameState(store, expr->AssignmentId(), 2763 PrepareFrameState(store, expr->AssignmentId(),
2759 OutputFrameStateCombine::Ignore()); 2764 OutputFrameStateCombine::Push());
2760 environment()->Pop();
2761 break; 2765 break;
2762 } 2766 }
2763 case KEYED_PROPERTY: { 2767 case KEYED_PROPERTY: {
2764 Node* key = environment()->Pop(); 2768 Node* key = environment()->Pop();
2765 Node* object = environment()->Pop(); 2769 Node* object = environment()->Pop();
2766 Node* store = BuildKeyedStore(object, key, value, feedback); 2770 Node* store = BuildKeyedStore(object, key, value, feedback);
2767 environment()->Push(value);
2768 PrepareFrameState(store, expr->AssignmentId(), 2771 PrepareFrameState(store, expr->AssignmentId(),
2769 OutputFrameStateCombine::Ignore()); 2772 OutputFrameStateCombine::Push());
2770 environment()->Pop();
2771 break; 2773 break;
2772 } 2774 }
2773 case NAMED_SUPER_PROPERTY: { 2775 case NAMED_SUPER_PROPERTY: {
2774 Node* home_object = environment()->Pop(); 2776 Node* home_object = environment()->Pop();
2775 Node* receiver = environment()->Pop(); 2777 Node* receiver = environment()->Pop();
2776 Handle<Name> name = property->key()->AsLiteral()->AsPropertyName(); 2778 Handle<Name> name = property->key()->AsLiteral()->AsPropertyName();
2777 Node* store = BuildNamedSuperStore(receiver, home_object, name, value); 2779 Node* store = BuildNamedSuperStore(receiver, home_object, name, value);
2778 environment()->Push(value);
2779 PrepareFrameState(store, expr->AssignmentId(), 2780 PrepareFrameState(store, expr->AssignmentId(),
2780 OutputFrameStateCombine::Ignore()); 2781 OutputFrameStateCombine::Push());
2781 environment()->Pop();
2782 break; 2782 break;
2783 } 2783 }
2784 case KEYED_SUPER_PROPERTY: { 2784 case KEYED_SUPER_PROPERTY: {
2785 Node* key = environment()->Pop(); 2785 Node* key = environment()->Pop();
2786 Node* home_object = environment()->Pop(); 2786 Node* home_object = environment()->Pop();
2787 Node* receiver = environment()->Pop(); 2787 Node* receiver = environment()->Pop();
2788 Node* store = BuildKeyedSuperStore(receiver, home_object, key, value); 2788 Node* store = BuildKeyedSuperStore(receiver, home_object, key, value);
2789 environment()->Push(value);
2790 PrepareFrameState(store, expr->AssignmentId(), 2789 PrepareFrameState(store, expr->AssignmentId(),
2791 OutputFrameStateCombine::Ignore()); 2790 OutputFrameStateCombine::Push());
2792 environment()->Pop();
2793 break; 2791 break;
2794 } 2792 }
2795 } 2793 }
2796 2794
2797 // Restore old value for postfix expressions. 2795 // Restore old value for postfix expressions.
2798 if (is_postfix) value = environment()->Pop(); 2796 if (is_postfix) value = environment()->Pop();
2799 2797
2800 ast_context()->ProduceValue(expr, value); 2798 ast_context()->ProduceValue(expr, value);
2801 } 2799 }
2802 2800
(...skipping 1593 matching lines...) Expand 10 before | Expand all | Expand 10 after
4396 // Phi does not exist yet, introduce one. 4394 // Phi does not exist yet, introduce one.
4397 value = NewPhi(inputs, value, control); 4395 value = NewPhi(inputs, value, control);
4398 value->ReplaceInput(inputs - 1, other); 4396 value->ReplaceInput(inputs - 1, other);
4399 } 4397 }
4400 return value; 4398 return value;
4401 } 4399 }
4402 4400
4403 } // namespace compiler 4401 } // namespace compiler
4404 } // namespace internal 4402 } // namespace internal
4405 } // namespace v8 4403 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/access-info.cc ('k') | src/compiler/code-generator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698