Commit eca4b154 authored by Nicolas B. Pierron's avatar Nicolas B. Pierron
Browse files

Backout a2843362ce9b (Bug 786126) - Are we fast yet regression.

parent 8cd3025b
Loading
Loading
Loading
Loading
+0 −10
Original line number Diff line number Diff line
@@ -373,16 +373,6 @@ TypeInferenceOracle::elementReadGeneric(JSScript *script, jsbytecode *pc, bool *

    *cacheable = (obj == MIRType_Object &&
                  (id == MIRType_Value || id == MIRType_Int32 || id == MIRType_String));

    // Turn off cacheing if the element is int32 and we've seen non-native objects as the target
    // of this getelem.
    if (*cacheable) {
        if (id == MIRType_Int32) {
            if (script->analysis()->getCode(pc).nonNativeGetElement)
                *cacheable = false;
        }
    }

    if (*cacheable)
        *monitorResult = (id == MIRType_String || script->analysis()->getCode(pc).getStringElement);
    else
+4 −5
Original line number Diff line number Diff line
@@ -113,7 +113,6 @@ class Bytecode
     */
    bool arrayWriteHole: 1;  /* SETELEM which has written to an array hole. */
    bool getStringElement:1; /* GETELEM which has accessed string properties. */
    bool nonNativeGetElement:1; /* GETELEM on a non-native object. */
    bool accessGetter: 1;    /* Property read on a shape with a getter hook. */
    bool notIdempotent: 1;   /* Don't use an idempotent cache for this property read. */

+10 −15
Original line number Diff line number Diff line
@@ -686,19 +686,6 @@ GetObjectElementOperation(JSContext *cx, JSOp op, HandleObject obj, const Value
    }
#endif

    bool updateAnalysis = false;
    RootedScript script(cx, NULL);
    jsbytecode *pc = NULL;
    if (!cx->fp()->beginsIonActivation()) {
        // Don't call GetPcScript from inside Ion since it's expensive.
        types::TypeScript::GetPcScript(cx, &script, &pc);
        if (script->hasAnalysis())
            updateAnalysis = true;
    }

    if (updateAnalysis && !obj->isNative())
        script->analysis()->getCode(pc).nonNativeGetElement = true;

    uint32_t index;
    if (IsDefinitelyIndex(rref, &index)) {
        do {
@@ -716,8 +703,16 @@ GetObjectElementOperation(JSContext *cx, JSOp op, HandleObject obj, const Value
                return false;
        } while(0);
    } else {
        if (updateAnalysis)
        if (!cx->fp()->beginsIonActivation()) {
            // Don't update getStringElement if called from Ion code, since
            // ion::GetPcScript is expensive.
            RootedScript script(cx);
            jsbytecode *pc;
            types::TypeScript::GetPcScript(cx, &script, &pc);

            if (script->hasAnalysis())
                script->analysis()->getCode(pc).getStringElement = true;
        }

        SpecialId special;
        res.set(rref);