부분 정적 단일 정보 형식
컴파일러 최적화에서 Partial Static Single Information (SSI) 기법이 기존 SSA를 확장하여 경로 의존적이고 흐름 민감적인 타입 정보를 표현할 수 있게 했습니다.
이 방식은 조건문에서 변수의 타입을 정제하는 RefineType 노드를 삽입해 최적화 기회를 제공합니다.
전체 SSI 알고리즘은 복잡하지만, SSA 생성 과정 중에 부분적으로 SSI를 구축하는 partial SSI 접근법이 실용적이고 구현이 간단합니다.
JIT 컴파일러에서는 가드(Guard) 명령어 삽입과 글로벌 값 번호 매기기(GVN)를 활용해 중복 명령을 제거하고, 피연산자 재작성으로 최신 타입 정보를 반영할 수 있습니다.
조건문마다 타입 정제를 반드시 수행할 필요는 없으며, 컴파일 시간과 실행 시간 간의 트레이드오프를 고려해야 합니다.
다른 컴파일러들, 예를 들어 TruffleRuby, Cinder, Luau, Android ART 등도 유사한 타입 정제 기법을 활용해 최적화를 진행하고 있습니다.
특히, 힙 객체와 즉시 값(immediate value)을 구분하는 타입 업그레이드도 SSI 스타일의 타입 정제 예시로 활용됩니다.
결론적으로, 완전한 SSI 구현 없이도 부분 SSI를 통해 효율적인 타입 정제와 최적화가 가능하므로, 컴파일러 설계 시 이를 적극 검토할 필요가 있습니다.