Code Generation

Backends and lowering: Cranelift, native, LLVM, GPU, and debug info.

Code Generation

La generación de código es donde Sounio muestra con más claridad que existen varios perfiles reales de compilador. La descripción correcta ya no es “el artefacto por defecto expone un solo camino”, sino “el repositorio publica artefactos versionados separados para JIT y GPU, y cada uno expone un contrato de backend distinto”.

Mapa actual del código fuente

  • self-hosted/native/ cubre lowering nativo, codificacion, ABI, asignacion de registros y formatos de objeto.
  • self-hosted/wasm/ cubre lowering, codificacion y construccion de modulos para WASM.
  • self-hosted/gpu/ cubre PTX, SPIR-V, Metal, trabajo tensorial y lowering GPU.
  • self-hosted/llvm/ sigue presente como subarbol orientado a LLVM.

Lo que prueban los artefactos versionados

  • Perfil JIT: Cranelift JIT habilitado; LLVM y GPU codegen deshabilitados.
  • Perfil GPU: GPU codegen habilitado; JIT deshabilitado; emision PTX disponible mediante build --backend gpu.
  • La documentacion debe distinguir entre comportamiento del perfil por defecto, comportamiento del perfil GPU y amplitud de implementacion en el arbol de fuentes.

Ruta nativa preview v2

El repositorio ahora tambien incluye una ruta preview publica native-v2 para el programa de soberania del backend. El alias de compatibilidad native-v2-shadow ya fue retirado. No es un nuevo backend estable para usuarios finales.

  • Sirve para fijar RuntimeContext, la politica de registros por objetivo y las expectativas de Machine IR en un artefacto legible por maquina.
  • La ruta preview actual de x86-64 ahora baja por un camino real de Machine IR + legalizacion, emite ELFs nativos scalar_core en la shell self-hosted, publica gc_state y una tabla de descriptores de objetos gestionados via RuntimeContext, enruta los objetos heap de native-v2 por una tabla fija de handles para acceso alloc/field/index, incorpora un modelo ejecutable de GC mark-compact guiado por descriptores con escaneo preciso y reglas de pinning, y las familias de opcode fuera de ese subconjunto fallan de forma cerrada.
  • AArch64 ya esta definido en el contrato como politica, pero todavia no ha sido promovido como emisor nativo publicado.

Confirmar el conjunto activo de backends

export SOUC_BIN="$(pwd)/artifacts/omega/souc-bin/souc-linux-x86_64-jit"
"$SOUC_BIN" info

export SOUC_GPU_BIN="$(pwd)/artifacts/omega/souc-bin/souc-linux-x86_64-gpu"
"$SOUC_GPU_BIN" info
"$SOUC_GPU_BIN" build examples/kernel_vec_add.sio --backend gpu -o /tmp/kernel_vec_add.ptx

export SOUNIO_NATIVE_V2_CONTRACT_PATH=/tmp/native_backend_v2_contract.v1.json
"$SOUC_BIN" run self-hosted/compiler/main.sio -- --self-test

El artefacto canonico protegido por gates es artifacts/omega/native_backend_v2_contract.v1.json.

Como escribir docs de codegen sin que envejezcan

  • Describe los directorios de backend cuando hables de arquitectura de implementacion.
  • Describe el artefacto JIT versionado cuando hables de la experiencia publica por defecto.
  • Describe el artefacto GPU versionado cuando hables de codegen GPU publico.
  • Solo documenta rutas de ejecucion de backend que hayas validado con el artefacto y el comando exactos.