LLVM 12.0 já foi lançado e essas são suas novidades

LLVM

Após seis meses de desenvolvimento foi apresentado o lançamento da nova versão do projeto LLVM 12.0 Compatível com GCC (compiladores, otimizadores e geradores de código) que compila programas em bitcode intermediário de instruções virtuais semelhantes a RISC (uma máquina virtual de baixo nível com um sistema de otimização de vários níveis).

Nesta nova versão podemos encontrar várias melhorias e novidades, do qual podemos destacar um novo atributo de função "tune-cpu" para suportar -mtune como gcc, bem como melhorias para as diferentes plataformas.

Principais novos recursos do LLVM 12.0

Nesta nova versão, podemos descobrir que suporte para o kit de ferramentas llvm-build build escrito em python foi descontinuado, em vez disso, o projeto mudou completamente para usar o sistema de compilação CMake.

O back-end da arquitetura AArch64 melhorou o suporte para a plataforma Windows: a geração correta de saída do assembler é fornecida para sistemas Windows de destino, a geração de dados em chamadas de desenrolamento foi otimizada (o tamanho de tais dados foi reduzido em 60%), a capacidade de criar dados foi adicionada para desenrolar usando diretivas seh.

Enquanto O back-end da arquitetura PowerPC inclui novas otimizações para implantações em linha e em loop, suporte aprimorado para processadores Power10, suporte adicional para instruções MMA para manipulação de matrizes e suporte aprimorado para o sistema operacional AIX.

Pára x86 adicionou suporte para processadores AMD Zen 3, Intel Alder Lake e Intel Sapphire Rapids, bem como instruções para os processadores HRESET, UINTR e AVXVNNI. Removido o suporte para extensões MPX (extensões de proteção de memória) para verificar os ponteiros em relação aos limites da área de memória (essa tecnologia não foi amplamente usada e, desde então, foi removida do GCC e do clang). O montador adicionou suporte para os prefixos {disp32} e {disp8} e os sufixos .d32 e .d8 para controlar o tamanho do deslocamento de operandos e transições. Um novo atributo "tune-cpu" foi adicionado para controlar a ativação de otimizações de microarquitetura.

Outra mudança que se destaca é que um novo modo foi adicionado "-fsanitize = unsigned-shift-base" para detectar estouros de inteiros sem sinal após um deslocamento de bits para a esquerda. Para o formato Mach-O (macOS), o suporte é implementado para arquiteturas arm64, arm e i386, otimização de estágio de link (LTO) e desenrolamento de pilha ao lidar com exceções.

também um novo atributo de recurso "tune-cpu" é destacado que permite ootimizações de microarquitetura são aplicadas independentemente do atributo "target-cpu" ou a CPU TargetMachine que será usada para selecionar o conjunto de instruções. Se o atributo não estiver presente, a CPU de ajuste seguirá a CPU de destino.

Libc ++ implementa novos recursos do padrão C ++ 20 e começou a desenvolver recursos da especificação C ++ 2b, além de adicionado suporte para montagem com suporte desabilitado para localização ("-DLIBCXX_ENABLE_LOCALIZATION = OFF") e dispositivos para gerar números pseudo-aleatórios.

Enquanto das melhorias para Clang 12, para a arquitetura AArch64, novos sinalizadores de compilador foram adicionados "-Moutline-atomics" e "-mno-outline-atomics" para habilitar e desabilitar funções auxiliares atômicas como "__aarch64_cas8_relax". Essas funções de tempo de execução determinam se há suporte para Large System Extensions (LSE) e usam as instruções do processador atômico fornecidas ou reversão para usar as instruções LL / SC (link de carregamento / condicional de armazenamento) para sincronização.

O ponteiro 'this' agora é processado com verificações não nulas e desreferenciáveis (N). A opção "-fdelete-null-pointer-checks" pode ser usada para remover o atributo não nulo quando valores nulos são necessários.

No Linux para as arquiteturas AArch64 e PowerPC, "-fasynchronous -wind-tables" é habilitado para gerar tabelas de chamadas, como no GCC.

Em "#pragma clang loop vectorize_width" foi adicionada a capacidade de especificar as opções "fixa" (padrão) e "escalável" para selecionar o método de vetorização.

No servidor de cache clangd (Clang Server) no Linux, o consumo de memória durante a operação de longo prazo é significativamente reduzido (uma chamada periódica para malloc_trim é fornecida para retornar páginas de memória livres para o sistema operacional).

Finalmente se você estiver interessado em saber mais sobre isso sobre esta nova versão, você pode Consulte os detalhes a seguir. link.


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.