Phase 22.x WIP: LLVM backend improvements + MIR builder enhancements
LLVM backend improvements: - Add native LLVM backend support (NYASH_LLVM_BACKEND=native) - Add crate backend selector with priority (crate > llvmlite) - Add native_llvm_builder.py for native IR generation - Add NYASH_LLVM_NATIVE_TRACE=1 for IR dump MIR builder enhancements: - Refactor lower_if_compare_* boxes for better code generation - Refactor lower_return_* boxes for optimized returns - Refactor lower_loop_* boxes for loop handling - Refactor lower_method_* boxes for method calls - Update pattern_util_box for better pattern matching Smoke tests: - Add phase2100 S3 backend selector tests (17 new tests) - Add phase2120 native backend tests (4 new tests) - Add phase2034 MIR builder internal tests (2 new tests) - Add phase2211 TLV shim parity test Documentation: - Update ENV_VARS.md with LLVM backend variables - Update CURRENT_TASK.md with progress - Update README.md and CHANGELOG.md Config: - Add NYASH_LLVM_BACKEND env support in src/config/env.rs - Update ny_mir_builder.sh for backend selection - Update dispatch.rs for backend routing Tools: - Add tools/native_llvm_builder.py - Update smokes/v2/profiles/quick/core/phase2100/run_all.sh Known: Many Hako builder internal files modified for optimization
This commit is contained in:
@ -2,6 +2,10 @@
|
||||
|
||||
This document lists the environment flags introduced or used by the Phase 22.1 work. Defaults are OFF and behavior remains unchanged unless noted.
|
||||
|
||||
- NYASH_JSON_ONLY=0|1
|
||||
- Quiet JSON pipelines: suppresses `RC:` and routine logs on stdout (diagnostics still go to stderr).
|
||||
- Used by Stage‑B → Program(JSON) emit to keep the output clean for downstream processing.
|
||||
|
||||
- HAKO_USING_SSOT=0|1
|
||||
- Enables the SSOT resolver gate in the runner pipeline.
|
||||
- When ON, resolution first consults the SSOT bridge (modules-only MVP). If not resolved, it falls back to the existing resolver.
|
||||
@ -91,13 +95,34 @@ LLVM backend selector (builder wrapper)
|
||||
- `crate`: uses `./target/release/ny-llvmc` (build with `cargo build -p nyash-llvm-compiler --release`).
|
||||
- `native`: reserved for future Hako-native builder.
|
||||
- Linking extras for `--emit exe`: pass via `HAKO_AOT_LDFLAGS` (e.g., `-static`), `ny-llvmc` consumes `--libs`.
|
||||
- Note: crate 経路では ny_main の戻り値(i64)がプロセスの終了コードに反映されます(rc mapping)。
|
||||
|
||||
- HAKO_LLVM_CANARY_NORMALIZE=0|1
|
||||
- 開発/カナリア専用の正規化スイッチ。`1` のとき、最小の JSON 形状差(`schema_version=1` → `"1.0"`、`blocks.inst` → `instructions`、`const` の `ty/value` 包装)を自動補正してからビルドします。
|
||||
- 既定は `0`(無効)。既存ツールの挙動は変わりません。`NYASH_CLI_VERBOSE=1` のとき形状ヒントを `[ny-llvmc/hint]` で出力します。
|
||||
|
||||
Name mapping note (EXE link convenience)
|
||||
- nyash.console.* は C リンク時にシンボル名 `nyash_console_*` に正規化される(ドット→アンダースコア)。
|
||||
- 例: `externcall nyash.console.log(i8*)` → C シンボル `nyash_console_log`。
|
||||
- 最小 C ランタイム(Phase 22.3)の `nyash-kernel-min-c` は `nyash_console_log(char*)` を提供(設計段階)。
|
||||
|
||||
|
||||
Kernel Minimal C Runtime (Phase 22.3 — design)
|
||||
- NYASH_KERNEL_C_MIN=0|1
|
||||
- Reserved toggle for enabling the minimal C runtime shims(design‑stage; defaults OFF)
|
||||
- Build: `cargo build --release -p nyash-kernel-min-c`(not linked by default)
|
||||
|
||||
ENV consolidation (aliases)
|
||||
- NY compiler path
|
||||
- Primary: `NYASH_USE_NY_COMPILER=0|1`
|
||||
- Accepted aliases (deprecated; prints a one‑time warning):
|
||||
- `NYASH_DISABLE_NY_COMPILER=1` → equivalent to `NYASH_USE_NY_COMPILER=0`
|
||||
- `HAKO_DISABLE_NY_COMPILER=1` → equivalent to `NYASH_USE_NY_COMPILER=0`
|
||||
- LLVM opt level
|
||||
- Primary: `NYASH_LLVM_OPT_LEVEL`
|
||||
- Accepted alias (deprecated; one‑time warning): `HAKO_LLVM_OPT_LEVEL`
|
||||
- Gate‑C (Core direct route)
|
||||
- Primary: `NYASH_GATE_C_CORE`
|
||||
- Accepted alias (deprecated; one‑time warning): `HAKO_GATE_C_CORE`
|
||||
|
||||
Notes
|
||||
- Primary keys are preferred and will be kept. Aliases remain accepted for a grace period and emit a concise deprecation line once per process.
|
||||
|
||||
Reference in New Issue
Block a user