หลังจากหกเดือนของการพัฒนา มีการนำเสนอการเปิดตัวโครงการ LLVM 9.0 เวอร์ชันใหม่ ซึ่งเป็นชุดเครื่องมือที่เข้ากันได้กับ GCC (คอมไพเลอร์ตัวเพิ่มประสิทธิภาพและตัวสร้างโค้ด) ซึ่งรวบรวมโปรแกรมเป็นรหัสบิตกลางของคำสั่งเสมือนเสมือน RISC (เครื่องเสมือนระดับต่ำพร้อมระบบเพิ่มประสิทธิภาพหลายระดับ)
ได้รับการออกแบบมาเพื่อเพิ่มประสิทธิภาพเวลาในการรวบรวม, เวลาผูกมัด, เวลาดำเนินการในภาษาโปรแกรมใด ๆ ที่ผู้ใช้ต้องการกำหนด. เดิมใช้เพื่อคอมไพล์ C และ C ++, การออกแบบโดยไม่เชื่อเรื่องพระเจ้าภาษาของ LLVM และความสำเร็จของโครงการ ได้สร้างภาษาที่หลากหลายรวมถึง Objective-C, Fortran, Ada, Haskell, Java bytecode, Python, Ruby, ActionScript, GLSL, Clang, Rust, Gambas และอื่น ๆ
pseudocode ที่สร้างขึ้นสามารถแปลงโดยใช้คอมไพเลอร์ JIT เป็นคำสั่งของเครื่องได้โดยตรงในขณะที่ดำเนินการโปรแกรม
คุณสมบัติใหม่ที่สำคัญของ LLVM 9.0
ท่ามกลางคุณสมบัติใหม่ของ LLVM 9.0 ค้นหาการสนับสนุนเพื่อลบแท็กการพัฒนาทดลองออกจากแพลตฟอร์ม RISC-V, รองรับ C ++ สำหรับ OpenCL
อีกหนึ่งความแปลกใหม่ที่ ความโดดเด่นคือความสามารถในการแบ่งโปรแกรมออกเป็นส่วนที่โหลดแบบไดนามิก ใน LLD และการนำโครงสร้าง» asm goto »ไปใช้ในโค้ดเคอร์เนลของลินุกซ์
นอกจากนี้ยังเน้นว่า Libc ++ มาพร้อมกับการรองรับ WASI (WebAssembly System Interface) และ LLD แนะนำการสนับสนุนเบื้องต้นสำหรับการเชื่อมต่อแบบไดนามิก WebAssembly เพิ่มการใช้นิพจน์เฉพาะ GCC » asm goto »ซึ่งช่วยให้คุณสามารถเปลี่ยนจากบล็อกอินไลน์ที่ประกอบเป็นแท็กในโค้ด C ได้
คุณลักษณะนี้จำเป็นในการสร้างเคอร์เนล Linux ในโหมด» CONFIG_JUMP_LABEL = y «โดยใช้ Clang บนระบบ x86_64 เมื่อพิจารณาถึงการเปลี่ยนแปลงที่เพิ่มในเวอร์ชันก่อนหน้าตอนนี้เคอร์เนล Linux สามารถสร้างใน Clang สำหรับสถาปัตยกรรม x86_64 (ก่อนหน้านี้รองรับเฉพาะสถาปัตยกรรม arm, aarch64, ppc32, ppc64le และ mips
เพิ่มการรองรับคำแนะนำ BTI แล้ว (Branch Target Indicator) และ PAC (Pointer Authentication Code) สำหรับสถาปัตยกรรม AArch64 ปรับปรุงการสนับสนุนอย่างมีนัยสำคัญสำหรับแพลตฟอร์ม MIPS, RISC-V และ PowerPC
นอกจากนี้ โครงการ Android และ ChromeOS ได้เปลี่ยนไปใช้ Clang เพื่อสร้างเคอร์เนลแล้ว และ Google กำลังทดสอบ Clang เป็นเคอร์เนลสร้างแพลตฟอร์มหลักสำหรับระบบ Linux ที่ใช้งานอยู่
ในอนาคต ในระหว่างกระบวนการคอมไพล์เคอร์เนลจะสามารถใช้ส่วนประกอบอื่น ๆ ได้ LLVM ได้แก่ LLD, llvm-objcopy, llvm-ar, llvm-nm และ llvm-objdump
มีการเพิ่มฟังก์ชันพาร์ติชันทดลองใน LLD linker ซึ่งช่วยให้โปรแกรมสามารถแบ่งออกเป็นหลายส่วนโดยแต่ละส่วนจะอยู่ในไฟล์ 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 blocks;
โปรแกรมอรรถประโยชน์ llvm-objcopy และ llvm-strip ได้เพิ่มการรองรับไฟล์และอ็อบเจ็กต์ที่ปฏิบัติการได้ในรูปแบบ COFF
แบ็กเอนด์สำหรับสถาปัตยกรรม RISC-V มีความเสถียรซึ่งไม่ได้อยู่ในตำแหน่งทดลองอีกต่อไปและสร้างขึ้นโดยค่าเริ่มต้น รองรับการสร้างโค้ดสำหรับตัวแปรชุดคำสั่ง RV32I และ RV64I ที่มีนามสกุล MAFDC
Fuente: http://releases.llvm.org/