Backed out changeset fffa0e5cc406 (bug 1165053)
authorTooru Fujisawa <arai_a@mac.com>
Mon, 28 Mar 2016 06:49:59 +0900
changeset 290686 5e115ad804f53ca5f7b69820ca3dfabb382aca01
parent 290685 2391f1cfd6060f28a62a011c18041250ec3d1c84
child 290687 c1c6cd86d9d42fd97bc835e3038eda6b01341197
push id19656
push usergwagner@mozilla.com
push dateMon, 04 Apr 2016 13:43:23 +0000
treeherderb2g-inbound@e99061fde28a [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
bugs1165053
milestone48.0a1
backs outfffa0e5cc40628fcb7848dff1fe8c8c7605e9bc7
Backed out changeset fffa0e5cc406 (bug 1165053)
js/src/jit-test/tests/ion/testPossiblyWrappedArrayBufferByteLength.js
js/src/jit/InlinableNatives.h
js/src/jit/IonBuilder.cpp
js/src/jit/IonBuilder.h
js/src/jit/MCallOptimize.cpp
js/src/vm/SelfHosting.cpp
deleted file mode 100644
--- a/js/src/jit-test/tests/ion/testPossiblyWrappedArrayBufferByteLength.js
+++ /dev/null
@@ -1,41 +0,0 @@
-var PossiblyWrappedArrayBufferByteLength = getSelfHostedValue("PossiblyWrappedArrayBufferByteLength");
-
-setJitCompilerOption("ion.warmup.trigger", 50);
-
-function testBasic() {
-  var arr = [1, 2, 3];
-  var tarr = new Int32Array(arr);
-  var abuf = tarr.buffer;
-
-  var arrLength = arr.length;
-  var bytesPerElement = Int32Array.BYTES_PER_ELEMENT;
-
-  var f = function() {
-    assertEq(PossiblyWrappedArrayBufferByteLength(abuf), arrLength * bytesPerElement);
-  };
-  do {
-    f();
-  } while (!inIon());
-}
-testBasic();
-
-function testWrapped() {
-  var g = newGlobal();
-g.eval(`
-var arr = [1, 2, 3];
-var tarr = new Int32Array(arr);
-var abuf = tarr.buffer;
-`);
-
-  var abuf = g.abuf;
-  var arrLength = g.arr.length;
-  var bytesPerElement = g.Int32Array.BYTES_PER_ELEMENT;
-
-  var f = function() {
-    assertEq(PossiblyWrappedArrayBufferByteLength(abuf), arrLength * bytesPerElement);
-  };
-  do {
-    f();
-  } while (!inIon());
-}
-testWrapped();
--- a/js/src/jit/InlinableNatives.h
+++ b/js/src/jit/InlinableNatives.h
@@ -106,18 +106,16 @@
                                     \
     _(IntrinsicIsArrayIterator)     \
     _(IntrinsicIsMapIterator)       \
     _(IntrinsicIsStringIterator)    \
     _(IntrinsicIsListIterator)      \
                                     \
     _(IntrinsicGetNextMapEntryForIterator) \
                                     \
-    _(IntrinsicPossiblyWrappedArrayBufferByteLength) \
-                                    \
     _(IntrinsicIsTypedArray)        \
     _(IntrinsicIsPossiblyWrappedTypedArray) \
     _(IntrinsicTypedArrayLength)    \
     _(IntrinsicPossiblyWrappedTypedArrayLength)    \
     _(IntrinsicSetDisjointTypedElements) \
                                     \
     _(IntrinsicObjectIsTypedObject) \
     _(IntrinsicObjectIsTransparentTypedObject) \
--- a/js/src/jit/IonBuilder.cpp
+++ b/js/src/jit/IonBuilder.cpp
@@ -9495,25 +9495,16 @@ IonBuilder::jsop_getelem_dense(MDefiniti
         load->setResultType(knownType);
         load->setResultTypeSet(types);
     }
 
     current->push(load);
     return pushTypeBarrier(load, types, barrier);
 }
 
-MInstruction*
-IonBuilder::addArrayBufferByteLength(MDefinition* obj)
-{
-    MLoadFixedSlot* ins = MLoadFixedSlot::New(alloc(), obj, ArrayBufferObject::BYTE_LENGTH_SLOT);
-    current->add(ins);
-    ins->setResultType(MIRType_Int32);
-    return ins;
-}
-
 void
 IonBuilder::addTypedArrayLengthAndData(MDefinition* obj,
                                        BoundsChecking checking,
                                        MDefinition** index,
                                        MInstruction** length, MInstruction** elements)
 {
     MOZ_ASSERT((index != nullptr) == (elements != nullptr));
 
--- a/js/src/jit/IonBuilder.h
+++ b/js/src/jit/IonBuilder.h
@@ -618,18 +618,16 @@ class IonBuilder
                                             MDefinition* index,
                                             TypedObjectPrediction objTypeReprs,
                                             TypedObjectPrediction elemTypeReprs,
                                             int32_t elemSize);
     TemporaryTypeSet* computeHeapType(const TemporaryTypeSet* objTypes, const jsid id);
 
     enum BoundsChecking { DoBoundsCheck, SkipBoundsCheck };
 
-    MInstruction* addArrayBufferByteLength(MDefinition* obj);
-
     // Add instructions to compute a typed array's length and data.  Also
     // optionally convert |*index| into a bounds-checked definition, if
     // requested.
     //
     // If you only need the array's length, use addTypedArrayLength below.
     void addTypedArrayLengthAndData(MDefinition* obj,
                                     BoundsChecking checking,
                                     MDefinition** index,
@@ -841,19 +839,16 @@ class IonBuilder
     // Slot intrinsics.
     InliningStatus inlineUnsafeSetReservedSlot(CallInfo& callInfo);
     InliningStatus inlineUnsafeGetReservedSlot(CallInfo& callInfo,
                                                MIRType knownValueType);
 
     // Map intrinsics.
     InliningStatus inlineGetNextMapEntryForIterator(CallInfo& callInfo);
 
-    // ArrayBuffer intrinsics.
-    InliningStatus inlinePossiblyWrappedArrayBufferByteLength(CallInfo& callInfo);
-
     // TypedArray intrinsics.
     enum WrappingBehavior { AllowWrappedTypedArrays, RejectWrappedTypedArrays };
     InliningStatus inlineIsTypedArrayHelper(CallInfo& callInfo, WrappingBehavior wrappingBehavior);
     InliningStatus inlineIsTypedArray(CallInfo& callInfo);
     InliningStatus inlineIsPossiblyWrappedTypedArray(CallInfo& callInfo);
     InliningStatus inlineTypedArrayLength(CallInfo& callInfo);
     InliningStatus inlinePossiblyWrappedTypedArrayLength(CallInfo& callInfo);
     InliningStatus inlineSetDisjointTypedElements(CallInfo& callInfo);
--- a/js/src/jit/MCallOptimize.cpp
+++ b/js/src/jit/MCallOptimize.cpp
@@ -259,20 +259,16 @@ IonBuilder::inlineNativeCall(CallInfo& c
         return inlineHasClass(callInfo, &ListIteratorObject::class_);
       case InlinableNative::IntrinsicDefineDataProperty:
         return inlineDefineDataProperty(callInfo);
 
       // Map intrinsics.
       case InlinableNative::IntrinsicGetNextMapEntryForIterator:
         return inlineGetNextMapEntryForIterator(callInfo);
 
-      // ArrayBuffer intrinsics.
-      case InlinableNative::IntrinsicPossiblyWrappedArrayBufferByteLength:
-        return inlinePossiblyWrappedArrayBufferByteLength(callInfo);
-
       // TypedArray intrinsics.
       case InlinableNative::IntrinsicIsTypedArray:
         return inlineIsTypedArray(callInfo);
       case InlinableNative::IntrinsicIsPossiblyWrappedTypedArray:
         return inlineIsPossiblyWrappedTypedArray(callInfo);
       case InlinableNative::IntrinsicPossiblyWrappedTypedArrayLength:
         return inlinePossiblyWrappedTypedArrayLength(callInfo);
       case InlinableNative::IntrinsicTypedArrayLength:
@@ -2233,50 +2229,16 @@ IonBuilder::inlineGetNextMapEntryForIter
     current->push(next);
 
     if (!resumeAfter(next))
         return InliningStatus_Error;
 
     return InliningStatus_Inlined;
 }
 
-static bool
-IsArrayBufferObject(CompilerConstraintList* constraints, MDefinition* def)
-{
-    MOZ_ASSERT(def->type() == MIRType_Object);
-
-    TemporaryTypeSet* types = def->resultTypeSet();
-    if (!types)
-        return false;
-
-    return types->getKnownClass(constraints) == &ArrayBufferObject::class_;
-}
-
-IonBuilder::InliningStatus
-IonBuilder::inlinePossiblyWrappedArrayBufferByteLength(CallInfo& callInfo)
-{
-    MOZ_ASSERT(!callInfo.constructing());
-    MOZ_ASSERT(callInfo.argc() == 1);
-
-    MDefinition* objArg = callInfo.getArg(0);
-    if (objArg->type() != MIRType_Object)
-        return InliningStatus_NotInlined;
-    if (getInlineReturnType() != MIRType_Int32)
-        return InliningStatus_NotInlined;
-
-    if (!IsArrayBufferObject(constraints(), objArg))
-        return InliningStatus_NotInlined;
-
-    MInstruction* ins = addArrayBufferByteLength(objArg);
-    current->push(ins);
-
-    callInfo.setImplicitlyUsedUnchecked();
-    return InliningStatus_Inlined;
-}
-
 IonBuilder::InliningStatus
 IonBuilder::inlineIsTypedArrayHelper(CallInfo& callInfo, WrappingBehavior wrappingBehavior)
 {
     MOZ_ASSERT(!callInfo.constructing());
     MOZ_ASSERT(callInfo.argc() == 1);
 
     if (callInfo.getArg(0)->type() != MIRType_Object)
         return InliningStatus_NotInlined;
--- a/js/src/vm/SelfHosting.cpp
+++ b/js/src/vm/SelfHosting.cpp
@@ -2164,18 +2164,17 @@ static const JSFunctionSpec intrinsic_fu
     JS_FN("GeneratorSetClosed",      intrinsic_GeneratorSetClosed,      1,0),
 
     JS_FN("IsArrayBuffer",
           intrinsic_IsInstanceOfBuiltin<ArrayBufferObject>,             1,0),
     JS_FN("IsSharedArrayBuffer",
           intrinsic_IsInstanceOfBuiltin<SharedArrayBufferObject>,       1,0),
 
     JS_FN("ArrayBufferByteLength",   intrinsic_ArrayBufferByteLength,   1,0),
-    JS_INLINABLE_FN("PossiblyWrappedArrayBufferByteLength", intrinsic_PossiblyWrappedArrayBufferByteLength, 1,0,
-                    IntrinsicPossiblyWrappedArrayBufferByteLength),
+    JS_FN("PossiblyWrappedArrayBufferByteLength", intrinsic_PossiblyWrappedArrayBufferByteLength, 1,0),
     JS_FN("ArrayBufferCopyData",     intrinsic_ArrayBufferCopyData,     4,0),
 
     JS_FN("IsUint8TypedArray",        intrinsic_IsUint8TypedArray,      1,0),
     JS_FN("IsInt8TypedArray",         intrinsic_IsInt8TypedArray,       1,0),
     JS_FN("IsUint16TypedArray",       intrinsic_IsUint16TypedArray,     1,0),
     JS_FN("IsInt16TypedArray",        intrinsic_IsInt16TypedArray,      1,0),
     JS_FN("IsUint32TypedArray",       intrinsic_IsUint32TypedArray,     1,0),
     JS_FN("IsInt32TypedArray",        intrinsic_IsInt32TypedArray,      1,0),