source: webkit/trunk/Source/JavaScriptCore/DerivedSources.make@ 148849

Last change on this file since 148849 was 146089, checked in by [email protected], 12 years ago

DFG string conversions and allocations should be inlined
https://bugs.webkit.org/show_bug.cgi?id=112376

Source/JavaScriptCore:

Reviewed by Geoffrey Garen.

This turns new String(), String(), String.prototype.valueOf(), and
String.prototype.toString() into intrinsics. It gives the DFG the ability to handle
conversions from StringObject to JSString and vice-versa, and also gives it the
ability to handle cases where a variable may be either a StringObject or a JSString.
To do this, I added StringObject to value profiling (and removed the stale
distinction between Myarguments and Foreignarguments). I also cleaned up ToPrimitive
handling, using some of the new functionality but also taking advantage of the
existence of Identity(String:@a).

This is a 2% SunSpider speed-up. Also there are some speed-ups on V8v7 and Kraken.
On microbenchmarks that stress new String() this is a 14x speed-up.

  • CMakeLists.txt:
  • DerivedSources.make:
  • DerivedSources.pri:
  • GNUmakefile.list.am:
  • bytecode/CodeBlock.h:

(CodeBlock):
(JSC::CodeBlock::hasExitSite):
(JSC):

  • bytecode/DFGExitProfile.cpp:

(JSC::DFG::ExitProfile::hasExitSite):
(DFG):

  • bytecode/DFGExitProfile.h:

(ExitProfile):
(JSC::DFG::ExitProfile::hasExitSite):

  • bytecode/ExitKind.cpp:

(JSC::exitKindToString):

  • bytecode/ExitKind.h:
  • bytecode/SpeculatedType.cpp:

(JSC::dumpSpeculation):
(JSC::speculationToAbbreviatedString):
(JSC::speculationFromClassInfo):

  • bytecode/SpeculatedType.h:

(JSC):
(JSC::isStringObjectSpeculation):
(JSC::isStringOrStringObjectSpeculation):

  • create_hash_table:
  • dfg/DFGAbstractState.cpp:

(JSC::DFG::AbstractState::executeEffects):

  • dfg/DFGAbstractState.h:

(JSC::DFG::AbstractState::filterEdgeByUse):

  • dfg/DFGByteCodeParser.cpp:

(ByteCodeParser):
(JSC::DFG::ByteCodeParser::handleCall):
(JSC::DFG::ByteCodeParser::emitArgumentPhantoms):
(DFG):
(JSC::DFG::ByteCodeParser::handleConstantInternalFunction):

  • dfg/DFGCSEPhase.cpp:

(JSC::DFG::CSEPhase::putStructureStoreElimination):

  • dfg/DFGEdge.h:

(JSC::DFG::Edge::shift):

  • dfg/DFGFixupPhase.cpp:

(JSC::DFG::FixupPhase::fixupNode):
(JSC::DFG::FixupPhase::isStringPrototypeMethodSane):
(FixupPhase):
(JSC::DFG::FixupPhase::canOptimizeStringObjectAccess):
(JSC::DFG::FixupPhase::observeUseKindOnNode):

  • dfg/DFGGraph.h:

(JSC::DFG::Graph::hasGlobalExitSite):
(Graph):
(JSC::DFG::Graph::hasExitSite):
(JSC::DFG::Graph::clobbersWorld):

  • dfg/DFGNode.h:

(JSC::DFG::Node::convertToToString):
(Node):
(JSC::DFG::Node::hasStructure):
(JSC::DFG::Node::shouldSpeculateStringObject):
(JSC::DFG::Node::shouldSpeculateStringOrStringObject):

  • dfg/DFGNodeType.h:

(DFG):

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

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

  • dfg/DFGSpeculativeJIT.cpp:

(JSC::DFG::SpeculativeJIT::compileToStringOnCell):
(DFG):
(JSC::DFG::SpeculativeJIT::compileNewStringObject):
(JSC::DFG::SpeculativeJIT::speculateObject):
(JSC::DFG::SpeculativeJIT::speculateObjectOrOther):
(JSC::DFG::SpeculativeJIT::speculateString):
(JSC::DFG::SpeculativeJIT::speculateStringObject):
(JSC::DFG::SpeculativeJIT::speculateStringOrStringObject):
(JSC::DFG::SpeculativeJIT::speculate):

  • dfg/DFGSpeculativeJIT.h:

(JSC::DFG::SpeculativeJIT::callOperation):
(SpeculativeJIT):
(JSC::DFG::SpeculateCellOperand::SpeculateCellOperand):
(DFG):
(JSC::DFG::SpeculativeJIT::speculateStringObjectForStructure):

  • dfg/DFGSpeculativeJIT32_64.cpp:

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

  • dfg/DFGSpeculativeJIT64.cpp:

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

  • dfg/DFGUseKind.cpp:

(WTF::printInternal):

  • dfg/DFGUseKind.h:

(JSC::DFG::typeFilterFor):

  • interpreter/CallFrame.h:

(JSC::ExecState::regExpPrototypeTable):

  • runtime/CommonIdentifiers.h:
  • runtime/Intrinsic.h:
  • runtime/JSDestructibleObject.h:

(JSDestructibleObject):
(JSC::JSDestructibleObject::classInfoOffset):

  • runtime/JSGlobalData.cpp:

(JSC):
(JSC::JSGlobalData::JSGlobalData):
(JSC::JSGlobalData::~JSGlobalData):

  • runtime/JSGlobalData.h:

(JSGlobalData):

  • runtime/JSObject.cpp:
  • runtime/JSObject.h:

(JSC):

  • runtime/JSWrapperObject.h:

(JSC::JSWrapperObject::allocationSize):
(JSWrapperObject):
(JSC::JSWrapperObject::internalValueOffset):
(JSC::JSWrapperObject::internalValueCellOffset):

  • runtime/StringPrototype.cpp:

(JSC):
(JSC::StringPrototype::finishCreation):
(JSC::StringPrototype::create):

  • runtime/StringPrototype.h:

(StringPrototype):

LayoutTests:

Reviewed by Geoffrey Garen.

  • fast/js/dfg-to-string-bad-toString-expected.txt: Added.
  • fast/js/dfg-to-string-bad-toString.html: Added.
  • fast/js/dfg-to-string-bad-valueOf-expected.txt: Added.
  • fast/js/dfg-to-string-bad-valueOf.html: Added.
  • fast/js/dfg-to-string-int-expected.txt: Added.
  • fast/js/dfg-to-string-int-or-string-expected.txt: Added.
  • fast/js/dfg-to-string-int-or-string.html: Added.
  • fast/js/dfg-to-string-int.html: Added.
  • fast/js/dfg-to-string-side-effect-clobbers-toString-expected.txt: Added.
  • fast/js/dfg-to-string-side-effect-clobbers-toString.html: Added.
  • fast/js/dfg-to-string-side-effect-expected.txt: Added.
  • fast/js/dfg-to-string-side-effect.html: Added.
  • fast/js/dfg-to-string-toString-becomes-bad-expected.txt: Added.
  • fast/js/dfg-to-string-toString-becomes-bad-with-dictionary-string-prototype-expected.txt: Added.
  • fast/js/dfg-to-string-toString-becomes-bad-with-dictionary-string-prototype.html: Added.
  • fast/js/dfg-to-string-toString-becomes-bad.html: Added.
  • fast/js/dfg-to-string-toString-in-string-expected.txt: Added.
  • fast/js/dfg-to-string-toString-in-string.html: Added.
  • fast/js/dfg-to-string-valueOf-becomes-bad-expected.txt: Added.
  • fast/js/dfg-to-string-valueOf-becomes-bad.html: Added.
  • fast/js/dfg-to-string-valueOf-in-string-expected.txt: Added.
  • fast/js/dfg-to-string-valueOf-in-string.html: Added.
  • fast/js/jsc-test-list:
  • fast/js/regress/script-tests/string-concat-object.js: Added.

(foo):

  • fast/js/regress/script-tests/string-concat-pair-object.js: Added.

(foo):

  • fast/js/regress/script-tests/string-concat-pair-simple.js: Added.

(foo):

  • fast/js/regress/script-tests/string-concat-simple.js: Added.

(foo):

  • fast/js/regress/script-tests/string-cons-repeat.js: Added.

(foo):

  • fast/js/regress/script-tests/string-cons-tower.js: Added.

(foo):

  • fast/js/regress/string-concat-object-expected.txt: Added.
  • fast/js/regress/string-concat-object.html: Added.
  • fast/js/regress/string-concat-pair-object-expected.txt: Added.
  • fast/js/regress/string-concat-pair-object.html: Added.
  • fast/js/regress/string-concat-pair-simple-expected.txt: Added.
  • fast/js/regress/string-concat-pair-simple.html: Added.
  • fast/js/regress/string-concat-simple-expected.txt: Added.
  • fast/js/regress/string-concat-simple.html: Added.
  • fast/js/regress/string-cons-repeat-expected.txt: Added.
  • fast/js/regress/string-cons-repeat.html: Added.
  • fast/js/regress/string-cons-tower-expected.txt: Added.
  • fast/js/regress/string-cons-tower.html: Added.
  • fast/js/script-tests/dfg-to-string-bad-toString.js: Added.

(String.prototype.toString):
(foo):

  • fast/js/script-tests/dfg-to-string-bad-valueOf.js: Added.

(String.prototype.valueOf):
(foo):

  • fast/js/script-tests/dfg-to-string-int-or-string.js: Added.

(foo):

  • fast/js/script-tests/dfg-to-string-int.js: Added.

(foo):

  • fast/js/script-tests/dfg-to-string-side-effect-clobbers-toString.js: Added.

(foo):

  • fast/js/script-tests/dfg-to-string-side-effect.js: Added.

(foo):

  • fast/js/script-tests/dfg-to-string-toString-becomes-bad-with-dictionary-string-prototype.js: Added.

(foo):
(.String.prototype.toString):

  • fast/js/script-tests/dfg-to-string-toString-becomes-bad.js: Added.

(foo):
(.String.prototype.toString):

  • fast/js/script-tests/dfg-to-string-toString-in-string.js: Added.

(foo):
(.argument.toString):

  • fast/js/script-tests/dfg-to-string-valueOf-becomes-bad.js: Added.

(foo):
(.String.prototype.valueOf):

  • fast/js/script-tests/dfg-to-string-valueOf-in-string.js: Added.

(foo):
(.argument.valueOf):

  • Property svn:eol-style set to native
File size: 3.0 KB
Line 
1# Copyright (C) 2006, 2007, 2008, 2009, 2011, 2013 Apple Inc. All rights reserved.
2#
3# Redistribution and use in source and binary forms, with or without
4# modification, are permitted provided that the following conditions
5# are met:
6#
7# 1. Redistributions of source code must retain the above copyright
8# notice, this list of conditions and the following disclaimer.
9# 2. Redistributions in binary form must reproduce the above copyright
10# notice, this list of conditions and the following disclaimer in the
11# documentation and/or other materials provided with the distribution.
12# 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
13# its contributors may be used to endorse or promote products derived
14# from this software without specific prior written permission.
15#
16# THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
17# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19# DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
20# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
27VPATH = \
28 $(JavaScriptCore) \
29 $(JavaScriptCore)/parser \
30 $(JavaScriptCore)/docs \
31 $(JavaScriptCore)/runtime \
32 $(JavaScriptCore)/interpreter \
33 $(JavaScriptCore)/jit \
34#
35
36.PHONY : all
37all : \
38 ArrayConstructor.lut.h \
39 ArrayPrototype.lut.h \
40 BooleanPrototype.lut.h \
41 DateConstructor.lut.h \
42 DatePrototype.lut.h \
43 ErrorPrototype.lut.h \
44 JSONObject.lut.h \
45 JSGlobalObject.lut.h \
46 KeywordLookup.h \
47 Lexer.lut.h \
48 MathObject.lut.h \
49 NamePrototype.lut.h \
50 NumberConstructor.lut.h \
51 NumberPrototype.lut.h \
52 ObjectConstructor.lut.h \
53 RegExpConstructor.lut.h \
54 RegExpPrototype.lut.h \
55 RegExpJitTables.h \
56 RegExpObject.lut.h \
57 StringConstructor.lut.h \
58 docs/bytecode.html \
59 udis86_itab.h \
60#
61
62# lookup tables for classes
63
64%.lut.h: create_hash_table %.cpp
65 $^ -i > $@
66Lexer.lut.h: create_hash_table Keywords.table
67 $^ > $@
68
69docs/bytecode.html: make-bytecode-docs.pl Interpreter.cpp
70 perl $^ $@
71
72# character tables for Yarr
73
74RegExpJitTables.h: create_regex_tables
75 python $^ > $@
76
77KeywordLookup.h: KeywordLookupGenerator.py Keywords.table
78 python $^ > $@
79
80# udis86 instruction tables
81
82udis86_itab.h: $(JavaScriptCore)/disassembler/udis86/itab.py $(JavaScriptCore)/disassembler/udis86/optable.xml
83 (PYTHONPATH=$(JavaScriptCore)/disassembler/udis86 python $(JavaScriptCore)/disassembler/udis86/itab.py $(JavaScriptCore)/disassembler/udis86/optable.xml || exit 1)
Note: See TracBrowser for help on using the repository browser.