O novo LLVM 16.0 acaba de ser lançado com novo suporte para CPU Intel/AMD. Existem pelo menos duas versões anuais deste compilador de código aberto.
Desde o suporte inicial ao AMD Zen 4 até a criação de novos conjuntos de instruções de CPU Intel e destinos de processador para seus novos processadores sendo introduzidos até 2024, há muitas adições de hardware interessantes no LLVM 16.0.
O LLVM 16.0 também se destaca pela vinculação LLD mais rápida, seções de depuração compactadas Zstd, estabilização de seu destino LoongArch, padrão para C++ 17 para Clang e muito mais. Aqui está uma olhada em todas as mudanças emocionantes do LLVM 16.
Os destaques do LLVM 16, juntamente com seus subprojetos como Clang 16 e LLD 16, incluem os seguintes itens que me interessam:
- O padrão C++ padrão do Clang agora é GNU++17 ( o dialeto GNU de C++17) em vez de GNU++14/C++14 como padrão anterior.
- Mais recursos C++20 foram implementados juntamente com correções de bugs para recursos C++20 existentes e também fazendo algumas preparações para recursos C++2b.
- Mais recursos C2X também foram implementados para Clang 16.0.
- Várias melhorias de diagnóstico do compilador Clang 16.
- O linker LLD do LLVM 16 tem velocidades de link muito mais rápidas para objetos ELF em comparação com o LLVM 15.
- O LLVM 16 LLD agora também suporta seções compactadas Zstd, semelhante ao suporte Zstd do GCC 13.
- O back-end da CPU LoongArch do LLVM foi promovido de “experimental” e agora está ativado por padrão. Há também suporte inicial LoongArch JITLink e outros recursos ativados. O depurador LLDB do LLVM também suporta a depuração de binários LoongArch de 64 bits, bem como o suporte ao compilador Clang, que está em boa forma agora para esta arquitetura de CPU chinesa.
- As novas extensões Intel x86 ISA são compatíveis com LLVM 16.0, incluindo AMX-FP16, CMPCCXADD, AVX-IFMA, AVX-VNNI-INT8 e AVX-NE-CONVERT.
- Novos alvos de CPU Intel suportados são Raptor Lake, Meteor Lake, Emerald Rapids, Sierra Forest, Granite Rapids e Grand Ridge.
- Suporte inicial para processadores AMD Zen 4 com -march=znver4, mas não contém o ajuste que ocorreu após a ramificação LLVM 16.
- O back-end RISC-V do LLVM adicionou suporte para muitas novas extensões como Zca, Zbe, Zbf, Zbm, Zbp, Zbr e Zbt.
- O LLVM adicionou suporte para os núcleos Arm Cortex-A715 / Cortex-X3 / Neoverse-V2.
- O back-end AArch64 do LLVM agora suporta Function Multi-Versioning (FMV) para permitir que caminhos de código personalizados sejam seguidos para desempenho otimizado com base nos recursos/CPU em tempo de execução.
- O suporte para arquiteturas Armv2A / Armv2A / Armv3 / Armv3M foi removido.
- A biblioteca padrão libc++ C++ do LLVM 16 adicionou suporte para mais recursos C++20 e C++23. Entre essas mudanças estão o operador de espaçonave C++20 que suporta mais tipos, a biblioteca de intervalos C++20 foi concluída e a biblioteca de formatos C++20 foi aprimorada.
O LLVM 16.0 está disponível para download no GitHub no formato de origem e em vários binários de lançamento. Há também um breve anúncio de lançamento no Discourse LLVM.