XNUMX 개월 개발 후 LLVM 9.0 프로젝트의 새 버전 출시가 발표되었습니다. GCC 호환 툴킷 (컴파일러, 최적화 프로그램 및 코드 생성기)입니다. 프로그램을 RISC와 같은 가상 명령어의 중간 비트 코드로 컴파일합니다. (다단계 최적화 시스템이있는 저수준 가상 머신).
컴파일 시간을 최적화하도록 설계되었습니다., 바인딩 시간, 사용자가 정의하려는 프로그래밍 언어의 실행 시간. 원래 C 및 C ++를 컴파일하기 위해 구현되었습니다., LLVM의 언어 불가지론 적 설계 및 프로젝트 성공 다양한 언어를 낳았습니다Objective-C, Fortran, Ada, Haskell, Java 바이트 코드, Python, Ruby, ActionScript, GLSL, Clang, Rust, Gambas 등을 포함합니다.
생성 된 의사 코드는 JIT 컴파일러를 사용하여 프로그램 실행시 직접 기계 명령어로 변환 할 수 있습니다.
LLVM 9.0의 새로운 주요 기능
LLVM 9.0의 새로운 기능 중 RISC-V 플랫폼에서 실험적 개발 태그를 제거하기위한 지원 찾기, OpenCL에 대한 C ++ 지원.
또 다른 참신함 눈에 띄는 것은 프로그램을 동적으로로드 된 부분으로 나누는 기능입니다. LLD 및 Linux 커널 코드에서 사용되는»asm goto»구성의 구현.
또한 Libc ++가 WASI에 대한 지원과 함께 도착했음을 강조합니다. (WebAssembly System Interface) 및 LLD는 WebAssembly 동적 바인딩에 대한 초기 지원을 도입했습니다. 조립 된 인라인 블록에서 C 코드의 태그로 전환 할 수있는 GCC 특정 표현식»asm goto»의 구현이 추가되었습니다.
이 기능은 x86_64 시스템에서 Clang을 사용하여»CONFIG_JUMP_LABEL = y«모드에서 Linux 커널을 빌드하는 데 필요합니다. 이전 버전에 추가 된 변경 사항을 고려하여 Linux 커널은 이제 x86_64 아키텍처 용 Clang으로 빌드 할 수 있습니다 (이전에는 arm, aarch64, ppc32, ppc64le 및 mips 아키텍처에서만 지원되었습니다.
BTI 지침에 대한 지원이 추가되었습니다. AArch64 아키텍처 용 (지점 대상 표시기) 및 PAC (포인터 인증 코드). MIPS, RISC-V 및 PowerPC 플랫폼에 대한 지원이 크게 향상되었습니다.
또한, Android 및 ChromeOS 프로젝트는 이미 Clang을 사용하여 커널을 빌드하도록 전환했습니다. Google은 실행중인 Linux 시스템의 기본 빌드 플랫폼 커널로 Clang을 테스트하고 있습니다.
앞으로 커널 컴파일 과정에서 다른 구성 요소를 사용할 수 있습니다. LLD, llvm-objcopy, llvm-ar, llvm-nm 및 llvm-objdump를 포함한 LLVM.
실험적인 파티션 기능이 LLD 링커에 추가되어 프로그램을 여러 부분으로 나눌 수 있으며 각 부분은 별도의 ELF 파일에 배치됩니다. 이 기능을 사용하면 필요에 따라 프로세스의 나머지 구성 요소를로드하는 프로그램의 주요 부분을 실행할 수 있습니다 (예를 들어, 내장 PDF 뷰어를 별도의 파일로 선택할 수 있습니다. 사용자가 파일 PDF를 엽니 다).
반면에 백엔드의 수많은 개선 사항도 두드러집니다. X86, AArch64, ARM, SystemZ, MIPS, AMDGPU 및 PowerPC 아키텍처 용.
예를 들어 SVE2 및 MTE (Memory Tagging Extensions) 명령어에 대한 지원이 AArch64 아키텍처에 추가되었으며 Armv8.1-M 아키텍처 및 MVE 아키텍처에 대한 지원이 ARM 백엔드에 추가되었습니다.
AMDGPU의 경우 GFX10 아키텍처에 대한 지원이 추가되었습니다. (Navi), 기본값은 함수를 호출하고 활성화 된 결합 DPP (Data Primitives-Parallel)를 전달하도록 활성화됩니다.
LLDB 디버거는 트레이스의 색상 강조를 거꾸로 도입했습니다. DWARF4 debug_types 및 DWARF5 debug_info 블록에 대한 지원이 추가되었습니다.
llvm-objcopy 및 llvm-strip 유틸리티는 COFF 형식 실행 파일 및 개체에 대한 지원을 추가했습니다.
RISC-V 아키텍처의 백엔드가 안정화되었습니다., 이는 더 이상 실험용으로 배치되지 않으며 기본적으로 빌드됩니다. MAFDC 확장을 사용하여 RV32I 및 RV64I 명령어 세트 변형에 대한 코드 생성을 완벽하게 지원합니다.
출처 : http://releases.llvm.org/