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

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

Issue 1140583004: [turbofan] Add frame state before JavaScript comparisons. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Remove obsolete #if 0. Slightly refactor strong mode check. Created 5 years, 7 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 | « no previous file | src/compiler/js-typed-lowering.h » ('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/compiler.h" 7 #include "src/compiler.h"
8 #include "src/compiler/ast-loop-assignment-analyzer.h" 8 #include "src/compiler/ast-loop-assignment-analyzer.h"
9 #include "src/compiler/control-builders.h" 9 #include "src/compiler/control-builders.h"
10 #include "src/compiler/js-type-feedback.h" 10 #include "src/compiler/js-type-feedback.h"
(...skipping 1293 matching lines...) Expand 10 before | Expand all | Expand 10 after
1304 1304
1305 // These stack values are renamed in the case of OSR, so reload them 1305 // These stack values are renamed in the case of OSR, so reload them
1306 // from the environment. 1306 // from the environment.
1307 Node* index = environment()->Peek(0); 1307 Node* index = environment()->Peek(0);
1308 Node* cache_length = environment()->Peek(1); 1308 Node* cache_length = environment()->Peek(1);
1309 Node* cache_array = environment()->Peek(2); 1309 Node* cache_array = environment()->Peek(2);
1310 Node* cache_type = environment()->Peek(3); 1310 Node* cache_type = environment()->Peek(3);
1311 Node* obj = environment()->Peek(4); 1311 Node* obj = environment()->Peek(4);
1312 1312
1313 // Check loop termination condition. 1313 // Check loop termination condition.
1314 FrameStateBeforeAndAfter states(this, BailoutId::None());
1314 Node* exit_cond = NewNode(javascript()->LessThan(LanguageMode::SLOPPY), 1315 Node* exit_cond = NewNode(javascript()->LessThan(LanguageMode::SLOPPY),
1315 index, cache_length); 1316 index, cache_length);
1316 // TODO(jarin): provide real bailout id. 1317 // TODO(jarin): provide real bailout id.
1317 PrepareFrameState(exit_cond, BailoutId::None()); 1318 states.AddToNode(exit_cond, BailoutId::None(),
1319 OutputFrameStateCombine::Ignore());
1318 for_loop.BreakUnless(exit_cond); 1320 for_loop.BreakUnless(exit_cond);
1319 Node* pair = NewNode(javascript()->CallRuntime(Runtime::kForInNext, 4), obj, 1321 Node* pair = NewNode(javascript()->CallRuntime(Runtime::kForInNext, 4), obj,
1320 cache_array, cache_type, index); 1322 cache_array, cache_type, index);
1321 Node* value = NewNode(common()->Projection(0), pair); 1323 Node* value = NewNode(common()->Projection(0), pair);
1322 Node* should_filter = NewNode(common()->Projection(1), pair); 1324 Node* should_filter = NewNode(common()->Projection(1), pair);
1323 environment()->Push(value); 1325 environment()->Push(value);
1324 { 1326 {
1325 // Test if FILTER_KEY needs to be called. 1327 // Test if FILTER_KEY needs to be called.
1326 IfBuilder test_should_filter(this); 1328 IfBuilder test_should_filter(this);
1327 Node* should_filter_cond = NewNode( 1329 Node* should_filter_cond = NewNode(
(...skipping 1196 matching lines...) Expand 10 before | Expand all | Expand 10 after
2524 break; 2526 break;
2525 case Token::IN: 2527 case Token::IN:
2526 op = javascript()->HasProperty(); 2528 op = javascript()->HasProperty();
2527 break; 2529 break;
2528 default: 2530 default:
2529 op = NULL; 2531 op = NULL;
2530 UNREACHABLE(); 2532 UNREACHABLE();
2531 } 2533 }
2532 VisitForValue(expr->left()); 2534 VisitForValue(expr->left());
2533 VisitForValue(expr->right()); 2535 VisitForValue(expr->right());
2536 FrameStateBeforeAndAfter states(this, expr->right()->id());
2534 Node* right = environment()->Pop(); 2537 Node* right = environment()->Pop();
2535 Node* left = environment()->Pop(); 2538 Node* left = environment()->Pop();
2536 Node* value = NewNode(op, left, right); 2539 Node* value = NewNode(op, left, right);
2537 PrepareFrameState(value, expr->id(), ast_context()->GetStateCombine()); 2540 states.AddToNode(value, expr->id(), ast_context()->GetStateCombine());
2538 ast_context()->ProduceValue(value); 2541 ast_context()->ProduceValue(value);
2539 } 2542 }
2540 2543
2541 2544
2542 void AstGraphBuilder::VisitSpread(Spread* expr) { UNREACHABLE(); } 2545 void AstGraphBuilder::VisitSpread(Spread* expr) { UNREACHABLE(); }
2543 2546
2544 2547
2545 void AstGraphBuilder::VisitThisFunction(ThisFunction* expr) { 2548 void AstGraphBuilder::VisitThisFunction(ThisFunction* expr) {
2546 Node* value = GetFunctionClosure(); 2549 Node* value = GetFunctionClosure();
2547 ast_context()->ProduceValue(value); 2550 ast_context()->ProduceValue(value);
(...skipping 1088 matching lines...) Expand 10 before | Expand all | Expand 10 after
3636 // Phi does not exist yet, introduce one. 3639 // Phi does not exist yet, introduce one.
3637 value = NewPhi(inputs, value, control); 3640 value = NewPhi(inputs, value, control);
3638 value->ReplaceInput(inputs - 1, other); 3641 value->ReplaceInput(inputs - 1, other);
3639 } 3642 }
3640 return value; 3643 return value;
3641 } 3644 }
3642 3645
3643 } // namespace compiler 3646 } // namespace compiler
3644 } // namespace internal 3647 } // namespace internal
3645 } // namespace v8 3648 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | src/compiler/js-typed-lowering.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698