From 0cb13eb55244376efc684e1bf2fdf4dff7e3fcc7 Mon Sep 17 00:00:00 2001 From: "plind44@gmail.com" Date: Wed, 12 Feb 2014 18:55:33 +0000 Subject: [PATCH] MIPS: Omit redundant smi checks in write barriers. Port r19323 (929c047) BUG= R=plind44@gmail.com Review URL: https://codereview.chromium.org/160713002 Patch from Balazs Kilvady . git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@19343 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/mips/lithium-codegen-mips.cc | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/mips/lithium-codegen-mips.cc b/src/mips/lithium-codegen-mips.cc index 0f7614b..604b164 100644 --- a/src/mips/lithium-codegen-mips.cc +++ b/src/mips/lithium-codegen-mips.cc @@ -3967,12 +3967,18 @@ void LCodeGen::DoStoreNamedField(LStoreNamedField* instr) { } Handle transition = instr->transition(); + SmiCheck check_needed = + instr->hydrogen()->value()->IsHeapObject() + ? OMIT_SMI_CHECK : INLINE_SMI_CHECK; if (FLAG_track_heap_object_fields && representation.IsHeapObject()) { Register value = ToRegister(instr->value()); if (!instr->hydrogen()->value()->type().IsHeapObject()) { __ SmiTst(value, scratch); DeoptimizeIf(eq, instr->environment(), scratch, Operand(zero_reg)); + + // We know that value is a smi now, so we can omit the check below. + check_needed = OMIT_SMI_CHECK; } } else if (representation.IsDouble()) { ASSERT(transition.is_null()); @@ -4002,9 +4008,6 @@ void LCodeGen::DoStoreNamedField(LStoreNamedField* instr) { // Do the store. Register value = ToRegister(instr->value()); - SmiCheck check_needed = - instr->hydrogen()->value()->IsHeapObject() - ? OMIT_SMI_CHECK : INLINE_SMI_CHECK; if (access.IsInobject()) { MemOperand operand = FieldMemOperand(object, offset); __ Store(value, operand, representation); -- 2.7.4