Ya fue liberada la nueva versión de LLVM 9.0 y estas son sus novedades
Después de seis meses de desarrollo se presento el lanzamiento de la nueva versión del proyecto LLVM 9.0, el cual es un kit de herramientas compatible con GCC (compiladores, optimizadores y generadores de código), que compila programas en un código de bits intermedio de instrucciones virtuales tipo RISC (una máquina virtual de bajo nivel con un sistema de optimización multinivel).
Está diseñada para optimizar el tiempo de compilación, el tiempo de enlazado, el tiempo de ejecución en cualquier lenguaje de programación que el usuario quiera definir. Implementado originalmente para compilar C y C++, el diseño agnóstico de LLVM con respecto al lenguaje, y el éxito del proyecto han engendrado una amplia variedad de lenguajes, incluyendo Objective-C, Fortran, Ada, Haskell, bytecode de Java, Python, Ruby, ActionScript, GLSL, Clang, Rust, Gambas y otros.
El pseudocódigo generado puede convertirse utilizando el compilador JIT en instrucciones de máquina directamente en el momento de la ejecución del programa.
Principales novedades de LLVM 9.0
Entre las nuevas características de LLVM 9.0 se encuentran el soporte para eliminar la etiqueta de desarrollo experimental de la plataforma RISC-V, el soporte de C++ para OpenCL.
Otra novedad que se destaca es la capacidad de dividir el programa en partes cargadas dinámicamente en LLD y la implementación de la construcción ” asm goto ” utilizada en el código del kernel de Linux.
Además también se destaca que Libc++ llego con soporte para WASI (WebAssembly System Interface), y LLD introdujo soporte inicial para el enlace dinámico de WebAssembly. Se agregó la implementación de la expresión específica de GCC ” asm goto”, que le permite cambiar de un bloque en línea ensamblado a una etiqueta en código C.
Esta característica es necesaria para construir el kernel de Linux en modo” CONFIG_JUMP_LABEL = y “usando Clang en sistemas x86_64. Considerando los cambios agregados en versiones anteriores, El kernel de Linux ahora se puede construir en Clang para la arquitectura x86_64 (anteriormente, solo se admitía para arquitecturas arm, aarch64, ppc32, ppc64le y mips.
Se ha agregado compatibilidad con las instrucciones BTI (Branch Target Indicator) y PAC (Pointer Authentication Code) para la arquitectura AArch64. Soporte significativamente mejorado para las plataformas MIPS, RISC-V y PowerPC.
Además, los proyectos de Android y ChromeOS ya han cambiado a usar Clang para construir el kernel y Google está probando Clang como plataforma de construcción principal núcleos para sus sistemas Linux en funcionamiento.
En el futuro, durante el proceso de compilación del núcleo, será posible utilizar otros componentes LLVM, incluidos LLD, llvm-objcopy, llvm-ar, llvm-nm y llvm-objdump.
Se ha agregado una función de partición experimental al enlazador LLD, que permite dividir un programa en varias partes, cada una de las cuales se coloca en un archivo ELF separado. Esta característica le permite ejecutar la parte principal del programa, que, según sea necesario, cargará los componentes restantes en el proceso (por ejemplo, puede seleccionar el visor de PDF incorporado como un archivo separado, que se descargará solo cuando el usuario abra el archivo PDF).
Por otro lado también se destacan las numerosas mejoras en los backends para las arquitecturas X86, AArch64, ARM, SystemZ, MIPS, AMDGPU y PowerPC.
Por ejemplo, se ha agregado soporte para las instrucciones SVE2 y MTE (Extensiones de etiquetado de memoria) para la arquitectura AArch64, soporte para la arquitectura Armv8.1-M y la arquitectura MVE se han agregado al backend ARM.
Para el caso de AMDGPU se añadió el soporte para la arquitectura GFX10 (Navi), el valor predeterminado se habilita para invocar una función y hacer pasar el combinado activado DPP (Primitives de datos-paralelo).
El depurador LLDB introdujo el resaltado de color de las trazas hacia atrás; se agregó soporte para los bloques DWARF4 debug_types y DWARF5 debug_info;
Las utilidades llvm-objcopy y llvm-strip han agregado soporte para objetos y archivos ejecutables en formato COFF.
El backend para la arquitectura de la arquitectura RISC-V se estabiliza, lo que ya no se posiciona como experimental y se construye por defecto. Soporte completo para la generación de código para las variantes del conjunto de instrucciones RV32I y RV64I con extensiones MAFDC.
Fuente: http://releases.llvm.org/