LLVM 16 lançado com várias mudanças e melhorias

E foi lançado o LLVM 16 com várias mudanças e melhorias. Confira todas as novidades dessa importante atualização.

LLVM é 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 do tipo RISC (uma máquina virtual de baixo nível com otimização multinível).

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

Agora, após pouco mais de seis meses de desenvolvimento, foi anunciado o lançamento da nova versão do projeto LLVM 16.0, versão na qual estão implementadas um grande número de alterações e melhorias.

Novidades do LLVM 16

LLVM 16 lançado com várias mudanças e melhorias
LLVM 16 lançado com várias mudanças e melhorias

No LLVM 16 podemos encontrar várias melhorias importantes no Clang 16.0, das quais se destaca o padrão padrão C++/ObjC++ que está estabelecido no gnu++17 (anteriormente gnu++14), o que implica suporte para funções de 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 mudança que se destaca é que o suporte para CPUs Cortex-A715, Cortex-X3 e Neoverse V2, extensões Armv8.3 e recursos de multiversão foram adicionados ao back-end AArch64.

O suporte para as plataformas Armv2, Armv2A, Armv3 e Armv3M foi descontinuado no back-end da arquitetura ARM, para o qual a geração correta de código não foi garantida.

Também foi adicionada a capacidade de gerar código para instruções para trabalhar com números complexos e suporte adicionado para AMX-FP16, CMPCXADD, AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT arquiteturas de conjunto de instruções (ISA) para o backend X86.

Além disso, os requisitos para a construção do LLVM foram aumentados, e 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, back-ends aprimorados para arquiteturas MIPS, PowerPC e RISC-V também são destacados, bem como suporte para depuração de 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 alterações destacam-se:

  • 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).
  • Alterada a ordem de carregamento dos arquivos de configuração padrão: o clang primeiro tenta carregar o arquivo <triple>-<driver>.cfg e, se não o encontrar, tenta carregar dois <driver>.cfg e <triple>.cfg arquivos .
  • 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 ao lançar tipos de função.

Para saber mais sobre essa versão do LLVM, acesse a nota de lançamento.

Como instalar ou atualizar o LLVM

Para instalar a versão mais recente do LLVM nas principais distribuições Linux, basta procurá-lo no gerenciador de pacotes de sua distribuição.

Sobre o Edivaldo Brito

Edivaldo Brito é analista de sistemas, gestor de TI, blogueiro e também um grande fã de sistemas operacionais, banco de dados, software livre, redes, programação, dispositivos móveis e tudo mais que envolve tecnologia.

1 comentário em “Como converter imagens para vídeo no Linux”

Deixe um comentário

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.