Skip to content

Commit d093a55

Browse files
author
Filip Pizlo
committed
Inserting a node with a codeOrigin "like" another node should copy both the codeOrigin and codeOriginForExitTarget
https://bugs.webkit.org/show_bug.cgi?id=128635 Reviewed by Michael Saboff. Originally nodes just had a codeOrigin. But then we started doing code motion, and we needed to separate the codeOrigin that designated where to exit from the codeOrigin that designated everything else. The "everything else" is actually pretty important: it includes profiling, exception handling, and the actual semantics of the node. For example some nodes use the origin's global object in some way. This all sort of worked except for one quirk: the facilities for creating nodes all assumed that there really was only one origin. LICM would work around this by setting the codeOriginForExitTarget manually. But, that means that: - If we did hoist a node twice, then the second time around, we would forget the node's original exit target. - If we did an insertNode() to insert a node before a hoisted node, the inserted node would have the wrong exit target. Most of the time, if we copy the code origin, we actually want to copy both origins. So, this patch introduces the notion of a NodeOrigin which has two CodeOrigins: a forExit code origin that says where to exit, and a semantic code origin for everything else. This also (annoyingly?) means that we are always more explicit about which code origin we refer to. That means that a lot of "node->codeOrigin" expressions had to change to "node->origin.semantic". This was partly a ploy on my part to ensure that this refactoring was complete: to get the code to compile I really had to audit all uses of CodeOrigin. If, in the future, we find that "node->origin.semantic" is too cumbersome then we can reintroduce the Node::codeOrigin field. For now I kinda like it though. * GNUmakefile.list.am: * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj: * JavaScriptCore.xcodeproj/project.pbxproj: * dfg/DFGAbstractInterpreterInlines.h: (JSC::DFG::AbstractInterpreter<AbstractStateType>::booleanResult): (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): * dfg/DFGArgumentsSimplificationPhase.cpp: (JSC::DFG::ArgumentsSimplificationPhase::run): (JSC::DFG::ArgumentsSimplificationPhase::observeBadArgumentsUse): (JSC::DFG::ArgumentsSimplificationPhase::observeProperArgumentsUse): (JSC::DFG::ArgumentsSimplificationPhase::isOKToOptimize): * dfg/DFGArrayMode.cpp: (JSC::DFG::ArrayMode::originalArrayStructure): (JSC::DFG::ArrayMode::alreadyChecked): * dfg/DFGByteCodeParser.cpp: (JSC::DFG::ByteCodeParser::addToGraph): * dfg/DFGCFGSimplificationPhase.cpp: (JSC::DFG::CFGSimplificationPhase::run): (JSC::DFG::CFGSimplificationPhase::convertToJump): (JSC::DFG::CFGSimplificationPhase::keepOperandAlive): (JSC::DFG::CFGSimplificationPhase::jettisonBlock): (JSC::DFG::CFGSimplificationPhase::mergeBlocks): * dfg/DFGCPSRethreadingPhase.cpp: (JSC::DFG::CPSRethreadingPhase::addPhiSilently): (JSC::DFG::CPSRethreadingPhase::addPhi): (JSC::DFG::CPSRethreadingPhase::canonicalizeGetLocalFor): (JSC::DFG::CPSRethreadingPhase::canonicalizeFlushOrPhantomLocalFor): (JSC::DFG::CPSRethreadingPhase::propagatePhis): * dfg/DFGCSEPhase.cpp: (JSC::DFG::CSEPhase::setLocalStoreElimination): * dfg/DFGClobberize.h: (JSC::DFG::clobberize): * dfg/DFGCommonData.cpp: (JSC::DFG::CommonData::notifyCompilingStructureTransition): * dfg/DFGConstantFoldingPhase.cpp: (JSC::DFG::ConstantFoldingPhase::foldConstants): (JSC::DFG::ConstantFoldingPhase::addStructureTransitionCheck): * dfg/DFGCriticalEdgeBreakingPhase.cpp: (JSC::DFG::CriticalEdgeBreakingPhase::breakCriticalEdge): * dfg/DFGDCEPhase.cpp: (JSC::DFG::DCEPhase::fixupBlock): * dfg/DFGDisassembler.cpp: (JSC::DFG::Disassembler::createDumpList): * dfg/DFGFixupPhase.cpp: (JSC::DFG::FixupPhase::fixupNode): (JSC::DFG::FixupPhase::createToString): (JSC::DFG::FixupPhase::attemptToForceStringArrayModeByToStringConversion): (JSC::DFG::FixupPhase::convertStringAddUse): (JSC::DFG::FixupPhase::fixupToPrimitive): (JSC::DFG::FixupPhase::fixupToString): (JSC::DFG::FixupPhase::attemptToMakeFastStringAdd): (JSC::DFG::FixupPhase::checkArray): (JSC::DFG::FixupPhase::blessArrayOperation): (JSC::DFG::FixupPhase::fixEdge): (JSC::DFG::FixupPhase::insertStoreBarrier): (JSC::DFG::FixupPhase::fixIntEdge): (JSC::DFG::FixupPhase::injectInt32ToDoubleNode): (JSC::DFG::FixupPhase::truncateConstantToInt32): (JSC::DFG::FixupPhase::attemptToMakeGetArrayLength): (JSC::DFG::FixupPhase::attemptToMakeGetTypedArrayByteLength): (JSC::DFG::FixupPhase::convertToGetArrayLength): (JSC::DFG::FixupPhase::prependGetArrayLength): (JSC::DFG::FixupPhase::attemptToMakeGetTypedArrayByteOffset): (JSC::DFG::FixupPhase::addPhantomsIfNecessary): * dfg/DFGGraph.cpp: (JSC::DFG::Graph::dumpCodeOrigin): (JSC::DFG::Graph::amountOfNodeWhiteSpace): (JSC::DFG::Graph::dump): (JSC::DFG::Graph::dumpBlockHeader): * dfg/DFGGraph.h: (JSC::DFG::Graph::hasExitSite): (JSC::DFG::Graph::valueProfileFor): (JSC::DFG::Graph::methodOfGettingAValueProfileFor): * dfg/DFGInvalidationPointInjectionPhase.cpp: (JSC::DFG::InvalidationPointInjectionPhase::handle): (JSC::DFG::InvalidationPointInjectionPhase::insertInvalidationCheck): * dfg/DFGLICMPhase.cpp: (JSC::DFG::LICMPhase::attemptHoist): * dfg/DFGLoopPreHeaderCreationPhase.cpp: (JSC::DFG::createPreHeader): * dfg/DFGNode.h: (JSC::DFG::Node::Node): (JSC::DFG::Node::isStronglyProvedConstantIn): * dfg/DFGNodeOrigin.h: Added. (JSC::DFG::NodeOrigin::NodeOrigin): (JSC::DFG::NodeOrigin::isSet): * dfg/DFGOSREntrypointCreationPhase.cpp: (JSC::DFG::OSREntrypointCreationPhase::run): * dfg/DFGResurrectionForValidationPhase.cpp: (JSC::DFG::ResurrectionForValidationPhase::run): * dfg/DFGSSAConversionPhase.cpp: (JSC::DFG::SSAConversionPhase::run): * dfg/DFGSSALoweringPhase.cpp: (JSC::DFG::SSALoweringPhase::handleNode): (JSC::DFG::SSALoweringPhase::lowerBoundsCheck): * dfg/DFGSpeculativeJIT.cpp: (JSC::DFG::SpeculativeJIT::compileIn): (JSC::DFG::SpeculativeJIT::compileCurrentBlock): (JSC::DFG::SpeculativeJIT::compileGetByValOnString): (JSC::DFG::SpeculativeJIT::compileNewTypedArray): * dfg/DFGSpeculativeJIT.h: (JSC::DFG::SpeculativeJIT::masqueradesAsUndefinedWatchpointIsStillValid): (JSC::DFG::SpeculativeJIT::appendCallWithExceptionCheck): (JSC::DFG::SpeculativeJIT::appendCallWithCallFrameRollbackOnException): (JSC::DFG::SpeculativeJIT::appendCallSetResult): (JSC::DFG::SpeculativeJIT::appendCall): (JSC::DFG::SpeculativeJIT::speculateStringObjectForStructure): * dfg/DFGSpeculativeJIT32_64.cpp: (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNull): (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull): (JSC::DFG::SpeculativeJIT::emitCall): (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot): (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch): (JSC::DFG::SpeculativeJIT::compile): * dfg/DFGSpeculativeJIT64.cpp: (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNull): (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull): (JSC::DFG::SpeculativeJIT::emitCall): (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot): (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch): (JSC::DFG::SpeculativeJIT::compile): * dfg/DFGStrengthReductionPhase.cpp: (JSC::DFG::StrengthReductionPhase::convertToIdentityOverChild): (JSC::DFG::StrengthReductionPhase::prepareToFoldTypedArray): * dfg/DFGTierUpCheckInjectionPhase.cpp: (JSC::DFG::TierUpCheckInjectionPhase::run): * dfg/DFGTypeCheckHoistingPhase.cpp: (JSC::DFG::TypeCheckHoistingPhase::run): * dfg/DFGValidate.cpp: (JSC::DFG::Validate::validateSSA): * dfg/DFGWatchpointCollectionPhase.cpp: (JSC::DFG::WatchpointCollectionPhase::handle): (JSC::DFG::WatchpointCollectionPhase::handleEdge): (JSC::DFG::WatchpointCollectionPhase::handleMasqueradesAsUndefined): (JSC::DFG::WatchpointCollectionPhase::globalObject): * ftl/FTLJSCall.cpp: (JSC::FTL::JSCall::link): * ftl/FTLLink.cpp: (JSC::FTL::link): * ftl/FTLLowerDFGToLLVM.cpp: (JSC::FTL::LowerDFGToLLVM::compileNode): (JSC::FTL::LowerDFGToLLVM::compileToThis): (JSC::FTL::LowerDFGToLLVM::compilePutById): (JSC::FTL::LowerDFGToLLVM::compilePutByVal): (JSC::FTL::LowerDFGToLLVM::compileNewArray): (JSC::FTL::LowerDFGToLLVM::compileNewArrayBuffer): (JSC::FTL::LowerDFGToLLVM::compileNewArrayWithSize): (JSC::FTL::LowerDFGToLLVM::compileStringCharAt): (JSC::FTL::LowerDFGToLLVM::compileGetMyScope): (JSC::FTL::LowerDFGToLLVM::compileCheckArgumentsNotCreated): (JSC::FTL::LowerDFGToLLVM::getById): (JSC::FTL::LowerDFGToLLVM::equalNullOrUndefined): (JSC::FTL::LowerDFGToLLVM::speculateStringObjectForStructure): (JSC::FTL::LowerDFGToLLVM::masqueradesAsUndefinedWatchpointIsStillValid): (JSC::FTL::LowerDFGToLLVM::callPreflight): Canonical link: https://commits.webkit.org/146691@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@163946 268f45cc-cd09-0410-ab3c-d52691b4dbfc
1 parent 8d6c2c2 commit d093a55

41 files changed

Lines changed: 703 additions & 439 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎Source/JavaScriptCore/ChangeLog‎

Lines changed: 191 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,194 @@
1+
2014-02-11 Filip Pizlo <fpizlo@apple.com>
2+
3+
Inserting a node with a codeOrigin "like" another node should copy both the codeOrigin and codeOriginForExitTarget
4+
https://bugs.webkit.org/show_bug.cgi?id=128635
5+
6+
Reviewed by Michael Saboff.
7+
8+
Originally nodes just had a codeOrigin. But then we started doing code motion, and we
9+
needed to separate the codeOrigin that designated where to exit from the codeOrigin
10+
that designated everything else. The "everything else" is actually pretty important:
11+
it includes profiling, exception handling, and the actual semantics of the node. For
12+
example some nodes use the origin's global object in some way.
13+
14+
This all sort of worked except for one quirk: the facilities for creating nodes all
15+
assumed that there really was only one origin. LICM would work around this by setting
16+
the codeOriginForExitTarget manually. But, that means that:
17+
18+
- If we did hoist a node twice, then the second time around, we would forget the node's
19+
original exit target.
20+
21+
- If we did an insertNode() to insert a node before a hoisted node, the inserted node
22+
would have the wrong exit target.
23+
24+
Most of the time, if we copy the code origin, we actually want to copy both origins.
25+
So, this patch introduces the notion of a NodeOrigin which has two CodeOrigins: a
26+
forExit code origin that says where to exit, and a semantic code origin for everything
27+
else.
28+
29+
This also (annoyingly?) means that we are always more explicit about which code origin
30+
we refer to. That means that a lot of "node->codeOrigin" expressions had to change to
31+
"node->origin.semantic". This was partly a ploy on my part to ensure that this
32+
refactoring was complete: to get the code to compile I really had to audit all uses of
33+
CodeOrigin. If, in the future, we find that "node->origin.semantic" is too cumbersome
34+
then we can reintroduce the Node::codeOrigin field. For now I kinda like it though.
35+
36+
* GNUmakefile.list.am:
37+
* JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
38+
* JavaScriptCore.xcodeproj/project.pbxproj:
39+
* dfg/DFGAbstractInterpreterInlines.h:
40+
(JSC::DFG::AbstractInterpreter<AbstractStateType>::booleanResult):
41+
(JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
42+
* dfg/DFGArgumentsSimplificationPhase.cpp:
43+
(JSC::DFG::ArgumentsSimplificationPhase::run):
44+
(JSC::DFG::ArgumentsSimplificationPhase::observeBadArgumentsUse):
45+
(JSC::DFG::ArgumentsSimplificationPhase::observeProperArgumentsUse):
46+
(JSC::DFG::ArgumentsSimplificationPhase::isOKToOptimize):
47+
* dfg/DFGArrayMode.cpp:
48+
(JSC::DFG::ArrayMode::originalArrayStructure):
49+
(JSC::DFG::ArrayMode::alreadyChecked):
50+
* dfg/DFGByteCodeParser.cpp:
51+
(JSC::DFG::ByteCodeParser::addToGraph):
52+
* dfg/DFGCFGSimplificationPhase.cpp:
53+
(JSC::DFG::CFGSimplificationPhase::run):
54+
(JSC::DFG::CFGSimplificationPhase::convertToJump):
55+
(JSC::DFG::CFGSimplificationPhase::keepOperandAlive):
56+
(JSC::DFG::CFGSimplificationPhase::jettisonBlock):
57+
(JSC::DFG::CFGSimplificationPhase::mergeBlocks):
58+
* dfg/DFGCPSRethreadingPhase.cpp:
59+
(JSC::DFG::CPSRethreadingPhase::addPhiSilently):
60+
(JSC::DFG::CPSRethreadingPhase::addPhi):
61+
(JSC::DFG::CPSRethreadingPhase::canonicalizeGetLocalFor):
62+
(JSC::DFG::CPSRethreadingPhase::canonicalizeFlushOrPhantomLocalFor):
63+
(JSC::DFG::CPSRethreadingPhase::propagatePhis):
64+
* dfg/DFGCSEPhase.cpp:
65+
(JSC::DFG::CSEPhase::setLocalStoreElimination):
66+
* dfg/DFGClobberize.h:
67+
(JSC::DFG::clobberize):
68+
* dfg/DFGCommonData.cpp:
69+
(JSC::DFG::CommonData::notifyCompilingStructureTransition):
70+
* dfg/DFGConstantFoldingPhase.cpp:
71+
(JSC::DFG::ConstantFoldingPhase::foldConstants):
72+
(JSC::DFG::ConstantFoldingPhase::addStructureTransitionCheck):
73+
* dfg/DFGCriticalEdgeBreakingPhase.cpp:
74+
(JSC::DFG::CriticalEdgeBreakingPhase::breakCriticalEdge):
75+
* dfg/DFGDCEPhase.cpp:
76+
(JSC::DFG::DCEPhase::fixupBlock):
77+
* dfg/DFGDisassembler.cpp:
78+
(JSC::DFG::Disassembler::createDumpList):
79+
* dfg/DFGFixupPhase.cpp:
80+
(JSC::DFG::FixupPhase::fixupNode):
81+
(JSC::DFG::FixupPhase::createToString):
82+
(JSC::DFG::FixupPhase::attemptToForceStringArrayModeByToStringConversion):
83+
(JSC::DFG::FixupPhase::convertStringAddUse):
84+
(JSC::DFG::FixupPhase::fixupToPrimitive):
85+
(JSC::DFG::FixupPhase::fixupToString):
86+
(JSC::DFG::FixupPhase::attemptToMakeFastStringAdd):
87+
(JSC::DFG::FixupPhase::checkArray):
88+
(JSC::DFG::FixupPhase::blessArrayOperation):
89+
(JSC::DFG::FixupPhase::fixEdge):
90+
(JSC::DFG::FixupPhase::insertStoreBarrier):
91+
(JSC::DFG::FixupPhase::fixIntEdge):
92+
(JSC::DFG::FixupPhase::injectInt32ToDoubleNode):
93+
(JSC::DFG::FixupPhase::truncateConstantToInt32):
94+
(JSC::DFG::FixupPhase::attemptToMakeGetArrayLength):
95+
(JSC::DFG::FixupPhase::attemptToMakeGetTypedArrayByteLength):
96+
(JSC::DFG::FixupPhase::convertToGetArrayLength):
97+
(JSC::DFG::FixupPhase::prependGetArrayLength):
98+
(JSC::DFG::FixupPhase::attemptToMakeGetTypedArrayByteOffset):
99+
(JSC::DFG::FixupPhase::addPhantomsIfNecessary):
100+
* dfg/DFGGraph.cpp:
101+
(JSC::DFG::Graph::dumpCodeOrigin):
102+
(JSC::DFG::Graph::amountOfNodeWhiteSpace):
103+
(JSC::DFG::Graph::dump):
104+
(JSC::DFG::Graph::dumpBlockHeader):
105+
* dfg/DFGGraph.h:
106+
(JSC::DFG::Graph::hasExitSite):
107+
(JSC::DFG::Graph::valueProfileFor):
108+
(JSC::DFG::Graph::methodOfGettingAValueProfileFor):
109+
* dfg/DFGInvalidationPointInjectionPhase.cpp:
110+
(JSC::DFG::InvalidationPointInjectionPhase::handle):
111+
(JSC::DFG::InvalidationPointInjectionPhase::insertInvalidationCheck):
112+
* dfg/DFGLICMPhase.cpp:
113+
(JSC::DFG::LICMPhase::attemptHoist):
114+
* dfg/DFGLoopPreHeaderCreationPhase.cpp:
115+
(JSC::DFG::createPreHeader):
116+
* dfg/DFGNode.h:
117+
(JSC::DFG::Node::Node):
118+
(JSC::DFG::Node::isStronglyProvedConstantIn):
119+
* dfg/DFGNodeOrigin.h: Added.
120+
(JSC::DFG::NodeOrigin::NodeOrigin):
121+
(JSC::DFG::NodeOrigin::isSet):
122+
* dfg/DFGOSREntrypointCreationPhase.cpp:
123+
(JSC::DFG::OSREntrypointCreationPhase::run):
124+
* dfg/DFGResurrectionForValidationPhase.cpp:
125+
(JSC::DFG::ResurrectionForValidationPhase::run):
126+
* dfg/DFGSSAConversionPhase.cpp:
127+
(JSC::DFG::SSAConversionPhase::run):
128+
* dfg/DFGSSALoweringPhase.cpp:
129+
(JSC::DFG::SSALoweringPhase::handleNode):
130+
(JSC::DFG::SSALoweringPhase::lowerBoundsCheck):
131+
* dfg/DFGSpeculativeJIT.cpp:
132+
(JSC::DFG::SpeculativeJIT::compileIn):
133+
(JSC::DFG::SpeculativeJIT::compileCurrentBlock):
134+
(JSC::DFG::SpeculativeJIT::compileGetByValOnString):
135+
(JSC::DFG::SpeculativeJIT::compileNewTypedArray):
136+
* dfg/DFGSpeculativeJIT.h:
137+
(JSC::DFG::SpeculativeJIT::masqueradesAsUndefinedWatchpointIsStillValid):
138+
(JSC::DFG::SpeculativeJIT::appendCallWithExceptionCheck):
139+
(JSC::DFG::SpeculativeJIT::appendCallWithCallFrameRollbackOnException):
140+
(JSC::DFG::SpeculativeJIT::appendCallSetResult):
141+
(JSC::DFG::SpeculativeJIT::appendCall):
142+
(JSC::DFG::SpeculativeJIT::speculateStringObjectForStructure):
143+
* dfg/DFGSpeculativeJIT32_64.cpp:
144+
(JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNull):
145+
(JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
146+
(JSC::DFG::SpeculativeJIT::emitCall):
147+
(JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
148+
(JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
149+
(JSC::DFG::SpeculativeJIT::compile):
150+
* dfg/DFGSpeculativeJIT64.cpp:
151+
(JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNull):
152+
(JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
153+
(JSC::DFG::SpeculativeJIT::emitCall):
154+
(JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
155+
(JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
156+
(JSC::DFG::SpeculativeJIT::compile):
157+
* dfg/DFGStrengthReductionPhase.cpp:
158+
(JSC::DFG::StrengthReductionPhase::convertToIdentityOverChild):
159+
(JSC::DFG::StrengthReductionPhase::prepareToFoldTypedArray):
160+
* dfg/DFGTierUpCheckInjectionPhase.cpp:
161+
(JSC::DFG::TierUpCheckInjectionPhase::run):
162+
* dfg/DFGTypeCheckHoistingPhase.cpp:
163+
(JSC::DFG::TypeCheckHoistingPhase::run):
164+
* dfg/DFGValidate.cpp:
165+
(JSC::DFG::Validate::validateSSA):
166+
* dfg/DFGWatchpointCollectionPhase.cpp:
167+
(JSC::DFG::WatchpointCollectionPhase::handle):
168+
(JSC::DFG::WatchpointCollectionPhase::handleEdge):
169+
(JSC::DFG::WatchpointCollectionPhase::handleMasqueradesAsUndefined):
170+
(JSC::DFG::WatchpointCollectionPhase::globalObject):
171+
* ftl/FTLJSCall.cpp:
172+
(JSC::FTL::JSCall::link):
173+
* ftl/FTLLink.cpp:
174+
(JSC::FTL::link):
175+
* ftl/FTLLowerDFGToLLVM.cpp:
176+
(JSC::FTL::LowerDFGToLLVM::compileNode):
177+
(JSC::FTL::LowerDFGToLLVM::compileToThis):
178+
(JSC::FTL::LowerDFGToLLVM::compilePutById):
179+
(JSC::FTL::LowerDFGToLLVM::compilePutByVal):
180+
(JSC::FTL::LowerDFGToLLVM::compileNewArray):
181+
(JSC::FTL::LowerDFGToLLVM::compileNewArrayBuffer):
182+
(JSC::FTL::LowerDFGToLLVM::compileNewArrayWithSize):
183+
(JSC::FTL::LowerDFGToLLVM::compileStringCharAt):
184+
(JSC::FTL::LowerDFGToLLVM::compileGetMyScope):
185+
(JSC::FTL::LowerDFGToLLVM::compileCheckArgumentsNotCreated):
186+
(JSC::FTL::LowerDFGToLLVM::getById):
187+
(JSC::FTL::LowerDFGToLLVM::equalNullOrUndefined):
188+
(JSC::FTL::LowerDFGToLLVM::speculateStringObjectForStructure):
189+
(JSC::FTL::LowerDFGToLLVM::masqueradesAsUndefinedWatchpointIsStillValid):
190+
(JSC::FTL::LowerDFGToLLVM::callPreflight):
191+
1192
2014-02-11 Filip Pizlo <fpizlo@apple.com>
2193

3194
Fix assertions and incorrect codegen for CompareEq(ObjectOrOther:, Object:)

‎Source/JavaScriptCore/GNUmakefile.list.am‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,7 @@ javascriptcore_sources += \
343343
Source/JavaScriptCore/dfg/DFGNodeAllocator.h \
344344
Source/JavaScriptCore/dfg/DFGNodeFlags.cpp \
345345
Source/JavaScriptCore/dfg/DFGNodeFlags.h \
346+
Source/JavaScriptCore/dfg/DFGNodeOrigin.h \
346347
Source/JavaScriptCore/dfg/DFGNodeType.h \
347348
Source/JavaScriptCore/dfg/DFGOperations.cpp \
348349
Source/JavaScriptCore/dfg/DFGOperations.h \

‎Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -953,6 +953,7 @@
953953
<ClInclude Include="..\dfg\DFGNode.h" />
954954
<ClInclude Include="..\dfg\DFGNodeAllocator.h" />
955955
<ClInclude Include="..\dfg\DFGNodeFlags.h" />
956+
<ClInclude Include="..\dfg\DFGNodeOrigin.h" />
956957
<ClInclude Include="..\dfg\DFGNodeType.h" />
957958
<ClInclude Include="..\dfg\DFGOperations.h" />
958959
<ClInclude Include="..\dfg\DFGOSRAvailabilityAnalysisPhase.h" />

‎Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,7 @@
210210
0F2FCCFD18A60070001A27F8 /* DFGScannable.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2FCCF618A60070001A27F8 /* DFGScannable.h */; settings = {ATTRIBUTES = (Private, ); }; };
211211
0F2FCCFE18A60070001A27F8 /* DFGThreadData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F2FCCF718A60070001A27F8 /* DFGThreadData.cpp */; };
212212
0F2FCCFF18A60070001A27F8 /* DFGThreadData.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2FCCF818A60070001A27F8 /* DFGThreadData.h */; settings = {ATTRIBUTES = (Private, ); }; };
213+
0F300B7818AB051100A6D72E /* DFGNodeOrigin.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F300B7718AB051100A6D72E /* DFGNodeOrigin.h */; settings = {ATTRIBUTES = (Private, ); }; };
213214
0F34B14916D42010001CDA5A /* DFGUseKind.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F34B14716D4200E001CDA5A /* DFGUseKind.cpp */; };
214215
0F34B14A16D42013001CDA5A /* DFGUseKind.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F34B14816D4200E001CDA5A /* DFGUseKind.h */; settings = {ATTRIBUTES = (Private, ); }; };
215216
0F34B14C16D43E0D001CDA5A /* PolymorphicAccessStructureList.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F34B14B16D43E0C001CDA5A /* PolymorphicAccessStructureList.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -1664,6 +1665,7 @@
16641665
0F2FCCF618A60070001A27F8 /* DFGScannable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DFGScannable.h; path = dfg/DFGScannable.h; sourceTree = "<group>"; };
16651666
0F2FCCF718A60070001A27F8 /* DFGThreadData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DFGThreadData.cpp; path = dfg/DFGThreadData.cpp; sourceTree = "<group>"; };
16661667
0F2FCCF818A60070001A27F8 /* DFGThreadData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DFGThreadData.h; path = dfg/DFGThreadData.h; sourceTree = "<group>"; };
1668+
0F300B7718AB051100A6D72E /* DFGNodeOrigin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DFGNodeOrigin.h; path = dfg/DFGNodeOrigin.h; sourceTree = "<group>"; };
16671669
0F34B14716D4200E001CDA5A /* DFGUseKind.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DFGUseKind.cpp; path = dfg/DFGUseKind.cpp; sourceTree = "<group>"; };
16681670
0F34B14816D4200E001CDA5A /* DFGUseKind.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DFGUseKind.h; path = dfg/DFGUseKind.h; sourceTree = "<group>"; };
16691671
0F34B14B16D43E0C001CDA5A /* PolymorphicAccessStructureList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PolymorphicAccessStructureList.h; sourceTree = "<group>"; };
@@ -4260,6 +4262,7 @@
42604262
0FB4B51F16B62772003F696B /* DFGNodeAllocator.h */,
42614263
0FA581B7150E952A00B9A2D9 /* DFGNodeFlags.cpp */,
42624264
0FA581B8150E952A00B9A2D9 /* DFGNodeFlags.h */,
4265+
0F300B7718AB051100A6D72E /* DFGNodeOrigin.h */,
42634266
0FA581B9150E952A00B9A2D9 /* DFGNodeType.h */,
42644267
86EC9DBF1328DF82002B2AD7 /* DFGOperations.cpp */,
42654268
86EC9DC01328DF82002B2AD7 /* DFGOperations.h */,
@@ -4801,6 +4804,7 @@
48014804
95E3BC050E1AE68200B2D1C1 /* CallIdentifier.h in Headers */,
48024805
0F0B83B114BCF71800885B4F /* CallLinkInfo.h in Headers */,
48034806
0F93329E14CA7DC50085F3C6 /* CallLinkStatus.h in Headers */,
4807+
0F300B7818AB051100A6D72E /* DFGNodeOrigin.h in Headers */,
48044808
0F0B83B914BCF95F00885B4F /* CallReturnOffsetToBytecodeOffset.h in Headers */,
48054809
0F24E54217EA9F5900ABB217 /* CCallHelpers.h in Headers */,
48064810
BC6AAAE50E1F426500AD87D8 /* ClassInfo.h in Headers */,

0 commit comments

Comments
 (0)