피드로 돌아가기
Cx Dev Log — 2026-05-01
Dev.toDev.to
Backend

IR Ptr 타입 도입 및 Struct Registry 구축을 통한 메모리 구조 지원

Cx Dev Log — 2026-05-01

COMMENTERTHE92026년 5월 3일3advanced

Context

단일 레지스터 값 이상의 메모리 구조를 처리하지 못하는 IR 백엔드의 한계 존재. Struct의 메모리 표현식 인식 및 조작을 위한 구조적 기반 마련이 필요한 상황.

Technical Solution

  • Ptr 타입을 IR 타입 시스템에 도입하여 8바이트 크기와 8바이트 Alignment 보장
  • Alloca, Load, Store 명령어를 추가하여 스택 공간 할당 및 포인터 기반 메모리 읽기/쓰기 구현
  • build_struct_table()을 통해 SemanticStmt::StructDef를 순회하며 StructLayoutInfo를 생성하는 Registry 설계
  • compute_struct_layout()으로 필드 오프셋과 크기를 단 한 번만 계산하여 중복 연산 제거 및 효율성 확보
  • SemanticType::Struct를 IrType::Ptr로 매핑하여 LLVM 스타일의 효율적인 구조체 처리 방식 채택
  • IR Validator에 43라인의 검증 로직을 추가하여 Alloca의 크기 및 2의 거듭제곱 Alignment 강제

1. IR 설계 시 단일 레지스터 한계를 극복하기 위한 Ptr 타입 및 메모리 연산자(Alloca, Load, Store) 정의 여부 검토

2. 구조체 레이아웃 계산 시 중복 연산을 방지하는 단일 통과(Single-pass) Registry 패턴 적용 고려

3. Lowering 패스에서 타입 매핑 시 LLVM 등 검증된 컴파일러의 구조체-포인터 처리 전략 벤치마킹

원문 읽기