콘텐츠로 이동

SIL (Swift Intermediate Language)

SIL은 Swift 컴파일러의 고수준 중간 표현(IR)으로, SSA(Static Single Assignment) 형식이며 풍부한 시맨틱 정보를 유지한다.

세 가지 표현

  1. In-memory: 컴파일러 내부 자료 구조. 최적화 패스가 사용
  2. Textual: .sil 파일. 사람이 읽을 수 있는 형식 (Swift 구문 확장)
  3. Binary: .swiftmodule 파일. 컴파일러 버전 간 호환 불가

컴파일러 파이프라인에서의 위치

Parser → Sema → SILGen(raw SIL) → Mandatory Passes(canonical SIL)
→ Optimization Passes → IRGen(LLVM IR) → LLVM Backend
  • Raw SIL: SILGen 직후. SSA 그래프 불완전, 데이터플로 오류 허용. assign 등 비정규 인스트럭션 포함
  • Canonical SIL: mandatory pass 이후. 데이터플로 오류 제거, 인스트럭션 정규화 완료. IRGen 입력 가능

Ownership SSA (OSSA)

SSA 값의 소유권 불변식을 강제하는 확장 형식: - use-after-free 및 메모리 누수를 정적으로 검증 - SILGen이 OSSA를 생성하며, mandatory + 일부 optimization 단계까지 유지 - 특정 시점에 plain SSA로 "lowering" — 이후 소유권 검증 불가

핵심 SIL 문서

문서 내용
SIL 타입 SIL 타입 시스템
SIL 인스트럭션 SIL 인스트럭션 목록
SIL 소유권 모델 (OSSA) 소유권 모델 상세
SIL 함수 속성 함수 속성
SIL 함수 호출 규약 함수 호출 규약
SIL 메모리 접근 모델 메모리 접근 모델
SIL ARC 최적화 ARC 최적화
SIL 유틸리티 SIL 유틸리티
SIL 초기화 규약 이니셜라이저 규약

파일 위치

  • swift/lib/SIL/ — SIL 자료 구조 구현
  • swift/lib/SILGen/ — AST → SIL 생성
  • swift/lib/SILOptimizer/ — 최적화 패스
  • swift/lib/SIL/Parser/ — 텍스트 SIL 파서
  • swift/include/swift/SIL/ — SIL 헤더

관련 페이지: Swift 컴파일러 모노레포 개요, Swift 옵티마이저 설계, 컴파일러 디버깅 가이드, 컴파일러 성능 측정, 컴파일러 용어 사전