Pesquisadores da Universidade Técnica de Munique publicaram a ferramenta TPDE e o backend do compilador baseado nela para LLVM — TPDE-LLVM, que gera código de máquina para as arquiteturas x86-64 e AArch64 com base na representação intermediária de código LLVM-IR. Durante os testes, o TPDE-LLVM se mostrou de 10 a 20 vezes mais rápido que o backend LLVM -O0 (gerador de código sem otimizações) mantendo o mesmo nível de desempenho do código de máquina resultante e um aumento de tamanho de 10 a 30%. Os desenvolvimentos do projeto foram publicados sob a licença Apache 2.0.
O TPDE-LLVM é inicialmente focado em proporcionar uma compilação com latências mínimas e um nível de qualidade correspondente ao modo de compilação sem otimizações ('-O0'). O projeto oferece uma ferramenta para execução isolada do tpde-llc, uma biblioteca para integração em aplicações (por exemplo, para implementação da funcionalidade de compilador JIT) e patches para integração com Clang e Flang.

O projeto pode ser usado como um componente compilador básico para JIT ou para criação de compilações não otimizadas. O TPDE-LLVM concentra-se apenas na velocidade de compilação e não procura competir com os backends otimizadores do LLVM, que, em comparação com o TPDE-LLVM, operam de forma significativamente mais lenta, mas permitem gerar código de máquina mais rápido e compacto (cerca de 2 vezes mais rápido e 2 vezes menor em tamanho).
O TPDE-LLVM utiliza três estágios para a geração de código:
- Limpeza e preparação da representação intermediária LLVM;
- Análise das informações sobre ciclos e uso de variáveis;
- Formação do código de máquina.

Observa-se que, com a participação dos autores do TPDE, já foram adicionadas otimizações nos ramos 19 e 20 do LLVM, que permitiram acelerar o trabalho do backend padrão do LLVM em 18% na plataforma x86-64 e em 13% na plataforma ARM64. Na opinião dos autores do TPDE, no futuro pode ser possível acelerar o backend do LLVM em mais 10 a 20% com poucas mudanças, mas melhorias adicionais no desempenho exigirão alterações significativas. Mesmo com uma reestruturação substancial, é improvável que o backend atual do LLVM consiga ser acelerado em 10 vezes.
Na atual fase de desenvolvimento, um dos objetivos do projeto TPDE é garantir o suporte à representação intermediária do código LLVM, obtida pelo front-end Clang nos modos de otimização "-O0" e "-O1". O processamento da representação intermediária criada no modo "-O2" ainda não é garantido devido à falta de suporte no TPDE para operações vetoriais. O código intermediário do Flang e do compilador Rust é parcialmente suportado.
Fonte: opennet.ru
