LLVM 11.0 vem com atualização do Python 3, aprimoramentos RISC-V e mais

LLVM

Após seis meses de desenvolvimento foi apresentado o lançamento da nova edição do projeto LLVM 11.0 em que várias melhorias são apresentadas, como a atualização para Python 3, patches para dar suporte a instruções experimentais em RISC-V e muitas outras mudanças.

Para aqueles que não estão familiarizados com o LLVM, eles devem saber o que é um kit de ferramentas compatível com GCC (compiladores, otimizadores e geradores de código) que compila programas em instruções virtuais intermediárias de código de bits semelhantes a RISC (máquina virtual de baixo nível com sistema de otimização de vários níveis)

Ele é projetado para otimizar o tempo de compilação, o tempo de ligação, o tempo de execução em qualquer linguagem de programação que o usuário deseja definir. Implementado originalmente para compilar C e C ++, O design agnóstico de linguagem do LLVM e o sucesso do projeto eles geraram uma grande variedade de idiomas.

O pseudo-código gerado pode ser convertido usando o compilador JIT em instruções de máquina diretamente no momento da execução do programa.

Principais novos recursos do LLVM 11.0

Nesta nova versão do LLVM 11.0 o sistema de compilação foi movido para usar Python 3Assim, o uso do Python 3 não é forçado, pois caso não esteja disponível, a opção de rollback é implementada para usar o Python 2.

Atributo vector-function-abi-variant foi adicionado para representação intermediária (IR) para descrever o mapeamento entre funções escalares e vetoriais para chamadas de vetorização. Dois tipos de vetor separados, llvm :: FixedVectorType e llvm :: ScalableVectorType, são extraídos de llvm :: VectorType.

O comportamento indefinido é a ramificação baseada em undef e a passagem de valores indefinidos para funções de biblioteca padrão.

Em memset / memcpy / memmove, é permitido passar ponteiros indefinidos, mas se o parâmetro com o tamanho for igual a zero.

LLJIT adiciona suporte para inicializações estáticas por meio dos métodos LLJIT :: initialize e LLJIT :: deinitialize.

Adicionou o capacidade de adicionar bibliotecas estáticas ao JITDylib usando a classe StaticLibraryDefinitionGenerator. Adicionada API C para ORCv2 (API para criação de compiladores JIT).

Na parte de melhorar o suporte para as diferentes arquiteturas de processador:

  • Adicionado suporte para processadores Cortex-A34, Cortex-A77, Cortex-A78 e Cortex-X1 no backend da arquitetura AArch64. As extensões ARMv8.2-BF16 (BFloat16) e ARMv8.6-A foram implementadas, incluindo RMv8.6-ECV (Enhanced Counter Virtualization), ARMv8.6-FGT (Fine Grained Traps), ARMv8.6-AMU (Activity Monitora a virtualização) e ARMv8.0-DGH (dica de coleta de dados).
  • Adicionado suporte para processadores Cortex-M55, Cortex-A77, Cortex-A78 e Cortex-X1 no backend ARM. Implementadas as extensões Armv8.6-A Matrix Multiply e RMv8.2-AA32BF16 BFloat16.
  • Adicionado suporte para geração de código para processadores POWER10 no backend PowerPC. Otimizações de loop aprimoradas e suporte aprimorado para operações de ponto flutuante.
  • O backend da arquitetura RISC-V pode receber patches com suporte para conjuntos de instruções estendidas experimentais que ainda não foram oficialmente aprovados.

Além disso, a capacidade de gerar código para funções de ligação é fornecida integrado às instruções do vetor SVE.

O backend para a arquitetura AVR foi movido da categoria experimental para os estáveis ​​incluídos na distribuição base.

O backend x86 suporta instruções Intel AMX e TSXLDTRK. Adicionada proteção contra ataques LVI (Load Value Injection) e o mecanismo geral de supressão de efeitos colaterais de execução especulativa também foi implementado para bloquear ataques causados ​​por execução especulativa de operações na CPU.

Das outras mudanças que se destacam:

  • O backend para a arquitetura SystemZ adiciona suporte para MemorySanitizer e LeakSanitizer.
  • Libc ++ adiciona suporte para arquivo de cabeçalho de constante matemática .
  • Recursos estendidos do vinculador LLD.
  • Suporte a ELF aprimorado, incluindo opções adicionadas "–lto-emit-asm", "–lto-whole-program-visible", "–print-archive-stats", "–shuffle-section", "–thinlto-single -module "," –Unique "," –rosegment "," –threads = N ".
  • Adicionada a opção "–time-trace" para salvar o rastreamento no arquivo, que pode então ser analisado por meio da interface chrome: // trace no Chrome.
  • Uma interface com um compilador Go (llgo) foi removida do lançamento e pode ser reestruturada no futuro.

Finalmente se você quiser saber mais sobre isso sobre esta nova versão, 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.