LLVM 16.0 e foi lançado e estas são as suas novidades

Logotipo LLVM

O LLVM é um framework para desenvolvimento de compiladores, além de ajudar a construir novas linguagens de programação e melhorar as linguagens existentes.

Após pouco mais de seis meses de desenvolvimento, o lançamento de a nova versão do projeto LLVM 16.0, versão na qual um grande número de mudanças e melhorias são implementadas.

Para aqueles que não estão familiarizados com o LLVM, você deve saber que este é um compilador compatível com GCC (compiladores, otimizadores e geradores de código) que compila programas em um bitcode intermediário de instrução virtual semelhante ao RISC (uma máquina virtual de baixo nível com um sistema de otimização multinível).

O pseudocódigo gerado pode ser convertido pelo compilador JIT em instruções de máquina apenas no momento da execução do programa.

Principais novos recursos do LLVM 16.0

Nesta nova versão que se apresenta podemos encontrar várias melhorias importantes no clang 16.0, dos quais se destaca o padrão padrão C++/ObjC++, que está definido como gnu++17 (anteriormente gnu++14), que implica suporte para recursos C++17 com extensões GNU por padrão. O uso de elementos definidos no padrão C++17 é permitido no código LLVM.

Outra das mudanças que se destaca é que foi adicionado suporte para CPUs Cortex-A715, Cortex-X3 e Neoverse Extensões V2, Armv8.3 e recursos de várias versões para o back-end AArch64.
La compatibilidade de plataforma Armv2, Armv2A, Armv3 e Armv3M foram descontinuados no back-end da arquitetura ARM, para o qual a geração correta do código não foi garantida. Adicionado a capacidade de gerar código para instruções para trabalhar com números complexos e adicionado suporte para arquiteturas de conjuntos de instruções (ISA) AMX-FP16, CMPCXADD, AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT para back-end X86.

Além disso, os requisitos para construir LLVM foram aumentados, Além disso, a compilação agora deve ser compatível com o padrão C++ 17, ou seja, a compilação requer pelo menos GCC 7.1, Clang 5.0, Apple Clang 10.0 ou Visual Studio 2019 16.7.

Por outro lado, também destaca back-ends aprimorados para arquiteturas MIPS, PowerPC e RISC-V, bem como suporte para depurar executáveis ​​de 64 bits para a arquitetura LoongArch para o depurador LLDB e manipulação aprimorada de símbolos de depuração COFF.

Das outras mudanças que se destacam:

  • Na biblioteca Libc++, o trabalho principal foi focado na implementação do suporte a novas funcionalidades dos padrões C++20 e C++23.
  • O tempo de link foi significativamente reduzido no linker LDD ao paralelizar a varredura de realocação de endereço e as operações de inicialização de seção. Adicionado suporte para compressão de seção usando o algoritmo ZSTD.
  • As funções avançadas implementadas com o padrão C++20 também são destacadas.
  • capturar links estruturados em funções lambda.
  • O operador de igualdade nas expressões.
  • Capacidade de não especificar a palavra-chave typename em alguns contextos,
  • Admissibilidade de inicialização adicionada entre parênteses ("Aggr(val1, val2)").
  • Funções implementadas definidas no futuro padrão C++ 2b.
  • Suporte fornecido com o tipo char8_t,
  • Ampliado o intervalo de caracteres permitido para uso em "\N{…}",
  • Adicionada a capacidade de usar variáveis ​​declaradas como "static constexpr" em funções declaradas como constexpr.
  • Funções implementadas definidas no futuro padrão C2x C:
  • Adicionado suporte para carregar vários arquivos de configuração (os arquivos de configuração padrão são carregados primeiro, depois os especificados por meio do sinalizador “–config=", que agora pode ser especificado várias vezes).
  • Ordem de carregamento alterada dos arquivos de configuração padrão: o clang tenta carregar o arquivo primeiro - .cfg e se não encontrar, tenta carregar dois arquivos .cfg e .cfg.
  • Adicionado um novo sinalizador de compilação "-fcoro-aligned-allocation" para distribuição alinhada de quadro de rotina.
  • Adicionado o sinalizador "-fmodule-output" para habilitar o modelo de construção de fase única de módulos C++ padrão.
  • Adicionado o modo "-Rpass-analysis=stack-frame-layout" para diagnosticar problemas com o layout do quadro de pilha.
  • Adicionado um novo atributo __attribute__((target_version("cpu_features"))) e estendeu a funcionalidade do atributo __attribute__((target_clones("cpu_features1″,"cpu_features2",…))) para selecionar versões específicas de recursos fornecidos pela CPU AArch64 .
  • Ferramentas de diagnóstico aprimoradas:
  • Aviso adicionado "-Wsingle-bit-bitfield-constant-conversion" para detectar truncamento implícito ao atribuir um a um campo de bits com sinal de um bit.
  • Diagnóstico estendido para variáveis ​​constexpr não inicializadas.
  • Adicionados avisos "-Wcast-function-type-strict" e "-Winfunctional-function-pointer-types-strict" para detectar possíveis problemas com tipos de função de conversão.

Finalmente Se você estiver interessado em saber mais sobre isso, você pode verificar os detalhes no link a seguir


Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: AB Internet Networks 2008 SL
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.