How pku-minic/koopa works
Koopa is a Rust library for parsing, building, optimizing, and emitting its strongly typed SSA intermediate representation; libkoopa exposes a C interface and raw-IR API. The main workflow is Koopa text input to an in-memory IR program, optional optimization, then Koopa or LLVM text output. The README also documents an optimizer, interpreter, and Brainfuck compiler as examples, not core library subsystems. Some implementation files were unsampled, so uncertain call relationships are omitted.
Main entry points: entities.rs IR Program · driver.rs Front Driver · builder.rs IR Builder · passman.rs Pass Manager
Components 23
Text Front End
- Front Driver
koopa/src/front/driver.rs - Lexer
koopa/src/front/lexer.rs - Parser
koopa/src/front/parser.rs - Syntax Tree
koopa/src/front/ast.rs - IR Builder
koopa/src/front/builder.rs
IR Core
- IR Program
koopa/src/ir/entities.rs - IR Construction
koopa/src/ir/builder.rs - Data Flow Graph
koopa/src/ir/dfg.rs - Block Layout
koopa/src/ir/layout.rs
Optimization
- Pass Manager
koopa/src/opt/passman.rs - Optimization Passes
koopa/src/opt/pass.rs
Generation And C API
- Koopa Generator
koopa/src/back/koopa.rs - LLVM Generator
koopa/src/back/llvm.rs - C API
libkoopa/include/koopa.h - C Driver
libkoopa/src/driver.rs - Raw IR API
libkoopa/src/raw/mod.rs - Raw IR Builder
libkoopa/src/raw/builder.rs - Raw IR Conversion
libkoopa/src/raw/generator.rs
Other components
- Compiler Client
- Koopa IR Text
- C Client
- LLVM IR Text
- Koopa IR Output
Connections 25
- Compiler Client → Koopa IR Text: provides input
- Koopa IR Text → Front Driver: parsed by
- Front Driver → Lexer: tokenizes
- Front Driver → Parser: parses
- Parser → Syntax Tree: produces syntax
- Front Driver → IR Builder: builds IR
- IR Builder → IR Program: populates
- IR Builder → IR Construction: constructs values
- IR Program → Data Flow Graph: organizes values
- IR Program → Block Layout: organizes blocks
- Compiler Client → Pass Manager: may optimize
- Pass Manager → Optimization Passes: runs
- Pass Manager → IR Program: updates
- Compiler Client → Koopa Generator: requests output
- Koopa Generator → IR Program: reads
- Koopa Generator → Koopa IR Output: emits
- Compiler Client → LLVM Generator: requests output
- LLVM Generator → IR Program: reads
- LLVM Generator → LLVM IR Text: emits
- C Client → C API: calls
- C API → C Driver: declares API
- C Driver → Raw IR API: dispatches
- Raw IR API → Raw IR Builder: builds raw view
- Raw IR Conversion → IR Program: generates from raw IR
- C Driver → Front Driver: parses Koopa IR