Skip to content

Commit 796a50a

Browse files
author
Filip Pizlo
committed
DFG AI should have O(1) clobbering
https://bugs.webkit.org/show_bug.cgi?id=185287 Reviewed by Saam Barati. JSTests: * stress/simple-ai-effect.js: Added. (bar): (foo): Source/JavaScriptCore: This fixes an old scalability probem in AI. Previously, if we did clobberWorld(), then we would traverse all of the state available to the AI at that time and clobber it. This changes clobberWorld() to be O(1). It just does some math to a clobber epoch. This is a ~1% speed-up for compile times. * JavaScriptCore.xcodeproj/project.pbxproj: * Sources.txt: * dfg/DFGAbstractInterpreter.h: (JSC::DFG::AbstractInterpreter::forNode): (JSC::DFG::AbstractInterpreter::setForNode): (JSC::DFG::AbstractInterpreter::clearForNode): (JSC::DFG::AbstractInterpreter::variables): Deleted. * dfg/DFGAbstractInterpreterInlines.h: (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): (JSC::DFG::AbstractInterpreter<AbstractStateType>::clobberWorld): (JSC::DFG::AbstractInterpreter<AbstractStateType>::forAllValues): (JSC::DFG::AbstractInterpreter<AbstractStateType>::clobberStructures): (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeDoubleUnaryOpEffects): * dfg/DFGAbstractValue.cpp: (JSC::DFG::AbstractValue::fastForwardToSlow): * dfg/DFGAbstractValue.h: (JSC::DFG::AbstractValue::fastForwardTo): (JSC::DFG::AbstractValue::clobberStructuresFor): Deleted. (JSC::DFG::AbstractValue::observeInvalidationPoint): Deleted. (JSC::DFG::AbstractValue::observeInvalidationPointFor): Deleted. * dfg/DFGAbstractValueClobberEpoch.cpp: Added. (JSC::DFG::AbstractValueClobberEpoch::dump const): * dfg/DFGAbstractValueClobberEpoch.h: Added. (JSC::DFG::AbstractValueClobberEpoch::AbstractValueClobberEpoch): (JSC::DFG::AbstractValueClobberEpoch::first): (JSC::DFG::AbstractValueClobberEpoch::clobber): (JSC::DFG::AbstractValueClobberEpoch::observeInvalidationPoint): (JSC::DFG::AbstractValueClobberEpoch::operator== const): (JSC::DFG::AbstractValueClobberEpoch::operator!= const): (JSC::DFG::AbstractValueClobberEpoch::structureClobberState const): (JSC::DFG::AbstractValueClobberEpoch::clobberEpoch const): * dfg/DFGAtTailAbstractState.h: (JSC::DFG::AtTailAbstractState::setForNode): (JSC::DFG::AtTailAbstractState::clearForNode): (JSC::DFG::AtTailAbstractState::numberOfArguments const): (JSC::DFG::AtTailAbstractState::numberOfLocals const): (JSC::DFG::AtTailAbstractState::operand): (JSC::DFG::AtTailAbstractState::local): (JSC::DFG::AtTailAbstractState::argument): (JSC::DFG::AtTailAbstractState::clobberStructures): (JSC::DFG::AtTailAbstractState::observeInvalidationPoint): (JSC::DFG::AtTailAbstractState::variables): Deleted. * dfg/DFGCFAPhase.cpp: (JSC::DFG::CFAPhase::performBlockCFA): * dfg/DFGConstantFoldingPhase.cpp: (JSC::DFG::ConstantFoldingPhase::foldConstants): * dfg/DFGFlowMap.h: (JSC::DFG::FlowMap::at): (JSC::DFG::FlowMap::atShadow): (JSC::DFG::FlowMap::at const): (JSC::DFG::FlowMap::atShadow const): * dfg/DFGInPlaceAbstractState.cpp: (JSC::DFG::InPlaceAbstractState::beginBasicBlock): (JSC::DFG::InPlaceAbstractState::endBasicBlock): * dfg/DFGInPlaceAbstractState.h: (JSC::DFG::InPlaceAbstractState::forNode): (JSC::DFG::InPlaceAbstractState::setForNode): (JSC::DFG::InPlaceAbstractState::clearForNode): (JSC::DFG::InPlaceAbstractState::variablesForDebugging): (JSC::DFG::InPlaceAbstractState::numberOfArguments const): (JSC::DFG::InPlaceAbstractState::numberOfLocals const): (JSC::DFG::InPlaceAbstractState::operand): (JSC::DFG::InPlaceAbstractState::local): (JSC::DFG::InPlaceAbstractState::argument): (JSC::DFG::InPlaceAbstractState::variableAt): (JSC::DFG::InPlaceAbstractState::clobberStructures): (JSC::DFG::InPlaceAbstractState::observeInvalidationPoint): (JSC::DFG::InPlaceAbstractState::fastForward): (JSC::DFG::InPlaceAbstractState::variables): Deleted. * dfg/DFGSpeculativeJIT64.cpp: (JSC::DFG::SpeculativeJIT::compile): * ftl/FTLLowerDFGToB3.cpp: (JSC::FTL::DFG::LowerDFGToB3::compileGetStack): Canonical link: https://commits.webkit.org/200872@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@231471 268f45cc-cd09-0410-ab3c-d52691b4dbfc
1 parent 32fb7fd commit 796a50a

21 files changed

Lines changed: 942 additions & 379 deletions

‎JSTests/ChangeLog‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,14 @@
1+
2018-05-05 Filip Pizlo <fpizlo@apple.com>
2+
3+
DFG AI should have O(1) clobbering
4+
https://bugs.webkit.org/show_bug.cgi?id=185287
5+
6+
Reviewed by Saam Barati.
7+
8+
* stress/simple-ai-effect.js: Added.
9+
(bar):
10+
(foo):
11+
112
2018-05-04 Keith Miller <keith_miller@apple.com>
213

314
isCacheableArrayLength should return true for undecided arrays

‎JSTests/stress/simple-ai-effect.js‎

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
var doEffect = false;
2+
var didEffect = false;
3+
4+
function bar(o, p)
5+
{
6+
if (doEffect) {
7+
delete p.g;
8+
p.__defineGetter__("g", () => {
9+
didEffect = true;
10+
return 42;
11+
});
12+
}
13+
}
14+
15+
noInline(bar);
16+
17+
function foo(o, p) {
18+
var result = o.f + p.g;
19+
bar(o, p);
20+
return result + o.f + p.g;
21+
}
22+
23+
noInline(foo);
24+
25+
var o = {g: 1};
26+
o.h = 2;
27+
28+
for (var i = 0; i < 10000; ++i) {
29+
var result = foo({f: 1}, {g: 3});
30+
if (result != 8)
31+
throw "Error: bad result in loop: " + result;
32+
}
33+
34+
doEffect = true;
35+
var result = foo({f: 1}, {g: 3});
36+
if (result != 47)
37+
throw "Error: bad result at end: " + result;
38+
if (!didEffect)
39+
throw "Error: did not do effect";

‎Source/JavaScriptCore/ChangeLog‎

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,91 @@
1+
2018-05-05 Filip Pizlo <fpizlo@apple.com>
2+
3+
DFG AI should have O(1) clobbering
4+
https://bugs.webkit.org/show_bug.cgi?id=185287
5+
6+
Reviewed by Saam Barati.
7+
8+
This fixes an old scalability probem in AI. Previously, if we did clobberWorld(), then we
9+
would traverse all of the state available to the AI at that time and clobber it.
10+
11+
This changes clobberWorld() to be O(1). It just does some math to a clobber epoch.
12+
13+
This is a ~1% speed-up for compile times.
14+
15+
* JavaScriptCore.xcodeproj/project.pbxproj:
16+
* Sources.txt:
17+
* dfg/DFGAbstractInterpreter.h:
18+
(JSC::DFG::AbstractInterpreter::forNode):
19+
(JSC::DFG::AbstractInterpreter::setForNode):
20+
(JSC::DFG::AbstractInterpreter::clearForNode):
21+
(JSC::DFG::AbstractInterpreter::variables): Deleted.
22+
* dfg/DFGAbstractInterpreterInlines.h:
23+
(JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
24+
(JSC::DFG::AbstractInterpreter<AbstractStateType>::clobberWorld):
25+
(JSC::DFG::AbstractInterpreter<AbstractStateType>::forAllValues):
26+
(JSC::DFG::AbstractInterpreter<AbstractStateType>::clobberStructures):
27+
(JSC::DFG::AbstractInterpreter<AbstractStateType>::executeDoubleUnaryOpEffects):
28+
* dfg/DFGAbstractValue.cpp:
29+
(JSC::DFG::AbstractValue::fastForwardToSlow):
30+
* dfg/DFGAbstractValue.h:
31+
(JSC::DFG::AbstractValue::fastForwardTo):
32+
(JSC::DFG::AbstractValue::clobberStructuresFor): Deleted.
33+
(JSC::DFG::AbstractValue::observeInvalidationPoint): Deleted.
34+
(JSC::DFG::AbstractValue::observeInvalidationPointFor): Deleted.
35+
* dfg/DFGAbstractValueClobberEpoch.cpp: Added.
36+
(JSC::DFG::AbstractValueClobberEpoch::dump const):
37+
* dfg/DFGAbstractValueClobberEpoch.h: Added.
38+
(JSC::DFG::AbstractValueClobberEpoch::AbstractValueClobberEpoch):
39+
(JSC::DFG::AbstractValueClobberEpoch::first):
40+
(JSC::DFG::AbstractValueClobberEpoch::clobber):
41+
(JSC::DFG::AbstractValueClobberEpoch::observeInvalidationPoint):
42+
(JSC::DFG::AbstractValueClobberEpoch::operator== const):
43+
(JSC::DFG::AbstractValueClobberEpoch::operator!= const):
44+
(JSC::DFG::AbstractValueClobberEpoch::structureClobberState const):
45+
(JSC::DFG::AbstractValueClobberEpoch::clobberEpoch const):
46+
* dfg/DFGAtTailAbstractState.h:
47+
(JSC::DFG::AtTailAbstractState::setForNode):
48+
(JSC::DFG::AtTailAbstractState::clearForNode):
49+
(JSC::DFG::AtTailAbstractState::numberOfArguments const):
50+
(JSC::DFG::AtTailAbstractState::numberOfLocals const):
51+
(JSC::DFG::AtTailAbstractState::operand):
52+
(JSC::DFG::AtTailAbstractState::local):
53+
(JSC::DFG::AtTailAbstractState::argument):
54+
(JSC::DFG::AtTailAbstractState::clobberStructures):
55+
(JSC::DFG::AtTailAbstractState::observeInvalidationPoint):
56+
(JSC::DFG::AtTailAbstractState::variables): Deleted.
57+
* dfg/DFGCFAPhase.cpp:
58+
(JSC::DFG::CFAPhase::performBlockCFA):
59+
* dfg/DFGConstantFoldingPhase.cpp:
60+
(JSC::DFG::ConstantFoldingPhase::foldConstants):
61+
* dfg/DFGFlowMap.h:
62+
(JSC::DFG::FlowMap::at):
63+
(JSC::DFG::FlowMap::atShadow):
64+
(JSC::DFG::FlowMap::at const):
65+
(JSC::DFG::FlowMap::atShadow const):
66+
* dfg/DFGInPlaceAbstractState.cpp:
67+
(JSC::DFG::InPlaceAbstractState::beginBasicBlock):
68+
(JSC::DFG::InPlaceAbstractState::endBasicBlock):
69+
* dfg/DFGInPlaceAbstractState.h:
70+
(JSC::DFG::InPlaceAbstractState::forNode):
71+
(JSC::DFG::InPlaceAbstractState::setForNode):
72+
(JSC::DFG::InPlaceAbstractState::clearForNode):
73+
(JSC::DFG::InPlaceAbstractState::variablesForDebugging):
74+
(JSC::DFG::InPlaceAbstractState::numberOfArguments const):
75+
(JSC::DFG::InPlaceAbstractState::numberOfLocals const):
76+
(JSC::DFG::InPlaceAbstractState::operand):
77+
(JSC::DFG::InPlaceAbstractState::local):
78+
(JSC::DFG::InPlaceAbstractState::argument):
79+
(JSC::DFG::InPlaceAbstractState::variableAt):
80+
(JSC::DFG::InPlaceAbstractState::clobberStructures):
81+
(JSC::DFG::InPlaceAbstractState::observeInvalidationPoint):
82+
(JSC::DFG::InPlaceAbstractState::fastForward):
83+
(JSC::DFG::InPlaceAbstractState::variables): Deleted.
84+
* dfg/DFGSpeculativeJIT64.cpp:
85+
(JSC::DFG::SpeculativeJIT::compile):
86+
* ftl/FTLLowerDFGToB3.cpp:
87+
(JSC::FTL::DFG::LowerDFGToB3::compileGetStack):
88+
189
2018-05-06 Filip Pizlo <fpizlo@apple.com>
290

391
InPlaceAbstractState::beginBasicBlock shouldn't have to clear any abstract values

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,7 @@
319319
0F4D8C781FCA3CFA001D32AC /* SimpleMarkingConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F4D8C771FCA3CF3001D32AC /* SimpleMarkingConstraint.h */; settings = {ATTRIBUTES = (Private, ); }; };
320320
0F4DE1CF1C4C1B54004D6C11 /* AirFixObviousSpills.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F4DE1CD1C4C1B54004D6C11 /* AirFixObviousSpills.h */; };
321321
0F4F11E8209BCDAB00709654 /* CompilerTimingScope.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F4F11E6209BCDA100709654 /* CompilerTimingScope.h */; };
322+
0F4F11EB209D426600709654 /* DFGAbstractValueClobberEpoch.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F4F11EA209D426300709654 /* DFGAbstractValueClobberEpoch.h */; };
322323
0F4F29E018B6AD1C0057BC15 /* DFGStaticExecutionCountEstimationPhase.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F4F29DE18B6AD1C0057BC15 /* DFGStaticExecutionCountEstimationPhase.h */; };
323324
0F4F82881E2FFDE00075184C /* JSSegmentedVariableObjectHeapCellType.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F4F82861E2FFDDB0075184C /* JSSegmentedVariableObjectHeapCellType.h */; settings = {ATTRIBUTES = (Private, ); }; };
324325
0F4F828C1E31B9760075184C /* StochasticSpaceTimeMutatorScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F4F828A1E31B9710075184C /* StochasticSpaceTimeMutatorScheduler.h */; };
@@ -2310,6 +2311,8 @@
23102311
0F4DE1D01C4D764B004D6C11 /* B3OriginDump.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = B3OriginDump.cpp; path = b3/B3OriginDump.cpp; sourceTree = "<group>"; };
23112312
0F4F11E6209BCDA100709654 /* CompilerTimingScope.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CompilerTimingScope.h; sourceTree = "<group>"; };
23122313
0F4F11E7209BCDA100709654 /* CompilerTimingScope.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CompilerTimingScope.cpp; sourceTree = "<group>"; };
2314+
0F4F11E9209D426300709654 /* DFGAbstractValueClobberEpoch.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DFGAbstractValueClobberEpoch.cpp; path = dfg/DFGAbstractValueClobberEpoch.cpp; sourceTree = "<group>"; };
2315+
0F4F11EA209D426300709654 /* DFGAbstractValueClobberEpoch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DFGAbstractValueClobberEpoch.h; path = dfg/DFGAbstractValueClobberEpoch.h; sourceTree = "<group>"; };
23132316
0F4F29DD18B6AD1C0057BC15 /* DFGStaticExecutionCountEstimationPhase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DFGStaticExecutionCountEstimationPhase.cpp; path = dfg/DFGStaticExecutionCountEstimationPhase.cpp; sourceTree = "<group>"; };
23142317
0F4F29DE18B6AD1C0057BC15 /* DFGStaticExecutionCountEstimationPhase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DFGStaticExecutionCountEstimationPhase.h; path = dfg/DFGStaticExecutionCountEstimationPhase.h; sourceTree = "<group>"; };
23152318
0F4F82851E2FFDDB0075184C /* JSSegmentedVariableObjectHeapCellType.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSSegmentedVariableObjectHeapCellType.cpp; sourceTree = "<group>"; };
@@ -7114,6 +7117,8 @@
71147117
A704D8FF17A0BAA8006BA554 /* DFGAbstractInterpreterInlines.h */,
71157118
0F55C19317276E4600CEABFD /* DFGAbstractValue.cpp */,
71167119
0F62016F143FCD2F0068B77C /* DFGAbstractValue.h */,
7120+
0F4F11E9209D426300709654 /* DFGAbstractValueClobberEpoch.cpp */,
7121+
0F4F11EA209D426300709654 /* DFGAbstractValueClobberEpoch.h */,
71177122
0FD3E3FF1B618AAF00C80E1E /* DFGAdaptiveInferredPropertyValueWatchpoint.cpp */,
71187123
0FD3E4001B618AAF00C80E1E /* DFGAdaptiveInferredPropertyValueWatchpoint.h */,
71197124
0F18D3CD1B55A6E0002C5C9F /* DFGAdaptiveStructureWatchpoint.cpp */,
@@ -9040,6 +9045,7 @@
90409045
A513E5C2185BFACC007E95AD /* JSInjectedScriptHostPrototype.h in Headers */,
90419046
0F2B66F817B6B5AB00A7AE3F /* JSInt16Array.h in Headers */,
90429047
0F2B66F917B6B5AB00A7AE3F /* JSInt32Array.h in Headers */,
9048+
0F4F11EB209D426600709654 /* DFGAbstractValueClobberEpoch.h in Headers */,
90439049
0F2B66F717B6B5AB00A7AE3F /* JSInt8Array.h in Headers */,
90449050
A76C51761182748D00715B05 /* JSInterfaceJIT.h in Headers */,
90459051
E33F50811B8429A400413856 /* JSInternalPromise.h in Headers */,

‎Source/JavaScriptCore/Sources.txt‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,7 @@ debugger/DebuggerScope.cpp
274274
dfg/DFGAbstractHeap.cpp
275275
dfg/DFGAbstractInterpreterClobberState.cpp
276276
dfg/DFGAbstractValue.cpp
277+
dfg/DFGAbstractValueClobberEpoch.cpp
277278
dfg/DFGAdaptiveInferredPropertyValueWatchpoint.cpp
278279
dfg/DFGAdaptiveStructureWatchpoint.cpp
279280
dfg/DFGArgumentsEliminationPhase.cpp

‎Source/JavaScriptCore/bytecode/Operands.h‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ class Operands {
245245

246246
private:
247247
// The first m_numArguments of m_values are arguments, the rest are locals.
248-
Vector<T, 24> m_values;
248+
Vector<T, 24, UnsafeVectorOverflow> m_values;
249249
unsigned m_numArguments;
250250
};
251251

‎Source/JavaScriptCore/dfg/DFGAbstractInterpreter.h‎

Lines changed: 69 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2013-2016 Apple Inc. All rights reserved.
2+
* Copyright (C) 2013-2018 Apple Inc. All rights reserved.
33
*
44
* Redistribution and use in source and binary forms, with or without
55
* modification, are permitted provided that the following conditions
@@ -41,19 +41,80 @@ class AbstractInterpreter {
4141
AbstractInterpreter(Graph&, AbstractStateType&);
4242
~AbstractInterpreter();
4343

44-
AbstractValue& forNode(NodeFlowProjection node)
44+
ALWAYS_INLINE AbstractValue& forNode(NodeFlowProjection node)
4545
{
4646
return m_state.forNode(node);
4747
}
4848

49-
AbstractValue& forNode(Edge edge)
49+
ALWAYS_INLINE AbstractValue& forNode(Edge edge)
5050
{
5151
return forNode(edge.node());
5252
}
5353

54-
Operands<AbstractValue>& variables()
54+
ALWAYS_INLINE void clearForNode(NodeFlowProjection node)
5555
{
56-
return m_state.variables();
56+
m_state.clearForNode(node);
57+
}
58+
59+
ALWAYS_INLINE void clearForNode(Edge edge)
60+
{
61+
clearForNode(edge.node());
62+
}
63+
64+
template<typename... Arguments>
65+
ALWAYS_INLINE void setForNode(NodeFlowProjection node, Arguments&&... arguments)
66+
{
67+
m_state.setForNode(node, std::forward<Arguments>(arguments)...);
68+
}
69+
70+
template<typename... Arguments>
71+
ALWAYS_INLINE void setForNode(Edge edge, Arguments&&... arguments)
72+
{
73+
setForNode(edge.node(), std::forward<Arguments>(arguments)...);
74+
}
75+
76+
template<typename... Arguments>
77+
ALWAYS_INLINE void setTypeForNode(NodeFlowProjection node, Arguments&&... arguments)
78+
{
79+
m_state.setTypeForNode(node, std::forward<Arguments>(arguments)...);
80+
}
81+
82+
template<typename... Arguments>
83+
ALWAYS_INLINE void setTypeForNode(Edge edge, Arguments&&... arguments)
84+
{
85+
setTypeForNode(edge.node(), std::forward<Arguments>(arguments)...);
86+
}
87+
88+
template<typename... Arguments>
89+
ALWAYS_INLINE void setNonCellTypeForNode(NodeFlowProjection node, Arguments&&... arguments)
90+
{
91+
m_state.setNonCellTypeForNode(node, std::forward<Arguments>(arguments)...);
92+
}
93+
94+
template<typename... Arguments>
95+
ALWAYS_INLINE void setNonCellTypeForNode(Edge edge, Arguments&&... arguments)
96+
{
97+
setNonCellTypeForNode(edge.node(), std::forward<Arguments>(arguments)...);
98+
}
99+
100+
ALWAYS_INLINE void makeBytecodeTopForNode(NodeFlowProjection node)
101+
{
102+
m_state.makeBytecodeTopForNode(node);
103+
}
104+
105+
ALWAYS_INLINE void makeBytecodeTopForNode(Edge edge)
106+
{
107+
makeBytecodeTopForNode(edge.node());
108+
}
109+
110+
ALWAYS_INLINE void makeHeapTopForNode(NodeFlowProjection node)
111+
{
112+
m_state.makeHeapTopForNode(node);
113+
}
114+
115+
ALWAYS_INLINE void makeHeapTopForNode(Edge edge)
116+
{
117+
makeHeapTopForNode(edge.node());
57118
}
58119

59120
bool needsTypeCheck(Node* node, SpeculatedType typesPassedThrough)
@@ -149,13 +210,13 @@ class AbstractInterpreter {
149210
PhiChildren* phiChildren() { return m_phiChildren.get(); }
150211

151212
private:
152-
void clobberWorld(const CodeOrigin&, unsigned indexInBlock);
213+
void clobberWorld();
153214
void didFoldClobberWorld();
154215

155216
template<typename Functor>
156217
void forAllValues(unsigned indexInBlock, Functor&);
157218

158-
void clobberStructures(unsigned indexInBlock);
219+
void clobberStructures();
159220
void didFoldClobberStructures();
160221

161222
void observeTransition(unsigned indexInBlock, RegisteredStructure from, RegisteredStructure to);
@@ -190,7 +251,7 @@ class AbstractInterpreter {
190251

191252
void verifyEdge(Node*, Edge);
192253
void verifyEdges(Node*);
193-
void executeDoubleUnaryOpEffects(Node*, unsigned clobberLimit, double(*equivalentFunction)(double));
254+
void executeDoubleUnaryOpEffects(Node*, double(*equivalentFunction)(double));
194255

195256
CodeBlock* m_codeBlock;
196257
Graph& m_graph;

0 commit comments

Comments
 (0)