Ignore:
Timestamp:
Jun 13, 2012, 2:38:42 AM (13 years ago)
Author:
[email protected]
Message:

Unreviewed, rolling out r120172.
http://trac.webkit.org/changeset/120172
https://bugs.webkit.org/show_bug.cgi?id=88976

The patch causes compilation failures on Gtk, Qt and Apple Win
bots (Requested by zdobersek on #webkit).

Patch by Sheriff Bot <[email protected]> on 2012-06-13

Source/JavaScriptCore:

  • CMakeLists.txt:
  • GNUmakefile.list.am:
  • JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
  • JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
  • JavaScriptCore.xcodeproj/project.pbxproj:
  • Target.pri:
  • assembler/ARMv7Assembler.h:

(JSC::ARMv7Assembler::nop):
(JSC::ARMv7Assembler::label):
(JSC::ARMv7Assembler::readPointer):
(ARMv7Assembler):

  • assembler/AbstractMacroAssembler.h:

(JSC):
(AbstractMacroAssembler):
(Label):

  • assembler/AssemblerBuffer.h:
  • assembler/MacroAssemblerARM.h:
  • assembler/MacroAssemblerARMv7.h:

(JSC::MacroAssemblerARMv7::nop):
(JSC::MacroAssemblerARMv7::jump):
(JSC::MacroAssemblerARMv7::makeBranch):

  • assembler/MacroAssemblerMIPS.h:
  • assembler/MacroAssemblerSH4.h:
  • assembler/MacroAssemblerX86.h:

(MacroAssemblerX86):
(JSC::MacroAssemblerX86::moveWithPatch):

  • assembler/MacroAssemblerX86Common.h:
  • assembler/MacroAssemblerX86_64.h:

(JSC::MacroAssemblerX86_64::branchTest8):

  • assembler/X86Assembler.h:

(JSC::X86Assembler::cmpb_im):
(JSC::X86Assembler::codeSize):
(JSC::X86Assembler::label):
(JSC::X86Assembler::X86InstructionFormatter::memoryModRM):

  • bytecode/CodeBlock.cpp:

(JSC::CodeBlock::dump):

  • bytecode/CodeBlock.h:

(JSC::CodeBlock::appendOSRExit):
(JSC::CodeBlock::appendSpeculationRecovery):
(DFGData):

  • bytecode/DFGExitProfile.h:

(JSC::DFG::exitKindToString):
(JSC::DFG::exitKindIsCountable):

  • bytecode/Instruction.h:
  • bytecode/Opcode.h:

(JSC):
(JSC::padOpcodeName):

  • bytecode/Watchpoint.cpp: Removed.
  • bytecode/Watchpoint.h: Removed.
  • bytecompiler/BytecodeGenerator.cpp:

(JSC::ResolveResult::checkValidity):
(JSC::BytecodeGenerator::addGlobalVar):
(JSC::BytecodeGenerator::BytecodeGenerator):
(JSC::BytecodeGenerator::resolve):
(JSC::BytecodeGenerator::emitResolve):
(JSC::BytecodeGenerator::emitResolveWithBase):
(JSC::BytecodeGenerator::emitResolveWithThis):
(JSC::BytecodeGenerator::emitGetStaticVar):
(JSC::BytecodeGenerator::emitPutStaticVar):

  • bytecompiler/BytecodeGenerator.h:

(BytecodeGenerator):

  • bytecompiler/NodesCodegen.cpp:

(JSC::FunctionCallResolveNode::emitBytecode):
(JSC::PostfixResolveNode::emitBytecode):
(JSC::PrefixResolveNode::emitBytecode):
(JSC::ReadModifyResolveNode::emitBytecode):
(JSC::AssignResolveNode::emitBytecode):
(JSC::ConstDeclNode::emitCodeSingle):

  • dfg/DFGAbstractState.cpp:

(JSC::DFG::AbstractState::execute):
(JSC::DFG::AbstractState::clobberStructures):

  • dfg/DFGAbstractState.h:

(AbstractState):

  • dfg/DFGByteCodeParser.cpp:

(JSC::DFG::ByteCodeParser::handleInlining):
(JSC::DFG::ByteCodeParser::parseBlock):

  • dfg/DFGCCallHelpers.h:

(JSC::DFG::CCallHelpers::setupArguments):

  • dfg/DFGCSEPhase.cpp:

(JSC::DFG::CSEPhase::globalVarStoreElimination):
(JSC::DFG::CSEPhase::performNodeCSE):

  • dfg/DFGCapabilities.h:

(JSC::DFG::canCompileOpcode):

  • dfg/DFGConstantFoldingPhase.cpp:

(JSC::DFG::ConstantFoldingPhase::run):

  • dfg/DFGCorrectableJumpPoint.h:
  • dfg/DFGJITCompiler.cpp:

(JSC::DFG::JITCompiler::linkOSRExits):
(JSC::DFG::JITCompiler::link):

  • dfg/DFGNode.h:

(JSC::DFG::Node::hasRegisterPointer):

  • dfg/DFGNodeType.h:

(DFG):

  • dfg/DFGOSRExit.cpp:

(JSC::DFG::OSRExit::OSRExit):

  • dfg/DFGOSRExit.h:

(OSRExit):

  • dfg/DFGOperations.cpp:
  • dfg/DFGOperations.h:
  • dfg/DFGPredictionPropagationPhase.cpp:

(JSC::DFG::PredictionPropagationPhase::propagate):

  • dfg/DFGSpeculativeJIT.h:

(JSC::DFG::SpeculativeJIT::callOperation):
(JSC::DFG::SpeculativeJIT::appendCallSetResult):
(JSC::DFG::SpeculativeJIT::speculationCheck):

  • dfg/DFGSpeculativeJIT32_64.cpp:

(JSC::DFG::SpeculativeJIT::compile):

  • dfg/DFGSpeculativeJIT64.cpp:

(JSC::DFG::SpeculativeJIT::compile):

  • jit/JIT.cpp:

(JSC::JIT::privateCompileMainPass):
(JSC::JIT::privateCompileSlowCases):

  • jit/JIT.h:
  • jit/JITPropertyAccess.cpp:
  • jit/JITPropertyAccess32_64.cpp:
  • jit/JITStubs.cpp:
  • jit/JITStubs.h:
  • llint/LLIntSlowPaths.cpp:
  • llint/LLIntSlowPaths.h:

(LLInt):

  • llint/LowLevelInterpreter32_64.asm:
  • llint/LowLevelInterpreter64.asm:
  • runtime/JSObject.cpp:

(JSC::JSObject::removeDirect):

  • runtime/JSObject.h:

(JSObject):

  • runtime/JSSymbolTableObject.h:

(JSC::symbolTableGet):
(JSC::symbolTablePut):
(JSC::symbolTablePutWithAttributes):

  • runtime/SymbolTable.cpp: Removed.
  • runtime/SymbolTable.h:

(JSC):
(JSC::SymbolTableEntry::isNull):
(JSC::SymbolTableEntry::getIndex):
(SymbolTableEntry):
(JSC::SymbolTableEntry::getAttributes):
(JSC::SymbolTableEntry::isReadOnly):
(JSC::SymbolTableEntry::pack):
(JSC::SymbolTableEntry::isValidIndex):

Source/WTF:

  • wtf/SegmentedVector.h:

(WTF):
(SegmentedVectorIterator):
(WTF::SegmentedVectorIterator::operator=):
(WTF::SegmentedVectorIterator::SegmentedVectorIterator):
(SegmentedVector):

LayoutTests:

  • fast/js/dfg-call-function-hit-watchpoint-expected.txt: Removed.
  • fast/js/dfg-call-function-hit-watchpoint.html: Removed.
  • fast/js/jsc-test-list:
  • fast/js/script-tests/dfg-call-function-hit-watchpoint.js: Removed.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp

    r120172 r120175  
    12351235    // an inline candidate?
    12361236    CodeBlock* profiledBlock = executable->profiledCodeBlockFor(kind);
    1237     if (!profiledBlock)
    1238         return false;
    1239    
    12401237    if (!mightInlineFunctionFor(profiledBlock, kind))
    12411238        return false;
     
    22552252            SpeculatedType prediction = getPrediction();
    22562253           
    2257             JSGlobalObject* globalObject = m_inlineStackTop->m_codeBlock->globalObject();
    2258 
    22592254            NodeIndex getGlobalVar = addToGraph(
    22602255                GetGlobalVar,
    2261                 OpInfo(globalObject->assertRegisterIsInThisObject(currentInstruction[2].u.registerPointer)),
     2256                OpInfo(m_inlineStackTop->m_codeBlock->globalObject()->assertRegisterIsInThisObject(currentInstruction[2].u.registerPointer)),
    22622257                OpInfo(prediction));
    22632258            set(currentInstruction[1].u.operand, getGlobalVar);
    22642259            NEXT_OPCODE(op_get_global_var);
    2265         }
    2266                    
    2267         case op_get_global_var_watchable: {
    2268             SpeculatedType prediction = getPrediction();
    2269            
    2270             JSGlobalObject* globalObject = m_inlineStackTop->m_codeBlock->globalObject();
    2271            
    2272             unsigned identifierNumber = m_inlineStackTop->m_identifierRemap[currentInstruction[3].u.operand];
    2273             Identifier identifier = m_codeBlock->identifier(identifierNumber);
    2274             SymbolTableEntry entry = globalObject->symbolTable().get(identifier.impl());
    2275             if (!entry.couldBeWatched()) {
    2276                 NodeIndex getGlobalVar = addToGraph(
    2277                     GetGlobalVar,
    2278                     OpInfo(globalObject->assertRegisterIsInThisObject(currentInstruction[2].u.registerPointer)),
    2279                     OpInfo(prediction));
    2280                 set(currentInstruction[1].u.operand, getGlobalVar);
    2281                 NEXT_OPCODE(op_get_global_var_watchable);
    2282             }
    2283            
    2284             // The watchpoint is still intact! This means that we will get notified if the
    2285             // current value in the global variable changes. So, we can inline that value.
    2286             // Moreover, currently we can assume that this value is a JSFunction*, which
    2287             // implies that it's a cell. This simplifies things, since in general we'd have
    2288             // to use a JSConstant for non-cells and a WeakJSConstant for cells. So instead
    2289             // of having both cases we just assert that the value is a cell.
    2290            
    2291             // NB. If it wasn't for CSE, GlobalVarWatchpoint would have no need for the
    2292             // register pointer. But CSE tracks effects on global variables by comparing
    2293             // register pointers. Because CSE executes multiple times while the backend
    2294             // executes once, we use the following performance trade-off:
    2295             // - The node refers directly to the register pointer to make CSE super cheap.
    2296             // - To perform backend code generation, the node only contains the identifier
    2297             //   number, from which it is possible to get (via a few average-time O(1)
    2298             //   lookups) to the WatchpointSet.
    2299            
    2300             addToGraph(
    2301                 GlobalVarWatchpoint,
    2302                 OpInfo(globalObject->assertRegisterIsInThisObject(currentInstruction[2].u.registerPointer)),
    2303                 OpInfo(identifierNumber));
    2304            
    2305             JSValue specificValue = globalObject->registerAt(entry.getIndex()).get();
    2306             ASSERT(specificValue.isCell());
    2307             set(currentInstruction[1].u.operand,
    2308                 addToGraph(WeakJSConstant, OpInfo(specificValue.asCell())));
    2309            
    2310             NEXT_OPCODE(op_get_global_var_watchable);
    23112260        }
    23122261
     
    23182267                value);
    23192268            NEXT_OPCODE(op_put_global_var);
    2320         }
    2321 
    2322         case op_put_global_var_check: {
    2323             NodeIndex value = get(currentInstruction[2].u.operand);
    2324             CodeBlock* codeBlock = m_inlineStackTop->m_codeBlock;
    2325             JSGlobalObject* globalObject = codeBlock->globalObject();
    2326             unsigned identifierNumber = m_inlineStackTop->m_identifierRemap[currentInstruction[4].u.operand];
    2327             Identifier identifier = m_codeBlock->identifier(identifierNumber);
    2328             SymbolTableEntry entry = globalObject->symbolTable().get(identifier.impl());
    2329             if (!entry.couldBeWatched()) {
    2330                 addToGraph(
    2331                     PutGlobalVar,
    2332                     OpInfo(globalObject->assertRegisterIsInThisObject(currentInstruction[1].u.registerPointer)),
    2333                     value);
    2334                 NEXT_OPCODE(op_put_global_var_check);
    2335             }
    2336             addToGraph(
    2337                 PutGlobalVarCheck,
    2338                 OpInfo(codeBlock->globalObject()->assertRegisterIsInThisObject(currentInstruction[1].u.registerPointer)),
    2339                 OpInfo(identifierNumber),
    2340                 value);
    2341             NEXT_OPCODE(op_put_global_var_check);
    23422269        }
    23432270
Note: See TracChangeset for help on using the changeset viewer.