Skip to content

Commit 4921653

Browse files
committed
[JSC] Introduce BaselineCallLinkInfo and OptimizingCallLinkInfo to shrink sizeof(BaselineCallLinkInfo)
https://bugs.webkit.org/show_bug.cgi?id=233985 Reviewed by Mark Lam. This patch introduces BaselineCallLinkInfo and OptimizingCallLinkInfo to shrink sizeof(BaselineCallLinkInfo). BaselineCallLinkInfo is included in metadata, and allocated for LLInt and Baseline. So shrinking it can make metadata small for LLInt and Baseline, which exists for all live functions. We also reorder OpIteratorOpen::Metadata and OpIteratorNext::Metadata to shrink sizes. sizeof(BaselineCallLinkInfo) becomes 88, while the old sizeof(CallLinkInfo) was 120. * bytecode/AccessCase.cpp: (JSC::AccessCase::generateImpl): * bytecode/BytecodeList.rb: * bytecode/CallLinkInfo.cpp: (JSC::CallLinkInfo::setMonomorphicCallee): (JSC::CallLinkInfo::emitFastPathImpl): (JSC::OptimizingCallLinkInfo::emitFastPath): (JSC::OptimizingCallLinkInfo::emitTailCallFastPath): (JSC::OptimizingCallLinkInfo::emitSlowPath): (JSC::CallLinkInfo::emitDataICSlowPath): (JSC::OptimizingCallLinkInfo::slowPathStart): (JSC::OptimizingCallLinkInfo::fastPathStart): (JSC::OptimizingCallLinkInfo::emitDirectFastPath): (JSC::OptimizingCallLinkInfo::emitDirectTailCallFastPath): (JSC::OptimizingCallLinkInfo::initializeDirectCall): (JSC::OptimizingCallLinkInfo::setDirectCallTarget): (JSC::BaselineCallLinkInfo::initialize): (JSC::CallLinkInfo::slowPathStart): Deleted. (JSC::CallLinkInfo::fastPathStart): Deleted. (JSC::CallLinkInfo::emitFastPath): Deleted. (JSC::CallLinkInfo::emitTailCallFastPath): Deleted. (JSC::CallLinkInfo::emitSlowPath): Deleted. (JSC::CallLinkInfo::initializeDataIC): Deleted. (JSC::CallLinkInfo::emitDirectFastPath): Deleted. (JSC::CallLinkInfo::emitDirectTailCallFastPath): Deleted. (JSC::CallLinkInfo::initializeDirectCall): Deleted. (JSC::CallLinkInfo::setDirectCallTarget): Deleted. * bytecode/CallLinkInfo.h: (JSC::CallLinkInfo::type const): (JSC::CallLinkInfo::CallLinkInfo): (JSC::CallLinkInfo::calleeGPR const): (JSC::CallLinkInfo::callLinkInfoGPR const): (JSC::CallLinkInfo::setCallLinkInfoGPR): (JSC::CallLinkInfo::setUpCall): Deleted. (JSC::CallLinkInfo::setCodeLocations): Deleted. (JSC::CallLinkInfo::calleeGPR): Deleted. * bytecode/CallLinkStatus.cpp: (JSC::CallLinkStatus::computeFor): * bytecode/CodeBlock.cpp: (JSC::CodeBlock::finishCreation): (JSC::CodeBlock::setupWithUnlinkedBaselineCode): (JSC::CodeBlock::finalizeUnconditionally): (JSC::CodeBlock::getICStatusMap): (JSC::CodeBlock::jettison): * bytecode/GetterSetterAccessCase.h: * bytecode/PolymorphicAccess.h: * bytecode/Repatch.cpp: (JSC::revertCall): (JSC::linkDirectCall): * bytecode/Repatch.h: * dfg/DFGCommonData.h: (JSC::DFG::CommonData::addCallLinkInfo): * dfg/DFGJITCompiler.cpp: (JSC::DFG::JITCompiler::link): * dfg/DFGJITCompiler.h: (JSC::DFG::JITCompiler::addJSCall): (JSC::DFG::JITCompiler::addJSDirectCall): (JSC::DFG::JITCompiler::JSCallRecord::JSCallRecord): (JSC::DFG::JITCompiler::JSDirectCallRecord::JSDirectCallRecord): * dfg/DFGOperations.cpp: (JSC::DFG::JSC_DEFINE_JIT_OPERATION): * dfg/DFGOperations.h: * dfg/DFGSpeculativeJIT32_64.cpp: (JSC::DFG::SpeculativeJIT::emitCall): * dfg/DFGSpeculativeJIT64.cpp: (JSC::DFG::SpeculativeJIT::emitCall): * ftl/FTLLowerDFGToB3.cpp: (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq): * jit/CallFrameShuffleData.cpp: (JSC::CallFrameShuffleData::createForBaselineOrLLIntTailCall): * jit/GCAwareJITStubRoutine.cpp: (JSC::MarkingGCAwareJITStubRoutine::MarkingGCAwareJITStubRoutine): (JSC::GCAwareJITStubRoutineWithExceptionHandler::GCAwareJITStubRoutineWithExceptionHandler): (JSC::createICJITStubRoutine): * jit/GCAwareJITStubRoutine.h: * jit/JITCall.cpp: (JSC::JIT::compileCallEvalSlowCase): (JSC::JIT::compileTailCall): (JSC::JIT::compileOpCall): (): Deleted. * wasm/js/JSWebAssemblyCodeBlock.h: * wasm/js/WasmToJS.cpp: (JSC::Wasm::wasmToJS): * wasm/js/WasmToJS.h: Canonical link: https://commits.webkit.org/245010@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@286769 268f45cc-cd09-0410-ab3c-d52691b4dbfc
1 parent b6291d2 commit 4921653

26 files changed

Lines changed: 437 additions & 270 deletions

‎Source/JavaScriptCore/ChangeLog‎

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,103 @@
1+
2021-12-09 Yusuke Suzuki <ysuzuki@apple.com>
2+
3+
[JSC] Introduce BaselineCallLinkInfo and OptimizingCallLinkInfo to shrink sizeof(BaselineCallLinkInfo)
4+
https://bugs.webkit.org/show_bug.cgi?id=233985
5+
6+
Reviewed by Mark Lam.
7+
8+
This patch introduces BaselineCallLinkInfo and OptimizingCallLinkInfo to shrink sizeof(BaselineCallLinkInfo).
9+
BaselineCallLinkInfo is included in metadata, and allocated for LLInt and Baseline. So shrinking it can make
10+
metadata small for LLInt and Baseline, which exists for all live functions.
11+
12+
We also reorder OpIteratorOpen::Metadata and OpIteratorNext::Metadata to shrink sizes.
13+
14+
sizeof(BaselineCallLinkInfo) becomes 88, while the old sizeof(CallLinkInfo) was 120.
15+
16+
* bytecode/AccessCase.cpp:
17+
(JSC::AccessCase::generateImpl):
18+
* bytecode/BytecodeList.rb:
19+
* bytecode/CallLinkInfo.cpp:
20+
(JSC::CallLinkInfo::setMonomorphicCallee):
21+
(JSC::CallLinkInfo::emitFastPathImpl):
22+
(JSC::OptimizingCallLinkInfo::emitFastPath):
23+
(JSC::OptimizingCallLinkInfo::emitTailCallFastPath):
24+
(JSC::OptimizingCallLinkInfo::emitSlowPath):
25+
(JSC::CallLinkInfo::emitDataICSlowPath):
26+
(JSC::OptimizingCallLinkInfo::slowPathStart):
27+
(JSC::OptimizingCallLinkInfo::fastPathStart):
28+
(JSC::OptimizingCallLinkInfo::emitDirectFastPath):
29+
(JSC::OptimizingCallLinkInfo::emitDirectTailCallFastPath):
30+
(JSC::OptimizingCallLinkInfo::initializeDirectCall):
31+
(JSC::OptimizingCallLinkInfo::setDirectCallTarget):
32+
(JSC::BaselineCallLinkInfo::initialize):
33+
(JSC::CallLinkInfo::slowPathStart): Deleted.
34+
(JSC::CallLinkInfo::fastPathStart): Deleted.
35+
(JSC::CallLinkInfo::emitFastPath): Deleted.
36+
(JSC::CallLinkInfo::emitTailCallFastPath): Deleted.
37+
(JSC::CallLinkInfo::emitSlowPath): Deleted.
38+
(JSC::CallLinkInfo::initializeDataIC): Deleted.
39+
(JSC::CallLinkInfo::emitDirectFastPath): Deleted.
40+
(JSC::CallLinkInfo::emitDirectTailCallFastPath): Deleted.
41+
(JSC::CallLinkInfo::initializeDirectCall): Deleted.
42+
(JSC::CallLinkInfo::setDirectCallTarget): Deleted.
43+
* bytecode/CallLinkInfo.h:
44+
(JSC::CallLinkInfo::type const):
45+
(JSC::CallLinkInfo::CallLinkInfo):
46+
(JSC::CallLinkInfo::calleeGPR const):
47+
(JSC::CallLinkInfo::callLinkInfoGPR const):
48+
(JSC::CallLinkInfo::setCallLinkInfoGPR):
49+
(JSC::CallLinkInfo::setUpCall): Deleted.
50+
(JSC::CallLinkInfo::setCodeLocations): Deleted.
51+
(JSC::CallLinkInfo::calleeGPR): Deleted.
52+
* bytecode/CallLinkStatus.cpp:
53+
(JSC::CallLinkStatus::computeFor):
54+
* bytecode/CodeBlock.cpp:
55+
(JSC::CodeBlock::finishCreation):
56+
(JSC::CodeBlock::setupWithUnlinkedBaselineCode):
57+
(JSC::CodeBlock::finalizeUnconditionally):
58+
(JSC::CodeBlock::getICStatusMap):
59+
(JSC::CodeBlock::jettison):
60+
* bytecode/GetterSetterAccessCase.h:
61+
* bytecode/PolymorphicAccess.h:
62+
* bytecode/Repatch.cpp:
63+
(JSC::revertCall):
64+
(JSC::linkDirectCall):
65+
* bytecode/Repatch.h:
66+
* dfg/DFGCommonData.h:
67+
(JSC::DFG::CommonData::addCallLinkInfo):
68+
* dfg/DFGJITCompiler.cpp:
69+
(JSC::DFG::JITCompiler::link):
70+
* dfg/DFGJITCompiler.h:
71+
(JSC::DFG::JITCompiler::addJSCall):
72+
(JSC::DFG::JITCompiler::addJSDirectCall):
73+
(JSC::DFG::JITCompiler::JSCallRecord::JSCallRecord):
74+
(JSC::DFG::JITCompiler::JSDirectCallRecord::JSDirectCallRecord):
75+
* dfg/DFGOperations.cpp:
76+
(JSC::DFG::JSC_DEFINE_JIT_OPERATION):
77+
* dfg/DFGOperations.h:
78+
* dfg/DFGSpeculativeJIT32_64.cpp:
79+
(JSC::DFG::SpeculativeJIT::emitCall):
80+
* dfg/DFGSpeculativeJIT64.cpp:
81+
(JSC::DFG::SpeculativeJIT::emitCall):
82+
* ftl/FTLLowerDFGToB3.cpp:
83+
(JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq):
84+
* jit/CallFrameShuffleData.cpp:
85+
(JSC::CallFrameShuffleData::createForBaselineOrLLIntTailCall):
86+
* jit/GCAwareJITStubRoutine.cpp:
87+
(JSC::MarkingGCAwareJITStubRoutine::MarkingGCAwareJITStubRoutine):
88+
(JSC::GCAwareJITStubRoutineWithExceptionHandler::GCAwareJITStubRoutineWithExceptionHandler):
89+
(JSC::createICJITStubRoutine):
90+
* jit/GCAwareJITStubRoutine.h:
91+
* jit/JITCall.cpp:
92+
(JSC::JIT::compileCallEvalSlowCase):
93+
(JSC::JIT::compileTailCall):
94+
(JSC::JIT::compileOpCall):
95+
(): Deleted.
96+
* wasm/js/JSWebAssemblyCodeBlock.h:
97+
* wasm/js/WasmToJS.cpp:
98+
(JSC::Wasm::wasmToJS):
99+
* wasm/js/WasmToJS.h:
100+
1101
2021-12-08 Asumu Takikawa <asumu@igalia.com>
2102

3103
Support WebAssembly.Memory imports in Wasm/ESM modules.

‎Source/JavaScriptCore/bytecode/AccessCase.cpp‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1997,7 +1997,7 @@ void AccessCase::generateImpl(AccessGenerationState& state)
19971997
state.setSpillStateForJSGetterSetter(spillState);
19981998

19991999
RELEASE_ASSERT(!access.callLinkInfo());
2000-
CallLinkInfo* callLinkInfo = state.m_callLinkInfos.add(stubInfo.codeOrigin);
2000+
auto* callLinkInfo = state.m_callLinkInfos.add(stubInfo.codeOrigin);
20012001
access.m_callLinkInfo = callLinkInfo;
20022002

20032003
// FIXME: If we generated a polymorphic call stub that jumped back to the getter

‎Source/JavaScriptCore/bytecode/BytecodeList.rb‎

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626

2727
:BasicBlockLocation,
2828
:BoundLabel,
29-
:CallLinkInfo,
29+
:BaselineCallLinkInfo,
3030
:DebugHookType,
3131
:ECMAMode,
3232
:ErrorTypeWithExtension,
@@ -842,7 +842,7 @@
842842
argv: unsigned,
843843
},
844844
metadata: {
845-
callLinkInfo: CallLinkInfo,
845+
callLinkInfo: BaselineCallLinkInfo,
846846
arrayProfile: ArrayProfile,
847847
profile: ValueProfile,
848848
}
@@ -855,7 +855,7 @@
855855
argv: unsigned,
856856
},
857857
metadata: {
858-
callLinkInfo: CallLinkInfo,
858+
callLinkInfo: BaselineCallLinkInfo,
859859
arrayProfile: ArrayProfile,
860860
profile: ValueProfile,
861861
}
@@ -869,7 +869,7 @@
869869
ecmaMode: ECMAMode,
870870
},
871871
metadata: {
872-
callLinkInfo: CallLinkInfo,
872+
callLinkInfo: BaselineCallLinkInfo,
873873
arrayProfile: ArrayProfile,
874874
profile: ValueProfile,
875875
}
@@ -884,7 +884,7 @@
884884
firstVarArg: int,
885885
},
886886
metadata: {
887-
callLinkInfo: CallLinkInfo,
887+
callLinkInfo: BaselineCallLinkInfo,
888888
arrayProfile: ArrayProfile,
889889
profile: ValueProfile,
890890
},
@@ -906,7 +906,7 @@
906906
firstVarArg: int,
907907
},
908908
metadata: {
909-
callLinkInfo: CallLinkInfo,
909+
callLinkInfo: BaselineCallLinkInfo,
910910
arrayProfile: ArrayProfile,
911911
profile: ValueProfile,
912912
},
@@ -928,7 +928,7 @@
928928
firstVarArg: int,
929929
},
930930
metadata: {
931-
callLinkInfo: CallLinkInfo,
931+
callLinkInfo: BaselineCallLinkInfo,
932932
arrayProfile: ArrayProfile,
933933
profile: ValueProfile,
934934
}
@@ -941,7 +941,7 @@
941941
argv: unsigned,
942942
},
943943
metadata: {
944-
callLinkInfo: CallLinkInfo,
944+
callLinkInfo: BaselineCallLinkInfo,
945945
arrayProfile: ArrayProfile,
946946
profile: ValueProfile,
947947
}
@@ -956,7 +956,7 @@
956956
firstVarArg: int,
957957
},
958958
metadata: {
959-
callLinkInfo: CallLinkInfo,
959+
callLinkInfo: BaselineCallLinkInfo,
960960
arrayProfile: ArrayProfile,
961961
profile: ValueProfile,
962962
},
@@ -1257,13 +1257,13 @@
12571257
stackOffset: unsigned,
12581258
},
12591259
metadata: {
1260-
iterationMetadata: IterationModeMetadata,
12611260
iterableProfile: ValueProfile,
1262-
callLinkInfo: CallLinkInfo,
1263-
arrayProfile: ArrayProfile,
1261+
callLinkInfo: BaselineCallLinkInfo,
12641262
iteratorProfile: ValueProfile,
12651263
modeMetadata: GetByIdModeMetadata,
12661264
nextProfile: ValueProfile,
1265+
arrayProfile: ArrayProfile,
1266+
iterationMetadata: IterationModeMetadata,
12671267
},
12681268
checkpoints: {
12691269
symbolCall: nil,
@@ -1281,15 +1281,15 @@
12811281
stackOffset: unsigned,
12821282
},
12831283
metadata: {
1284-
iterationMetadata: IterationModeMetadata,
1285-
iterableProfile: ArrayProfile,
1286-
callLinkInfo: CallLinkInfo,
1287-
arrayProfile: ArrayProfile,
1284+
callLinkInfo: BaselineCallLinkInfo,
12881285
nextResultProfile: ValueProfile,
12891286
doneModeMetadata: GetByIdModeMetadata,
12901287
doneProfile: ValueProfile,
12911288
valueModeMetadata: GetByIdModeMetadata,
12921289
valueProfile: ValueProfile,
1290+
arrayProfile: ArrayProfile,
1291+
iterableProfile: ArrayProfile,
1292+
iterationMetadata: IterationModeMetadata,
12931293
},
12941294
tmps: {
12951295
nextResult: JSValue,

0 commit comments

Comments
 (0)