← All issues

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이 등록되었습니다.

벤치마크에서 약 19%의 성능 향상이 관찰되었습니다. 다만 더 중요한 점은, 새로운 DFG intrinsic은 clobberize, doesGC, safeToExecute, prediction propagation, loop unrolling, 그리고 양쪽 speculative JIT backend를 모두 통과해야 하며, 각 단계와의 상호작용 하나하나가 잠재적인 miscompilation 지점이 된다는 것입니다.

🔒

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.

더 확인하려면 구독해 주세요