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

Side by Side Diff: src/crankshaft/hydrogen.cc

Issue 1868453002: Version 5.0.71.31 (cherry-pick) (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@5.0
Patch Set: Created 4 years, 8 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 | « include/v8-version.h ('k') | test/mjsunit/regress/regress-v8-4839.js » ('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 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 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/crankshaft/hydrogen.h" 5 #include "src/crankshaft/hydrogen.h"
6 6
7 #include <sstream> 7 #include <sstream>
8 8
9 #include "src/allocation-site-scopes.h" 9 #include "src/allocation-site-scopes.h"
10 #include "src/ast/ast-numbering.h" 10 #include "src/ast/ast-numbering.h"
(...skipping 4938 matching lines...) Expand 10 before | Expand all | Expand 10 after
4949 if (context == NULL) { 4949 if (context == NULL) {
4950 // Not an inlined return, so an actual one. 4950 // Not an inlined return, so an actual one.
4951 CHECK_ALIVE(VisitForValue(stmt->expression())); 4951 CHECK_ALIVE(VisitForValue(stmt->expression()));
4952 HValue* result = environment()->Pop(); 4952 HValue* result = environment()->Pop();
4953 Add<HReturn>(result); 4953 Add<HReturn>(result);
4954 } else if (state->inlining_kind() == CONSTRUCT_CALL_RETURN) { 4954 } else if (state->inlining_kind() == CONSTRUCT_CALL_RETURN) {
4955 // Return from an inlined construct call. In a test context the return value 4955 // Return from an inlined construct call. In a test context the return value
4956 // will always evaluate to true, in a value context the return value needs 4956 // will always evaluate to true, in a value context the return value needs
4957 // to be a JSObject. 4957 // to be a JSObject.
4958 if (context->IsTest()) { 4958 if (context->IsTest()) {
4959 TestContext* test = TestContext::cast(context);
4960 CHECK_ALIVE(VisitForEffect(stmt->expression())); 4959 CHECK_ALIVE(VisitForEffect(stmt->expression()));
4961 Goto(test->if_true(), state); 4960 context->ReturnValue(graph()->GetConstantTrue());
4962 } else if (context->IsEffect()) { 4961 } else if (context->IsEffect()) {
4963 CHECK_ALIVE(VisitForEffect(stmt->expression())); 4962 CHECK_ALIVE(VisitForEffect(stmt->expression()));
4964 Goto(function_return(), state); 4963 Goto(function_return(), state);
4965 } else { 4964 } else {
4966 DCHECK(context->IsValue()); 4965 DCHECK(context->IsValue());
4967 CHECK_ALIVE(VisitForValue(stmt->expression())); 4966 CHECK_ALIVE(VisitForValue(stmt->expression()));
4968 HValue* return_value = Pop(); 4967 HValue* return_value = Pop();
4969 HValue* receiver = environment()->arguments_environment()->Lookup(0); 4968 HValue* receiver = environment()->arguments_environment()->Lookup(0);
4970 HHasInstanceTypeAndBranch* typecheck = 4969 HHasInstanceTypeAndBranch* typecheck =
4971 New<HHasInstanceTypeAndBranch>(return_value, 4970 New<HHasInstanceTypeAndBranch>(return_value,
(...skipping 3639 matching lines...) Expand 10 before | Expand all | Expand 10 after
8611 8610
8612 TraceInline(target, caller, NULL); 8611 TraceInline(target, caller, NULL);
8613 8612
8614 if (current_block() != NULL) { 8613 if (current_block() != NULL) {
8615 FunctionState* state = function_state(); 8614 FunctionState* state = function_state();
8616 if (state->inlining_kind() == CONSTRUCT_CALL_RETURN) { 8615 if (state->inlining_kind() == CONSTRUCT_CALL_RETURN) {
8617 // Falling off the end of an inlined construct call. In a test context the 8616 // Falling off the end of an inlined construct call. In a test context the
8618 // return value will always evaluate to true, in a value context the 8617 // return value will always evaluate to true, in a value context the
8619 // return value is the newly allocated receiver. 8618 // return value is the newly allocated receiver.
8620 if (call_context()->IsTest()) { 8619 if (call_context()->IsTest()) {
8621 Goto(inlined_test_context()->if_true(), state); 8620 inlined_test_context()->ReturnValue(graph()->GetConstantTrue());
8622 } else if (call_context()->IsEffect()) { 8621 } else if (call_context()->IsEffect()) {
8623 Goto(function_return(), state); 8622 Goto(function_return(), state);
8624 } else { 8623 } else {
8625 DCHECK(call_context()->IsValue()); 8624 DCHECK(call_context()->IsValue());
8626 AddLeaveInlined(implicit_return_value, state); 8625 AddLeaveInlined(implicit_return_value, state);
8627 } 8626 }
8628 } else if (state->inlining_kind() == SETTER_CALL_RETURN) { 8627 } else if (state->inlining_kind() == SETTER_CALL_RETURN) {
8629 // Falling off the end of an inlined setter call. The returned value is 8628 // Falling off the end of an inlined setter call. The returned value is
8630 // never used, the value of an assignment is always the value of the RHS 8629 // never used, the value of an assignment is always the value of the RHS
8631 // of the assignment. 8630 // of the assignment.
8632 if (call_context()->IsTest()) { 8631 if (call_context()->IsTest()) {
8633 inlined_test_context()->ReturnValue(implicit_return_value); 8632 inlined_test_context()->ReturnValue(implicit_return_value);
8634 } else if (call_context()->IsEffect()) { 8633 } else if (call_context()->IsEffect()) {
8635 Goto(function_return(), state); 8634 Goto(function_return(), state);
8636 } else { 8635 } else {
8637 DCHECK(call_context()->IsValue()); 8636 DCHECK(call_context()->IsValue());
8638 AddLeaveInlined(implicit_return_value, state); 8637 AddLeaveInlined(implicit_return_value, state);
8639 } 8638 }
8640 } else { 8639 } else {
8641 // Falling off the end of a normal inlined function. This basically means 8640 // Falling off the end of a normal inlined function. This basically means
8642 // returning undefined. 8641 // returning undefined.
8643 if (call_context()->IsTest()) { 8642 if (call_context()->IsTest()) {
8644 Goto(inlined_test_context()->if_false(), state); 8643 inlined_test_context()->ReturnValue(graph()->GetConstantFalse());
8645 } else if (call_context()->IsEffect()) { 8644 } else if (call_context()->IsEffect()) {
8646 Goto(function_return(), state); 8645 Goto(function_return(), state);
8647 } else { 8646 } else {
8648 DCHECK(call_context()->IsValue()); 8647 DCHECK(call_context()->IsValue());
8649 AddLeaveInlined(undefined, state); 8648 AddLeaveInlined(undefined, state);
8650 } 8649 }
8651 } 8650 }
8652 } 8651 }
8653 8652
8654 // Fix up the function exits. 8653 // Fix up the function exits.
(...skipping 4868 matching lines...) Expand 10 before | Expand all | Expand 10 after
13523 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); 13522 isolate()->GetHTracer()->TraceHydrogen(name(), graph_);
13524 } 13523 }
13525 13524
13526 #ifdef DEBUG 13525 #ifdef DEBUG
13527 graph_->Verify(false); // No full verify. 13526 graph_->Verify(false); // No full verify.
13528 #endif 13527 #endif
13529 } 13528 }
13530 13529
13531 } // namespace internal 13530 } // namespace internal
13532 } // namespace v8 13531 } // namespace v8
OLDNEW
« no previous file with comments | « include/v8-version.h ('k') | test/mjsunit/regress/regress-v8-4839.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698