피드로 돌아가기
Dev.toInfrastructure
원문 읽기
Alloca-mem2reg 패턴을 통한 SSA 제약 해결 및 가변 변수 구현
LLVM #5 — Mutable Variables
AI 요약
Context
Kaleidoscope 언어의 Functional Paradigm 한계로 인한 상태 유지 및 루프 구현 불가능 상태 분석. LLVM IR의 SSA(Static Single Assignment) 제약으로 인해 단일 변수에 대한 다중 할당이 불가능하며, PHI node의 복잡한 배치 계산이 프론트엔드 구현의 병목 지점으로 작용함.
Technical Solution
- 전역 Entry Block 내 Alloca 명령어를 통한 가변 변수 전용 메모리 박스 할당 구조 설계
- 모든 변수 접근을 Load/Store 연산으로 추상화하여 SSA 기반의 PHI node 추적 부담 제거
- NamedValues 맵의 타입을 Value에서 AllocaInst로 변경하여 값 추적 방식에서 메모리 위치 추적 방식으로 전환
- PromotePass(mem2reg)를 적용하여 단순 Load/Store 패턴을 고속 CPU Register 기반의 SSA 형태로 Lifting
- Dominance Frontier 이론을 활용한 mem2reg의 자동 PHI node 배치로 최적의 레지스터 할당 구현
- var/in 구문을 통한 지역 변수 스코프 관리 및 이전 바인딩 복원 로직 적용
실천 포인트
- 복잡한 상태 추적이 필요한 경우, 우선 단순한 메모리 기반 구현 후 최적화 패스에 위임하는 전략 검토 - LLVM 기반 컴파일러 설계 시 Alloca 명령어를 Entry Block에 배치하여 mem2reg 최적화 조건 충족 여부 확인 - 가변 변수 구현 시 AST 수준의 PHI node 계산보다 IR 수준의 Lifting Pass 활용 가능성 분석