From c2d28aa76fbba0fdbaf1e023aa397497aa0aaad0 Mon Sep 17 00:00:00 2001 From: Douglas Crosher Date: Sun, 7 Dec 2014 00:15:24 +1100 Subject: [PATCH] Bug 1103450 - Odin atomic and locks: optimize array access when the index is known to be within bounds. r=lth --- js/src/asmjs/AsmJSValidate.cpp | 6 ++---- js/src/jit/x64/CodeGenerator-x64.cpp | 6 ++---- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/js/src/asmjs/AsmJSValidate.cpp b/js/src/asmjs/AsmJSValidate.cpp index 678bae537929..d85e161fcc0b 100644 --- a/js/src/asmjs/AsmJSValidate.cpp +++ b/js/src/asmjs/AsmJSValidate.cpp @@ -2814,8 +2814,7 @@ class FunctionCompiler if (inDeadCode()) return nullptr; - // The code generator requires explicit bounds checking for compareExchange. - bool needsBoundsCheck = true; + bool needsBoundsCheck = chk == NEEDS_BOUNDS_CHECK; MAsmJSCompareExchangeHeap *cas = MAsmJSCompareExchangeHeap::New(alloc(), vt, ptr, oldv, newv, needsBoundsCheck); curBlock_->add(cas); @@ -2828,8 +2827,7 @@ class FunctionCompiler if (inDeadCode()) return nullptr; - // The code generator requires explicit bounds checking for the binops. - bool needsBoundsCheck = true; + bool needsBoundsCheck = chk == NEEDS_BOUNDS_CHECK; MAsmJSAtomicBinopHeap *binop = MAsmJSAtomicBinopHeap::New(alloc(), op, vt, ptr, v, needsBoundsCheck); curBlock_->add(binop); diff --git a/js/src/jit/x64/CodeGenerator-x64.cpp b/js/src/jit/x64/CodeGenerator-x64.cpp index 5d0e8f03c43e..dce52f7affd4 100644 --- a/js/src/jit/x64/CodeGenerator-x64.cpp +++ b/js/src/jit/x64/CodeGenerator-x64.cpp @@ -387,8 +387,7 @@ CodeGeneratorX64::visitAsmJSCompareExchangeHeap(LAsmJSCompareExchangeHeap *ins) Label rejoin; uint32_t maybeCmpOffset = AsmJSHeapAccess::NoLengthCheck; - MOZ_ASSERT(mir->needsBoundsCheck()); - { + if (mir->needsBoundsCheck()) { maybeCmpOffset = masm.cmplWithPatch(ToRegister(ptr), Imm32(0)).offset(); Label goahead; masm.j(Assembler::LessThan, &goahead); @@ -425,8 +424,7 @@ CodeGeneratorX64::visitAsmJSAtomicBinopHeap(LAsmJSAtomicBinopHeap *ins) Label rejoin; uint32_t maybeCmpOffset = AsmJSHeapAccess::NoLengthCheck; - MOZ_ASSERT(mir->needsBoundsCheck()); - { + if (mir->needsBoundsCheck()) { maybeCmpOffset = masm.cmplWithPatch(ToRegister(ptr), Imm32(0)).offset(); Label goahead; masm.j(Assembler::LessThan, &goahead);