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

Side by Side Diff: src/ppc/lithium-codegen-ppc.cc

Issue 1174963004: PPC: [deoptimizer] Basic support inlining based on SharedFunctionInfo. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 6 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 | no next file » | 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/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/base/bits.h" 7 #include "src/base/bits.h"
8 #include "src/code-factory.h" 8 #include "src/code-factory.h"
9 #include "src/code-stubs.h" 9 #include "src/code-stubs.h"
10 #include "src/cpu-profiler.h" 10 #include "src/cpu-profiler.h"
(...skipping 552 matching lines...) Expand 10 before | Expand all | Expand 10 after
563 void LCodeGen::WriteTranslation(LEnvironment* environment, 563 void LCodeGen::WriteTranslation(LEnvironment* environment,
564 Translation* translation) { 564 Translation* translation) {
565 if (environment == NULL) return; 565 if (environment == NULL) return;
566 566
567 // The translation includes one command per value in the environment. 567 // The translation includes one command per value in the environment.
568 int translation_size = environment->translation_size(); 568 int translation_size = environment->translation_size();
569 // The output frame height does not include the parameters. 569 // The output frame height does not include the parameters.
570 int height = translation_size - environment->parameter_count(); 570 int height = translation_size - environment->parameter_count();
571 571
572 WriteTranslation(environment->outer(), translation); 572 WriteTranslation(environment->outer(), translation);
573 bool has_closure_id =
574 !info()->closure().is_null() &&
575 !info()->closure().is_identical_to(environment->closure());
576 int closure_id = has_closure_id
577 ? DefineDeoptimizationLiteral(environment->closure())
578 : Translation::kSelfLiteralId;
579 573
580 switch (environment->frame_type()) { 574 switch (environment->frame_type()) {
581 case JS_FUNCTION: 575 case JS_FUNCTION: {
582 translation->BeginJSFrame(environment->ast_id(), closure_id, height); 576 int shared_id = DefineDeoptimizationLiteral(
577 environment->entry() ? environment->entry()->shared()
578 : info()->shared_info());
579 translation->BeginJSFrame(environment->ast_id(), shared_id, height);
580 if (info()->closure().is_identical_to(environment->closure())) {
581 translation->StoreJSFrameFunction();
582 } else {
583 int closure_id = DefineDeoptimizationLiteral(environment->closure());
584 translation->StoreLiteral(closure_id);
585 }
583 break; 586 break;
584 case JS_CONSTRUCT: 587 }
585 translation->BeginConstructStubFrame(closure_id, translation_size); 588 case JS_CONSTRUCT: {
589 int shared_id = DefineDeoptimizationLiteral(
590 environment->entry() ? environment->entry()->shared()
591 : info()->shared_info());
592 translation->BeginConstructStubFrame(shared_id, translation_size);
593 if (info()->closure().is_identical_to(environment->closure())) {
594 translation->StoreJSFrameFunction();
595 } else {
596 int closure_id = DefineDeoptimizationLiteral(environment->closure());
597 translation->StoreLiteral(closure_id);
598 }
586 break; 599 break;
587 case JS_GETTER: 600 }
601 case JS_GETTER: {
588 DCHECK(translation_size == 1); 602 DCHECK(translation_size == 1);
589 DCHECK(height == 0); 603 DCHECK(height == 0);
590 translation->BeginGetterStubFrame(closure_id); 604 int shared_id = DefineDeoptimizationLiteral(
605 environment->entry() ? environment->entry()->shared()
606 : info()->shared_info());
607 translation->BeginGetterStubFrame(shared_id);
608 if (info()->closure().is_identical_to(environment->closure())) {
609 translation->StoreJSFrameFunction();
610 } else {
611 int closure_id = DefineDeoptimizationLiteral(environment->closure());
612 translation->StoreLiteral(closure_id);
613 }
591 break; 614 break;
592 case JS_SETTER: 615 }
616 case JS_SETTER: {
593 DCHECK(translation_size == 2); 617 DCHECK(translation_size == 2);
594 DCHECK(height == 0); 618 DCHECK(height == 0);
595 translation->BeginSetterStubFrame(closure_id); 619 int shared_id = DefineDeoptimizationLiteral(
620 environment->entry() ? environment->entry()->shared()
621 : info()->shared_info());
622 translation->BeginSetterStubFrame(shared_id);
623 if (info()->closure().is_identical_to(environment->closure())) {
624 translation->StoreJSFrameFunction();
625 } else {
626 int closure_id = DefineDeoptimizationLiteral(environment->closure());
627 translation->StoreLiteral(closure_id);
628 }
596 break; 629 break;
630 }
631 case ARGUMENTS_ADAPTOR: {
632 int shared_id = DefineDeoptimizationLiteral(
633 environment->entry() ? environment->entry()->shared()
634 : info()->shared_info());
635 translation->BeginArgumentsAdaptorFrame(shared_id, translation_size);
636 if (info()->closure().is_identical_to(environment->closure())) {
637 translation->StoreJSFrameFunction();
638 } else {
639 int closure_id = DefineDeoptimizationLiteral(environment->closure());
640 translation->StoreLiteral(closure_id);
641 }
642 break;
643 }
597 case STUB: 644 case STUB:
598 translation->BeginCompiledStubFrame(translation_size); 645 translation->BeginCompiledStubFrame(translation_size);
599 break; 646 break;
600 case ARGUMENTS_ADAPTOR:
601 translation->BeginArgumentsAdaptorFrame(closure_id, translation_size);
602 break;
603 } 647 }
604 648
605 int object_index = 0; 649 int object_index = 0;
606 int dematerialized_index = 0; 650 int dematerialized_index = 0;
607 for (int i = 0; i < translation_size; ++i) { 651 for (int i = 0; i < translation_size; ++i) {
608 LOperand* value = environment->values()->at(i); 652 LOperand* value = environment->values()->at(i);
609 AddToTranslation( 653 AddToTranslation(
610 environment, translation, value, environment->HasTaggedValueAt(i), 654 environment, translation, value, environment->HasTaggedValueAt(i),
611 environment->HasUint32ValueAt(i), &object_index, &dematerialized_index); 655 environment->HasUint32ValueAt(i), &object_index, &dematerialized_index);
612 } 656 }
(...skipping 5662 matching lines...) Expand 10 before | Expand all | Expand 10 after
6275 __ Push(scope_info); 6319 __ Push(scope_info);
6276 __ push(ToRegister(instr->function())); 6320 __ push(ToRegister(instr->function()));
6277 CallRuntime(Runtime::kPushBlockContext, 2, instr); 6321 CallRuntime(Runtime::kPushBlockContext, 2, instr);
6278 RecordSafepoint(Safepoint::kNoLazyDeopt); 6322 RecordSafepoint(Safepoint::kNoLazyDeopt);
6279 } 6323 }
6280 6324
6281 6325
6282 #undef __ 6326 #undef __
6283 } // namespace internal 6327 } // namespace internal
6284 } // namespace v8 6328 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698