SwiftCompilerSources (Swift-in-Swift)¶
Swift로 작성된 컴파일러 구성 요소. C++ 컴파일러를 점진적으로 Swift로 마이그레이션하는 방향.
모듈 구조¶
| 모듈 | 파일 수 | 역할 |
|---|---|---|
Optimizer/ |
115 | SIL 최적화 패스 (Swift 구현) |
SIL/ |
39 | SIL IR 자료 구조의 Swift 래퍼 |
AST/ |
8 | AST 노드의 Swift 브릿징 |
Basic/ |
3 | 기본 유틸리티 |
| 합계 | 165 |
Optimizer 모듈 (핵심)¶
Passes.def에서 PASS/MODULE_PASS로 등록된 42+9=51개의 신규 패스가 모두 Swift로 구현되어 있다. 주요 패스:
AllocBoxToStack— 박스 → 스택 승격Simplification— 인스트럭션 단순화DestroyHoisting— destroy 인스트럭션 호이스팅RedundantLoadElimination— 중복 로드 제거StackPromotion— 힙 → 스택 승격ClosureSpecialization— 클로저 특수화ComputeEscapeEffects/ComputeSideEffects— 효과 분석
C++ Bridging¶
Swift 코드가 C++ 컴파일러와 상호 작용하는 방법:
- Bridging headers:
SIL/모듈이 C++ SIL 자료 구조를 Swift로 래핑 - @_cdecl / @_silgen_name: C++ 에서 Swift 패스를 호출하기 위한 엔트리 포인트
- registerSwiftPasses(): Swift 패스를 C++ 패스 매니저에 등록
마이그레이션 현황¶
- 완료: 42개 함수 패스 + 9개 모듈 패스 (Swift)
- 레거시: 151개 패스 (C++,
LEGACY_PASS) - 방향: 새로운 패스는 반드시 Swift로 작성. 기존 패스는 점진적 마이그레이션
파일 위치¶
swift/SwiftCompilerSources/Sources/— Swift 소스swift/SwiftCompilerSources/CMakeLists.txt— 빌드 설정swift/SwiftCompilerSources/Package.swift— SPM 매니페스트
관련 페이지: sil-optimizer-pass-catalog, optimizer-design, sil-reference, overview