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

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

Issue 2640793004: Revert remove dead hole check logic (Closed)
Patch Set: Revert "[crankshaft] Fix mips/mips64 build: remove unused variable" and "[crankshaft] Remove dead Variable hole-checking code" Created 3 years, 11 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/crankshaft/mips64/lithium-mips64.cc ('k') | src/crankshaft/ppc/lithium-ppc.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/crankshaft/ppc/lithium-codegen-ppc.h" 5 #include "src/crankshaft/ppc/lithium-codegen-ppc.h"
6 6
7 #include "src/base/bits.h" 7 #include "src/base/bits.h"
8 #include "src/builtins/builtins-constructor.h" 8 #include "src/builtins/builtins-constructor.h"
9 #include "src/code-factory.h" 9 #include "src/code-factory.h"
10 #include "src/code-stubs.h" 10 #include "src/code-stubs.h"
(...skipping 2656 matching lines...) Expand 10 before | Expand all | Expand 10 after
2667 } 2667 }
2668 2668
2669 __ blr(); 2669 __ blr();
2670 } 2670 }
2671 2671
2672 2672
2673 void LCodeGen::DoLoadContextSlot(LLoadContextSlot* instr) { 2673 void LCodeGen::DoLoadContextSlot(LLoadContextSlot* instr) {
2674 Register context = ToRegister(instr->context()); 2674 Register context = ToRegister(instr->context());
2675 Register result = ToRegister(instr->result()); 2675 Register result = ToRegister(instr->result());
2676 __ LoadP(result, ContextMemOperand(context, instr->slot_index())); 2676 __ LoadP(result, ContextMemOperand(context, instr->slot_index()));
2677 if (instr->hydrogen()->RequiresHoleCheck()) {
2678 __ LoadRoot(ip, Heap::kTheHoleValueRootIndex);
2679 if (instr->hydrogen()->DeoptimizesOnHole()) {
2680 __ cmp(result, ip);
2681 DeoptimizeIf(eq, instr, DeoptimizeReason::kHole);
2682 } else {
2683 if (CpuFeatures::IsSupported(ISELECT)) {
2684 Register scratch = scratch0();
2685 __ mov(scratch, Operand(factory()->undefined_value()));
2686 __ cmp(result, ip);
2687 __ isel(eq, result, scratch, result);
2688 } else {
2689 Label skip;
2690 __ cmp(result, ip);
2691 __ bne(&skip);
2692 __ mov(result, Operand(factory()->undefined_value()));
2693 __ bind(&skip);
2694 }
2695 }
2696 }
2677 } 2697 }
2678 2698
2679 2699
2680 void LCodeGen::DoStoreContextSlot(LStoreContextSlot* instr) { 2700 void LCodeGen::DoStoreContextSlot(LStoreContextSlot* instr) {
2681 Register context = ToRegister(instr->context()); 2701 Register context = ToRegister(instr->context());
2682 Register value = ToRegister(instr->value()); 2702 Register value = ToRegister(instr->value());
2683 Register scratch = scratch0(); 2703 Register scratch = scratch0();
2684 MemOperand target = ContextMemOperand(context, instr->slot_index()); 2704 MemOperand target = ContextMemOperand(context, instr->slot_index());
2685 2705
2706 Label skip_assignment;
2707
2708 if (instr->hydrogen()->RequiresHoleCheck()) {
2709 __ LoadP(scratch, target);
2710 __ LoadRoot(ip, Heap::kTheHoleValueRootIndex);
2711 __ cmp(scratch, ip);
2712 if (instr->hydrogen()->DeoptimizesOnHole()) {
2713 DeoptimizeIf(eq, instr, DeoptimizeReason::kHole);
2714 } else {
2715 __ bne(&skip_assignment);
2716 }
2717 }
2718
2686 __ StoreP(value, target, r0); 2719 __ StoreP(value, target, r0);
2687 if (instr->hydrogen()->NeedsWriteBarrier()) { 2720 if (instr->hydrogen()->NeedsWriteBarrier()) {
2688 SmiCheck check_needed = instr->hydrogen()->value()->type().IsHeapObject() 2721 SmiCheck check_needed = instr->hydrogen()->value()->type().IsHeapObject()
2689 ? OMIT_SMI_CHECK 2722 ? OMIT_SMI_CHECK
2690 : INLINE_SMI_CHECK; 2723 : INLINE_SMI_CHECK;
2691 __ RecordWriteContextSlot(context, target.offset(), value, scratch, 2724 __ RecordWriteContextSlot(context, target.offset(), value, scratch,
2692 GetLinkRegisterState(), kSaveFPRegs, 2725 GetLinkRegisterState(), kSaveFPRegs,
2693 EMIT_REMEMBERED_SET, check_needed); 2726 EMIT_REMEMBERED_SET, check_needed);
2694 } 2727 }
2728
2729 __ bind(&skip_assignment);
2695 } 2730 }
2696 2731
2697 2732
2698 void LCodeGen::DoLoadNamedField(LLoadNamedField* instr) { 2733 void LCodeGen::DoLoadNamedField(LLoadNamedField* instr) {
2699 HObjectAccess access = instr->hydrogen()->access(); 2734 HObjectAccess access = instr->hydrogen()->access();
2700 int offset = access.offset(); 2735 int offset = access.offset();
2701 Register object = ToRegister(instr->object()); 2736 Register object = ToRegister(instr->object());
2702 2737
2703 if (access.IsExternalMemory()) { 2738 if (access.IsExternalMemory()) {
2704 Register result = ToRegister(instr->result()); 2739 Register result = ToRegister(instr->result());
(...skipping 2932 matching lines...) Expand 10 before | Expand all | Expand 10 after
5637 __ LoadP(result, 5672 __ LoadP(result,
5638 FieldMemOperand(scratch, FixedArray::kHeaderSize - kPointerSize)); 5673 FieldMemOperand(scratch, FixedArray::kHeaderSize - kPointerSize));
5639 __ bind(deferred->exit()); 5674 __ bind(deferred->exit());
5640 __ bind(&done); 5675 __ bind(&done);
5641 } 5676 }
5642 5677
5643 #undef __ 5678 #undef __
5644 5679
5645 } // namespace internal 5680 } // namespace internal
5646 } // namespace v8 5681 } // namespace v8
OLDNEW
« no previous file with comments | « src/crankshaft/mips64/lithium-mips64.cc ('k') | src/crankshaft/ppc/lithium-ppc.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698