HotSpot JIT가 비트를 추론하는 법: 컴파일러가 (x << 2) & -4를 단순한 시프트로 최적화하는 비밀

The mask that compiles to nothing: how HotSpots JIT learned to reason about bits

HotSpot JIT가 비트를 추론하는 법: 컴파일러가 (x << 2) & -4를 단순한 시프트로 최적화하는 비밀

QuestDB 팀이 HotSpot JVM의 C2 JIT 컴파일러가 비트 연산을 최적화하는 방법을 분석한다. 개발자가 (x << 2) & -4 같은 표현식을 작성하면, 컴파일러는 AND 연산이 실제로 아무 효과가 없음을 증명하고 제거할 수 있다. 이 글은 C2가 숫자에 대해 알고 있는 정보를 범위(range)와 known bits(알려진 비트)라는 두 가지 추상화로 표현하고, 이들을 상호 보완적으로 활용하는 방법을 설명한다. LLVM과 GCC도 유사한 기법을 사용하며, HotSpot은 JDK 26과 27에서 이 기능을 도입했다. 코드 예제와 함께 컴파일러 최적화의 내부 동작을 자세히 살펴본다.

범위는 값이 작다고 말할 수 있지만, 값이 짝수라고는 말할 수 없다. 그 지식은 비트에 살고 있으며, 범위만으로는 그것을 표현할 수 없다.

이 날의 다른 글

2026-07-11