New `DateNow` DFG node
d53865e
Source/JavaScriptCore/dfg/DFGAbstractHeap.h
+ macro(WallClock) \
macro(JSDateFields) \
Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h
+ case DateNow: {
+ setNonCellTypeForNode(node, SpecDoubleReal);
+ break;
+ }
JSC의 DFG JIT는 JS 연산을 타입이 지정된 data-flow graph로 표현합니다. "Intrinsic" 노드는 컴파일러가 알려진 builtin 함수에 대해 full host-call sequence 대신 특화된 machine code를 직접 생성할 수 있도록 합니다. 각 노드는 clobberize, doesGC, safeToExecute, prediction propagation, abstract interpreter 등 여러 분석 단계와 32비트·64비트 speculative JIT backend 양쪽 모두에 등록되어야 합니다.
이 commit에서 DateNow DFG intrinsic이 도입되었습니다. Date.now()는 DFG 및 FTL 계층에서 operationDateNow에 대한 직접 호출을 통해 인라인 처리되며, host function dispatch 오버헤드가 제거되었습니다. 한편 CSE가 두 개의 DateNow 노드를 하나로 합치거나 LICM이 해당 노드를 루프 밖으로 끌어올리는 것을 막기 위해, 새로운 WallClock abstract heap location이 등록되었습니다.
Significance
벤치마크에서 약 19%의 성능 향상이 관찰되었습니다. 다만 더 중요한 점은, 새로운 DFG intrinsic은 clobberize, doesGC, safeToExecute, prediction propagation, loop unrolling, 그리고 양쪽 speculative JIT backend를 모두 통과해야 하며, 각 단계와의 상호작용 하나하나가 잠재적인 miscompilation 지점이 된다는 것입니다.
Audit directions
a Aaaaaaaaaaaaa Aaaaaaaaaa Aaaaa a Aaaaaaaaaaaaa Aaaaa Aaa Aaa Aa a Aa Aaaa Aaaaaa Aaaaaaaaa Aaaa Aaaaa Aaaaaaaaa Aaaa Aaaaa Aaaa Aaaa Aaa Aaaaaaaaaaaa Aa Aaaaa Aaaa Aaa Aaa Aaaa Aaa Aaa Aa Aaaa Aaaaa
a Aaaaaaaaaaaaaaaaaa Aa Aaaaaa Aaaaaaaa Aaaaaaaaaaaa Aa Aaa Aaaaaaaaaaaaaaaaaaaaa Aaaa Aa Aaaaaaaa Aaaaaa Aaa Aa Aaaa Aaaa Aaaaa Aaaaaa Aaaaaaaaaaaaaaaaaaa Aaaa Aaaaaaaaa Aa Aaa Aaaa Aa Aa Aa Aa Aaaaaaaaaaaa Aa Aaa a Aaaaa
a Aaaaaa Aaaaaaaaa Aaaaa Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Aaaaaaaa Aaaaaaaaaa Aaa Aaaaaaa Aaaaaaaaaaa Aaa Aa Aaaaa Aaaa Aaaaaaaaaa Aaaaa Aaaaa Aa Aaaaa Aaa Aaa Aaaa Aaaaa
a Aaaaaa Aaa Aaaaa Aaaa Aaaaaaaaa Aaa Aaa Aaaaa Aa Aaa Aaa Aa Aaaaa a Aaaa Aaa Aaaaaaa Aaa Aaaaa Aaaaaa Aaaaaaa Aaaaaaaaaaaa Aaaaaaaa Aaaaaaaaaa Aaa Aaa Aaaa Aa Aa Aaaaaa
🔒New JIT intrinsic wired through a dozen analysis passes — edge cases in the type annotation, alias modeling, and 32-bit path are worth close review.
더 확인하려면 구독해 주세요