피드로 돌아가기
Cx Dev Log — 2026-04-12
Dev.toDev.to
Infrastructure

LoopContext 도입을 통한 IR 수준의 무한 루프 및 제어 흐름 구현

Cx Dev Log — 2026-04-12

COMMENTERTHE92026년 4월 13일3advanced

Context

기존 IR Lowering 단계에서 infinite loop, break, continue와 같은 복잡한 제어 흐름 처리 능력 부재. 특히 중첩된 if 문 내부의 break가 루프 종료 지점을 정확히 참조하지 못하는 구조적 결함 존재.

Technical Solution

  • LoopContext 구조체 도입을 통한 IR 변환 과정의 문맥 유지 및 중첩 제어 흐름 추적
  • 무한 루프 헤더로의 Unconditional Jump와 Exit Block 설정을 통한 CFG(Control Flow Graph) 생성
  • Loop-carried SSA 보존을 위한 Header의 Branch Terminator 내 else_args 라우팅 최적화
  • SemanticStmt::Break 및 Continue 처리 시 현재 SSA 값을 수집하여 대상 ID(exit_id, header_id)로 Jump Terminator 송출
  • LoopContext 기반의 lower_stmt 수정으로 중첩 if 문 내 break의 올바른 루프 종료 지점 매핑 구현
  • 루프 외부의 제어 구문 호출 시 UnsupportedSemanticConstruct 반환 및 SSA 바인딩 누락 시 InternalInvariantViolation 예외 처리

- 복잡한 제어 흐름 구현 시 문맥을 추적할 수 있는 Context 객체를 도입하여 중첩 구조의 참조 무결성 확보 - CFG 설계 시 루프 진입점(Header)과 탈출점(Exit)의 파라미터를 명확히 정의하여 SSA 데이터 흐름 보장 - 제어 흐름 변환 과정에서 발생 가능한 예외 케이스(루프 외부의 break 등)에 대한 엄격한 에러 모델 정의

원문 읽기