Compose Compiler IR Dump + Plugin Internals

Compose IR Dump Generation + Compose Compiler Plugin Internals

1. IR Dump를 실제로 생성하는 방법

Gradle 설정

tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>().configureEach {
    kotlinOptions.freeCompilerArgs += listOf(
        "-Xir-dump",
        "-Xir-dump-directory=build/ir"
    )
}

실행 결과

  • build/ir/ 내부에 *.ir, *.txt 파일 생성
  • CompositionLocalProvider는 startGroup/endGroup로 lowering됨
  • remember는 RememberObserver 노드와 함께 저장됨

2. Compose Compiler Plugin Internals Overview

Compose Compiler 역할

  • Composable 분석
  • SlotTable 삽입 코드 생성
  • Group boundary 생성
  • remember / CompositionLocal lowering
  • Recomposer가 소비할 메타데이터 생성

주요 lowering phase

ComposableDeclarationTransformer
ComposableJvmLowering
ComposerParamRemover
LateInitRemover
SlotTableBuilderLowering
RememberLowering
CompositionLocalLowering

각 lowering은 다음 형태의 IR을 생성한다:

composer.startReplaceableGroup(key)
composer.updateProvider(LocalA, value)
composer.endReplaceableGroup()

3. IR Dump 분석 예시

%tmp0 = call composer.consume(LocalSpacing)
store %tmp0 into local variable

%composer.startReplaceableGroup(187723)
%composer.updateProvider(LocalLocale, value)
invoke children
%composer.endReplaceableGroup()

IR dump는 성능 최적화 및 동작 이해에 매우 유용하다.