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

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

Issue 2622783002: [crankshaft] Remove dead Variable hole-checking code (Closed)
Patch Set: Update golden files 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 2640 matching lines...) Expand 10 before | Expand all | Expand 10 after
2651 } 2651 }
2652 2652
2653 __ blr(); 2653 __ blr();
2654 } 2654 }
2655 2655
2656 2656
2657 void LCodeGen::DoLoadContextSlot(LLoadContextSlot* instr) { 2657 void LCodeGen::DoLoadContextSlot(LLoadContextSlot* instr) {
2658 Register context = ToRegister(instr->context()); 2658 Register context = ToRegister(instr->context());
2659 Register result = ToRegister(instr->result()); 2659 Register result = ToRegister(instr->result());
2660 __ LoadP(result, ContextMemOperand(context, instr->slot_index())); 2660 __ LoadP(result, ContextMemOperand(context, instr->slot_index()));
2661 if (instr->hydrogen()->RequiresHoleCheck()) {
2662 __ LoadRoot(ip, Heap::kTheHoleValueRootIndex);
2663 if (instr->hydrogen()->DeoptimizesOnHole()) {
2664 __ cmp(result, ip);
2665 DeoptimizeIf(eq, instr, DeoptimizeReason::kHole);
2666 } else {
2667 if (CpuFeatures::IsSupported(ISELECT)) {
2668 Register scratch = scratch0();
2669 __ mov(scratch, Operand(factory()->undefined_value()));
2670 __ cmp(result, ip);
2671 __ isel(eq, result, scratch, result);
2672 } else {
2673 Label skip;
2674 __ cmp(result, ip);
2675 __ bne(&skip);
2676 __ mov(result, Operand(factory()->undefined_value()));
2677 __ bind(&skip);
2678 }
2679 }
2680 }
2681 } 2661 }
2682 2662
2683 2663
2684 void LCodeGen::DoStoreContextSlot(LStoreContextSlot* instr) { 2664 void LCodeGen::DoStoreContextSlot(LStoreContextSlot* instr) {
2685 Register context = ToRegister(instr->context()); 2665 Register context = ToRegister(instr->context());
2686 Register value = ToRegister(instr->value()); 2666 Register value = ToRegister(instr->value());
2687 Register scratch = scratch0(); 2667 Register scratch = scratch0();
2688 MemOperand target = ContextMemOperand(context, instr->slot_index()); 2668 MemOperand target = ContextMemOperand(context, instr->slot_index());
2689 2669
2690 Label skip_assignment;
2691
2692 if (instr->hydrogen()->RequiresHoleCheck()) {
2693 __ LoadP(scratch, target);
2694 __ LoadRoot(ip, Heap::kTheHoleValueRootIndex);
2695 __ cmp(scratch, ip);
2696 if (instr->hydrogen()->DeoptimizesOnHole()) {
2697 DeoptimizeIf(eq, instr, DeoptimizeReason::kHole);
2698 } else {
2699 __ bne(&skip_assignment);
2700 }
2701 }
2702
2703 __ StoreP(value, target, r0); 2670 __ StoreP(value, target, r0);
2704 if (instr->hydrogen()->NeedsWriteBarrier()) { 2671 if (instr->hydrogen()->NeedsWriteBarrier()) {
2705 SmiCheck check_needed = instr->hydrogen()->value()->type().IsHeapObject() 2672 SmiCheck check_needed = instr->hydrogen()->value()->type().IsHeapObject()
2706 ? OMIT_SMI_CHECK 2673 ? OMIT_SMI_CHECK
2707 : INLINE_SMI_CHECK; 2674 : INLINE_SMI_CHECK;
2708 __ RecordWriteContextSlot(context, target.offset(), value, scratch, 2675 __ RecordWriteContextSlot(context, target.offset(), value, scratch,
2709 GetLinkRegisterState(), kSaveFPRegs, 2676 GetLinkRegisterState(), kSaveFPRegs,
2710 EMIT_REMEMBERED_SET, check_needed); 2677 EMIT_REMEMBERED_SET, check_needed);
2711 } 2678 }
2712
2713 __ bind(&skip_assignment);
2714 } 2679 }
2715 2680
2716 2681
2717 void LCodeGen::DoLoadNamedField(LLoadNamedField* instr) { 2682 void LCodeGen::DoLoadNamedField(LLoadNamedField* instr) {
2718 HObjectAccess access = instr->hydrogen()->access(); 2683 HObjectAccess access = instr->hydrogen()->access();
2719 int offset = access.offset(); 2684 int offset = access.offset();
2720 Register object = ToRegister(instr->object()); 2685 Register object = ToRegister(instr->object());
2721 2686
2722 if (access.IsExternalMemory()) { 2687 if (access.IsExternalMemory()) {
2723 Register result = ToRegister(instr->result()); 2688 Register result = ToRegister(instr->result());
(...skipping 2932 matching lines...) Expand 10 before | Expand all | Expand 10 after
5656 __ LoadP(result, 5621 __ LoadP(result,
5657 FieldMemOperand(scratch, FixedArray::kHeaderSize - kPointerSize)); 5622 FieldMemOperand(scratch, FixedArray::kHeaderSize - kPointerSize));
5658 __ bind(deferred->exit()); 5623 __ bind(deferred->exit());
5659 __ bind(&done); 5624 __ bind(&done);
5660 } 5625 }
5661 5626
5662 #undef __ 5627 #undef __
5663 5628
5664 } // namespace internal 5629 } // namespace internal
5665 } // namespace v8 5630 } // 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