XNUMX 개월 개발 후 LLVM 11.0 프로젝트의 새 버전 출시가 발표되었습니다. Python 3 업데이트, RISC-V의 실험 지침을 지원하는 패치 및 기타 많은 변경 사항과 같은 여러 개선 사항이 제공됩니다.
LLVM에 익숙하지 않은 사람들은 그것이 무엇인지 알아야합니다. GCC 호환 툴킷 (컴파일러, 최적화 프로그램 및 코드 생성기) 프로그램을 RISC와 유사한 비트 코드 중간 가상 명령어 (다단계 최적화 시스템이있는 저수준 가상 머신)로 컴파일합니다.
컴파일 시간을 최적화하도록 설계되었습니다., 바인딩 시간, 사용자가 정의하려는 프로그래밍 언어의 실행 시간. 원래 C 및 C ++를 컴파일하기 위해 구현되었습니다., LLVM의 언어 불가지론 적 설계 및 프로젝트 성공 그들은 다양한 언어를 낳았습니다.
생성 된 의사 코드는 JIT 컴파일러를 사용하여 프로그램 실행시 직접 기계 명령어로 변환 할 수 있습니다.
LLVM 11.0의 새로운 주요 기능
이 새 버전의 LLVM 11.0에서 빌드 시스템이 Python 3을 사용하도록 이동되었습니다.따라서 Python 3을 사용할 수없는 경우에는 Python 2를 사용하도록 롤백 옵션이 구현되므로 강제로 사용하지 않습니다.
속성 벡터 함수 -abi-variant가 추가되었습니다. 중간 표현 (IR)으로 스칼라 함수와 벡터 함수 간의 매핑 설명 벡터화 호출을 위해. 두 개의 개별 벡터 유형 인 llvm :: FixedVectorType 및 llvm :: ScalableVectorType이 llvm :: VectorType에서 추출됩니다.
정의되지 않은 동작은 정의되지 않은 분기이며 정의되지 않은 값에서 표준 라이브러리 함수로 전달됩니다.
memset / memcpy / memmove에서는 정의되지 않은 포인터를 전달할 수 있지만 크기가있는 매개 변수가 XNUMX 인 경우.
LLJIT는 LLJIT :: initialize 및 LLJIT :: deinitialize 메소드를 통해 정적 초기화를 수행하기위한 지원을 추가합니다.
추가 JITDylib에 정적 라이브러리를 추가하는 기능 StaticLibraryDefinitionGenerator 클래스를 사용합니다. ORCv2 용 C API (JIT 컴파일러 생성 용 API)가 추가되었습니다.
다양한 프로세서 아키텍처에 대한 지원 향상의 일환 :
- 추가됨 Cortex-A34, Cortex-A77, Cortex-A78 및 Cortex-X1 프로세서 지원 AArch64 아키텍처의 백엔드에 있습니다. RMv8.2-ECV (Enhanced Counter Virtualization), ARMv16-FGT (Fine Grained Traps), ARMv16-AMU (Activity)를 포함한 ARMv8.6-BF8.6 (BFloat8.6) 및 ARMv8.6-A 확장이 구현되었습니다. 가상화 모니터링) 및 ARMv8.0-DGH (데이터 수집 힌트).
- ARM 백엔드에서 Cortex-M55, Cortex-A77, Cortex-A78 및 Cortex-X1 프로세서에 대한 지원이 추가되었습니다. Armv8.6-A Matrix Multiply 및 RMv8.2-AA32BF16 BFloat16 확장을 구현했습니다.
- PowerPC 백엔드에서 POWER10 프로세서에 대한 코드 생성 지원이 추가되었습니다. 루프 최적화가 개선되고 부동 소수점 연산에 대한 지원이 개선되었습니다.
- 아키텍처 백엔드 RISC-V는 지원을 통해 패치를받을 수 있습니다. 아직 공식적으로 승인되지 않은 실험용 확장 지침 세트.
그 외에도 바인딩 기능을위한 코드 생성 기능이 제공됩니다. 벡터 SVE 명령어에 통합됩니다.
AVR 아키텍처의 백엔드는 실험 범주에서 기본 배포에 포함 된 안정된 범주로 이동되었습니다.
x86 백엔드 Intel AMX 및 TSXLDTRK 명령어를 지원합니다. LVI 공격에 대한 추가 보호 (부하 값 주입) 및 일반 예측 실행 부작용 억제 메커니즘도 구현되어 CPU에서 예측 실행으로 인한 공격을 차단합니다.
눈에 띄는 다른 변경 사항 중 :
- SystemZ 아키텍처의 백엔드는 MemorySanitizer 및 LeakSanitizer에 대한 지원을 추가합니다.
- Libc ++는 수학 상수 헤더 파일에 대한 지원을 추가합니다. .
- LLD 링커의 확장 된 기능.
- "–lto-emit-asm", "–lto-whole-program-visible", "–print-archive-stats", "–shuffle-section", "–thinlto-single -module 옵션 추가를 포함한 향상된 ELF 지원 ","–unique ","–rosegment ","–threads = N ".
- 추적을 파일에 저장하는 "–time-trace"옵션을 추가 한 다음 Chrome에서 chrome : // trace 인터페이스를 통해 파싱 할 수 있습니다.
- Go (llgo) 컴파일러가있는 인터페이스는 릴리스에서 제거되었으며 향후 재구성 될 수 있습니다.
최종적으로 그것에 대해 더 알고 싶다면 이 새 버전에 대해 확인할 수 있습니다. 다음 링크의 세부 사항.