Pular para o conteúdo

Backend: o mapa

Item por item da parte 8 da referência Deep Tech — LLVM IR, pipeline de otimização, passes customizados e cross compilation — cruzado com o que o DataForge tem.

A oitava parte de uma referência Deep Tech é sobre o backend do LLVM. É a primeira em que a resposta honesta é em boa medida não se aplica — e a parte em que essa resposta é mais útil que qualquer aproximação, porque cada item aqui pressupõe gerar código de máquina.

38 · LLVM IR#

ItemNo DataForgeOnde
SSAexiste de verdade: ssa.py, com dominância, fronteira de dominância e nó φSSA
basic blocksmir.py — um corpo por ação, arestas rotuladasMIR
instructionsas instruções continuam sendo nós da árvore; a versão SSA é anexada, não reescrita em três endereçosSSA
metadata, source locationsline/column em todo nó, e a ação sabe em que arquivo nasceuErros
debug informationexiste, mas é a da linguagem: o DAP, com vigia e ponto de paradaEditor
emissão de LLVM IR, tipos LLVMnão existe: emitir o texto é fácil, mas usá-lo exigiria llc/clang instalado, e a linguagem passaria a depender de um compilador C para rodarBackend
intrinsicsnão se aplica
calling conventionssó na fronteira com o C, onde são reaisFFI

39 · Pipeline de otimização#

ItemNo DataForgeOnde
constant foldingdobra-de-constante, e nada que possa falhar é dobradoOtimização
dead code eliminationramo-morto (com prova do SSA) e inalcancavel; mais unused-* no lintOtimização
o pipeline em sicompilador.py: a árvore vira fechamentos, com cobertura medida — 90,9% dos nós do repositórioOtimização
loop optimizationparcial, e pelo outro lado: o escopo de uma volta é reaproveitado quando o corpo não captura — medido, e a otimização mais perigosa do interpretadorArquitetura
inliningnão existe. Numa linguagem em que uma ação pode ser substituída em tempo de execução (f := outra, método sobrescrito na filha), embutir o corpo exigiria provar identidade — e é a mesma conferência que a chamada de cauda faz na hora, em vez de assumir
vectorization, alias analysisnão se aplica: não há registrador SIMD nem ponteiro a desambiguar
interprocedural / whole-programnão existe no otimizador. O que atravessa fronteira é a análise: aridade, tipo de parâmetro e de retorno pelo adoptAnálise estática
global optimizationnão existe, e há número dizendo por quê: os passes rendem 1,01× em código realOtimização

40 · Passes customizados#

ItemNo DataForgeOnde
custom optimization passes--plugin= — uma regra escrita em DataForge, que vê o MIR e o SSA por Arcane.CompiladorBackend
static analysisé o uso que paga: ramo-morto e talvez-nao-definida nasceram exatamente assimAnálises
instrumentationArcane.Macro.reescrever troca o corpo de uma ação na cargaMacros
IR transformationos três passes de otimizar.py, sobre o HIROtimização
backend hooksparcial: o que dá para ligar é análise e reescrita de árvore, não a geração de código — porque ela não existeBackend
plugins C++, LLVM passesnão se aplica: não há IR do LLVM para transformar

41 · Cross compilation#

ItemNo DataForgeOnde
Linux, Windows, macOSo release.yml constrói nas quatro plataformas e roda os exercícios pelo binário em cada umaDownload
ARM64 e x86_64os dois, no macOS; o Linux sai como .deb e PKGBUILDInstalação
contêiner para outra arquiteturadataforge devops gera Dockerfile e manifesto do KubernetesDevOps
target triples, cross compilernão existe: não há código de máquina a produzir, então não há alvo a nomear. O que atravessa plataforma é o interpretador, e ele atravessa por ser Python
RISC-V, WebAssembly, bare-metal, embarcadosnão existe. Rodar em WebAssembly seria rodar o CPython em WebAssembly — o que funciona, e não é uma porta desta linguagem
targets personalizadosnão se aplica

O resumo honesto#

Das quatro seções, uma (§38) transferiu substancialmente — SSA, blocos básicos e dominância são teoria de compilador, não de LLVM, e valem igual num interpretador. Uma segunda (§40) transferiu pelo análogo: o passe customizado existe, escrito na linguagem, e é a forma como os dois diagnósticos novos nasceram. A §39 transferiu e foi medida, com o resultado contrariando a expectativa. A §41 não se aplica, e o que ocupa o lugar dela — construir para quatro plataformas — já existia.