Changeset 202633 in webkit


Ignore:
Timestamp:
Jun 29, 2016 11:25:40 AM (8 years ago)
Author:
commit-queue@webkit.org
Message:

Unreviewed, rolling out r202627.
https://bugs.webkit.org/show_bug.cgi?id=159266

patch is broken on arm (Requested by keith_miller on #webkit).

Reverted changeset:

"LLInt should support other types of prototype GetById
caching."
https://bugs.webkit.org/show_bug.cgi?id=158083
http://trac.webkit.org/changeset/202627

Location:
trunk/Source/JavaScriptCore
Files:
2 deleted
15 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r202631 r202633  
     12016-06-29  Commit Queue  <commit-queue@webkit.org>
     2
     3        Unreviewed, rolling out r202627.
     4        https://bugs.webkit.org/show_bug.cgi?id=159266
     5
     6        patch is broken on arm (Requested by keith_miller on #webkit).
     7
     8        Reverted changeset:
     9
     10        "LLInt should support other types of prototype GetById
     11        caching."
     12        https://bugs.webkit.org/show_bug.cgi?id=158083
     13        http://trac.webkit.org/changeset/202627
     14
    1152016-06-29  Benjamin Poulain  <bpoulain@apple.com>
    216
  • trunk/Source/JavaScriptCore/bytecode/BytecodeList.json

    r202627 r202633  
    6565            { "name" : "op_get_by_id_proto_load", "length" : 9 },
    6666            { "name" : "op_get_by_id_unset", "length" : 9 },
    67             { "name" : "op_get_by_id_proto_accessor", "length" : 9 },
    68             { "name" : "op_get_by_id_proto_custom", "length" : 9 },
    6967            { "name" : "op_get_by_id_with_this", "length" : 5 },
    7068            { "name" : "op_get_by_val_with_this", "length" : 5 },
  • trunk/Source/JavaScriptCore/bytecode/BytecodeUseDef.h

    r202627 r202633  
    165165    case op_get_by_id_proto_load:
    166166    case op_get_by_id_unset:
    167     case op_get_by_id_proto_accessor:
    168     case op_get_by_id_proto_custom:
    169167    case op_get_array_length:
    170168    case op_typeof:
     
    406404    case op_get_by_id_proto_load:
    407405    case op_get_by_id_unset:
    408     case op_get_by_id_proto_accessor:
    409     case op_get_by_id_proto_custom:
    410406    case op_get_by_id_with_this:
    411407    case op_get_by_val_with_this:
  • trunk/Source/JavaScriptCore/bytecode/CodeBlock.cpp

    r202627 r202633  
    355355        op = "get_by_id_unset";
    356356        break;
    357     case op_get_by_id_proto_accessor:
    358         op = "op_get_by_id_proto_accessor";
    359         break;
    360     case op_get_by_id_proto_custom:
    361         op = "op_get_by_id_proto_custom";
    362         break;
    363357    case op_get_array_length:
    364358        op = "array_length";
     
    11441138        case op_get_by_id_proto_load:
    11451139        case op_get_by_id_unset:
    1146         case op_get_by_id_proto_accessor:
    1147         case op_get_by_id_proto_custom:
    11481140        case op_get_array_length: {
    11491141            printGetByIdOp(out, exec, location, it);
     
    28052797        case op_get_by_id:
    28062798        case op_get_by_id_proto_load:
    2807         case op_get_by_id_unset:
    2808         case op_get_by_id_proto_accessor:
    2809         case op_get_by_id_proto_custom: {
     2799        case op_get_by_id_unset: {
    28102800            StructureID oldStructureID = curInstruction[4].u.structureID;
    28112801            if (!oldStructureID || Heap::isMarked(m_vm->heap.structureIDTable().get(oldStructureID)))
  • trunk/Source/JavaScriptCore/bytecode/GetByIdStatus.cpp

    r202627 r202633  
    7979    Opcode opcode = instruction[0].u.opcode;
    8080
    81     ASSERT(opcode == LLInt::getOpcode(op_get_array_length) || opcode == LLInt::getOpcode(op_try_get_by_id) || opcode == LLInt::getOpcode(op_get_by_id_proto_load) || opcode == LLInt::getOpcode(op_get_by_id) || opcode == LLInt::getOpcode(op_get_by_id_unset) || opcode == LLInt::getOpcode(op_get_by_id_proto_accessor) || opcode == LLInt::getOpcode(op_get_by_id_proto_custom));
     81    ASSERT(opcode == LLInt::getOpcode(op_get_array_length) || opcode == LLInt::getOpcode(op_try_get_by_id) || opcode == LLInt::getOpcode(op_get_by_id_proto_load) || opcode == LLInt::getOpcode(op_get_by_id) || opcode == LLInt::getOpcode(op_get_by_id_unset));
    8282
    8383    // FIXME: We should not just bail if we see a try_get_by_id or a get_by_id_proto_load.
  • trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h

    r202627 r202633  
    108108
    109109class UnlinkedCodeBlock : public JSCell {
    110     friend class LLIntOffsetsExtractor;
    111110public:
    112111    typedef JSCell Base;
  • trunk/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp

    r202627 r202633  
    41464146        case op_get_by_id_proto_load:
    41474147        case op_get_by_id_unset:
    4148         case op_get_by_id_proto_accessor:
    4149         case op_get_by_id_proto_custom:
    41504148        case op_get_array_length: {
    41514149            SpeculatedType prediction = getPrediction();
  • trunk/Source/JavaScriptCore/dfg/DFGCapabilities.cpp

    r202627 r202633  
    159159    case op_get_by_id_proto_load:
    160160    case op_get_by_id_unset:
    161     case op_get_by_id_proto_accessor:
    162     case op_get_by_id_proto_custom:
    163161    case op_get_by_id_with_this:
    164162    case op_get_by_val_with_this:
  • trunk/Source/JavaScriptCore/jit/JIT.cpp

    r202627 r202633  
    251251        case op_get_by_id_proto_load:
    252252        case op_get_by_id_unset:
    253         case op_get_by_id_proto_accessor:
    254         case op_get_by_id_proto_custom:
    255253        DEFINE_OP(op_get_by_id)
    256254        DEFINE_OP(op_get_by_id_with_this)
     
    438436        case op_get_by_id_proto_load:
    439437        case op_get_by_id_unset:
    440         case op_get_by_id_proto_accessor:
    441         case op_get_by_id_proto_custom:
    442438        DEFINE_SLOWCASE_OP(op_get_by_id)
    443439        DEFINE_SLOWCASE_OP(op_get_by_val)
  • trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp

    r202627 r202633  
    599599    if (slot.isUnset())
    600600        conditions = generateConditionsForPropertyMiss(vm, codeBlock, exec, structure, ident.impl());
    601     else if (slot.isCustom())
    602         conditions = generateConditionsForPrototypePropertyHitCustom(vm, codeBlock, exec, structure, slot.slotBase(), ident.impl());
    603601    else
    604602        conditions = generateConditionsForPrototypePropertyHit(vm, codeBlock, exec, structure, slot.slotBase(), ident.impl());
     
    617615        result.iterator->value.add(condition, pc)->install();
    618616    }
    619     ASSERT((offset == invalidOffset) == (slot.isUnset() || slot.isCustom()));
     617    ASSERT((offset == invalidOffset) == slot.isUnset());
    620618
    621619    ConcurrentJITLocker locker(codeBlock->m_lock);
     
    625623        pc[4].u.structureID = structure->id();
    626624        return;
    627     } else if (slot.isCustom()) {
    628         pc[0].u.opcode = LLInt::getOpcode(op_get_by_id_proto_custom);
    629         pc[4].u.structureID = structure->id();
    630         pc[5].u.getterFunc = slot.customGetter();
    631         pc[6].u.pointer = slot.attributes() & CustomAccessor ? 0 : slot.slotBase();
    632         return;
    633     }
    634     ASSERT(slot.isValue() || slot.isAccessor());
    635 
    636     if (slot.isAccessor())
    637         pc[0].u.opcode = LLInt::getOpcode(op_get_by_id_proto_accessor);
    638     else
    639         pc[0].u.opcode = LLInt::getOpcode(op_get_by_id_proto_load);
    640 
     625    }
     626    ASSERT(slot.isValue());
     627
     628    pc[0].u.opcode = LLInt::getOpcode(op_get_by_id_proto_load);
    641629    pc[4].u.structureID = structure->id();
    642630    pc[5].u.operand = offset;
     
    679667                ConcurrentJITLocker locker(codeBlock->m_lock);
    680668
    681                 if (slot.isValue()) {
    682                     pc[4].u.structureID = structure->id();
    683                     pc[5].u.operand = slot.cachedOffset();
    684                 }
     669                pc[4].u.structureID = structure->id();
     670                pc[5].u.operand = slot.cachedOffset();
    685671            }
    686         } else if (UNLIKELY(pc[7].u.operand && (slot.isValue() || slot.isUnset() || ((slot.isAccessor() || slot.isCustom()) && (slot.slotBase() != baseValue))))) {
     672        } else if (UNLIKELY(pc[7].u.operand && (slot.isValue() || slot.isUnset()))) {
    687673            ASSERT(slot.slotBase() != baseValue);
    688674
     
    704690    pc[OPCODE_LENGTH(op_get_by_id) - 1].u.profile->m_buckets[0] = JSValue::encode(result);
    705691    LLINT_END();
    706 }
    707 
    708 LLINT_SLOW_PATH_DECL(slow_path_get_proto_accessor)
    709 {
    710     LLINT_BEGIN();
    711     JSValue baseValue = LLINT_OP_C(2).jsValue();
    712     PropertyOffset offset = pc[5].u.operand;
    713     JSObject* slotBase = jsCast<JSObject*>(pc[6].u.jsCell.get());
    714     JSValue getterSetter = slotBase->getDirect(offset);
    715 
    716     JSValue result = callGetter(exec, baseValue, getterSetter);
    717 
    718     LLINT_RETURN_PROFILED(op_get_by_id, result);
    719692}
    720693
  • trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.h

    r202627 r202633  
    7474LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_try_get_by_id);
    7575LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_get_by_id);
    76 LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_get_proto_accessor);
    7776LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_get_arguments_length);
    7877LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_put_by_id);
  • trunk/Source/JavaScriptCore/llint/LowLevelInterpreter.asm

    r202627 r202633  
    422422    .ok:
    423423    end
    424 end
    425 
    426 macro loadIdentifier(index, dest)
    427     loadp CodeBlock[cfr], t1
    428     loadp CodeBlock::m_unlinkedCode[t1], t2
    429     loadp UnlinkedCodeBlock::m_identifiers[t2], t1
    430     move index, t2
    431     mulp sizeof Identifier, t2
    432     addp t2, t1
    433     loadp Identifier::m_string[t1], dest
    434424end
    435425
  • trunk/Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm

    r202627 r202633  
    14211421.opGetByIdUnsetSlow:
    14221422    callOpcodeSlowPath(_llint_slow_path_get_by_id)
    1423     dispatch(9)
    1424 
    1425 
    1426 _llint_op_get_by_id_proto_accessor:
    1427     traceExecution()
    1428     loadi 8[PC], t0
    1429     loadi 16[PC], t1
    1430     loadConstantOrVariablePayload(t0, CellTag, t3, .opGetByIdProtoAcessorSlow)
    1431     bineq JSCell::m_structureID[t3], t1, .opGetByIdProtoAcessorSlow
    1432     callSlowPath(_llint_slow_path_get_proto_accessor)
    1433     dispatch(9)
    1434 
    1435 .opGetByIdProtoAcessorSlow:
    1436     callSlowPath(_llint_slow_path_get_by_id)
    1437     dispatch(9)
    1438 
    1439 macro loadEncodedThisValue(baseValue, dest)
    1440    loadp 24[PC], dest
    1441    bineq 0, dest, .loadEncodedThisValueDone
    1442    move baseValue, dest
    1443    .loadEncodedThisValueDone:
    1444 end
    1445 
    1446 _llint_op_get_by_id_proto_custom:
    1447     traceExecution()
    1448     loadi 8[PC], t0
    1449     loadi 16[PC], t1
    1450     loadConstantOrVariablePayload(t0, CellTag, t3, .opGetByIdProtoCustomSlow)
    1451     bineq JSCell::m_structureID[t3], t1, .opGetByIdProtoCustomSlow
    1452     # Setting the topCallFrame
    1453     loadp Callee[cfr], t0
    1454     andp MarkedBlockMask, t0, t1
    1455     loadp MarkedBlock::m_weakSet + WeakSet::m_vm[t1], t1
    1456     storep cfr, VM::topCallFrame[t1]
    1457     loadi 12[PC], t0
    1458     loadIdentifier(t0, t2)
    1459     loadEncodedThisValue(t3, t1)
    1460     loadp 20[PC], t0
    1461     # Inlining the GetValueFunc call
    1462     push t1 # Load arg3 JSObject *
    1463     push t2 # Load arg2 PropertyName
    1464     move CellTag, t3
    1465     if BIG_ENDIAN
    1466         push t1 # Load arg1 Payload of EncodedJSValue
    1467         push t3 # Load arg1 Tag of EncodedJSValue
    1468     else
    1469         push t3 # Load arg1 Tag of EncodedJSValue
    1470         push t1 # Load arg1 Payload of EncodedJSValue
    1471     end
    1472     push cfr # Loading exec
    1473     call t0
    1474     addp 20, sp
    1475     loadi 4[PC], t2
    1476     storei r1, TagOffset[cfr, t2, 8]
    1477     storei r0, PayloadOffset[cfr, t2, 8]
    1478     valueProfile(r0, r1, 32, t2)
    1479     dispatch(9)
    1480 
    1481 .opGetByIdProtoCustomSlow:
    1482     callSlowPath(_llint_slow_path_get_by_id)
    14831423    dispatch(9)
    14841424
  • trunk/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm

    r202627 r202633  
    12951295
    12961296
    1297 _llint_op_get_by_id_proto_accessor:
    1298     traceExecution()
    1299     loadisFromInstruction(2, t0)
    1300     loadConstantOrVariableCell(t0, t3, .opGetByIdProtoAcessorSlow)
    1301     loadi JSCell::m_structureID[t3], t1
    1302     loadisFromInstruction(4, t2)
    1303     bineq t2, t1, .opGetByIdProtoAcessorSlow
    1304     callSlowPath(_llint_slow_path_get_proto_accessor)
    1305     dispatch(9)
    1306 
    1307 .opGetByIdProtoAcessorSlow:
    1308     callSlowPath(_llint_slow_path_get_by_id)
    1309     dispatch(9)
    1310 
    1311 
    1312 macro loadEncodedThisValue(baseValue, dest)
    1313    loadpFromInstruction(6, dest)
    1314    bineq 0, dest, .loadEncodedThisValueDone
    1315    move baseValue, dest
    1316    .loadEncodedThisValueDone:
    1317 end
    1318 
    1319 _llint_op_get_by_id_proto_custom:
    1320     traceExecution()
    1321     loadisFromInstruction(2, t0)
    1322     loadConstantOrVariableCell(t0, t3, .opGetByIdProtoCustomSlow)
    1323     loadi JSCell::m_structureID[t3], t1
    1324     loadisFromInstruction(4, t2)
    1325     bineq t2, t1, .opGetByIdProtoCustomSlow
    1326     # Setting the topCallFrame
    1327     loadp Callee[cfr], t0
    1328     andp MarkedBlockMask, t0, t1
    1329     loadp MarkedBlock::m_weakSet + WeakSet::m_vm[t1], t1
    1330     storep cfr, VM::topCallFrame[t1]
    1331     push PC
    1332     push PB
    1333     loadpFromInstruction(3, t0)
    1334     loadIdentifier(t0, a2)
    1335     loadEncodedThisValue(t3, a1)
    1336     loadpFromInstruction(5, t0)
    1337     prepareStateForCCall()
    1338     move cfr, a0
    1339     move a1, a3
    1340     cCall4(t0)
    1341     restoreStateAfterCCall()
    1342     pop PB
    1343     pop PC
    1344     loadisFromInstruction(1, t2)
    1345     storeq r0, [cfr, t2, 8]
    1346     valueProfile(r0, 8, t1)
    1347     dispatch(9)
    1348 
    1349 .opGetByIdProtoCustomSlow:
    1350     callSlowPath(_llint_slow_path_get_by_id)
    1351     dispatch(9)
    1352 
    1353 
    13541297_llint_op_get_array_length:
    13551298    traceExecution()
  • trunk/Source/JavaScriptCore/runtime/Identifier.h

    r202627 r202633  
    8888class Identifier {
    8989    friend class Structure;
    90     friend class LLIntOffsetsExtractor;
    9190public:
    9291    Identifier() { }
Note: See TracChangeset for help on using the changeset viewer.