หลังจากหกเดือนของการพัฒนา ได้มีการนำเสนอการเปิดตัวโครงการ LLVM 11.0 ฉบับใหม่ ซึ่งมีการนำเสนอการปรับปรุงหลายอย่างเช่นการอัปเดต Python 3 แพตช์เพื่อรองรับคำแนะนำการทดลองใน RISC-V และการเปลี่ยนแปลงอื่น ๆ อีกมากมาย
สำหรับผู้ที่ไม่คุ้นเคยกับ LLVM ควรรู้ว่ามันคืออะไร ชุดเครื่องมือที่สอดคล้องกับ GCC (คอมไพเลอร์ตัวเพิ่มประสิทธิภาพและตัวสร้างโค้ด) ที่รวบรวมโปรแกรมไว้ในคำสั่งเสมือนตัวกลางระดับกลางคล้ายรหัสบิต RISC (เครื่องเสมือนระดับต่ำพร้อมระบบเพิ่มประสิทธิภาพหลายระดับ)
ได้รับการออกแบบมาเพื่อเพิ่มประสิทธิภาพเวลาในการรวบรวม, เวลาผูกมัด, เวลาดำเนินการในภาษาโปรแกรมใด ๆ ที่ผู้ใช้ต้องการกำหนด. เดิมใช้เพื่อคอมไพล์ C และ C ++, การออกแบบโดยไม่เชื่อเรื่องพระเจ้าภาษาของ LLVM และความสำเร็จของโครงการ พวกเขาได้สร้างภาษาที่หลากหลาย
pseudocode ที่สร้างขึ้นสามารถแปลงโดยใช้คอมไพเลอร์ JIT เป็นคำสั่งของเครื่องได้โดยตรงในขณะที่ดำเนินการโปรแกรม
คุณสมบัติใหม่ที่สำคัญของ LLVM 11.0
ใน LLVM 11.0 เวอร์ชันใหม่นี้ ระบบสร้างถูกย้ายไปใช้ Python 3ด้วยเหตุนี้จึงไม่บังคับใช้ Python 3 เนื่องจากในกรณีที่ไม่มีให้ใช้งานตัวเลือกการย้อนกลับจึงถูกนำไปใช้เพื่อใช้ Python 2
แอตทริบิวต์ เพิ่ม vector-function-abi-variant เป็นตัวแทนระดับกลาง (IR) เพื่ออธิบายการจับคู่ระหว่างฟังก์ชันสเกลาร์และเวกเตอร์ สำหรับการโทร vectorization เวกเตอร์สองประเภทแยกกัน llvm :: FixedVectorType และ llvm :: ScalableVectorType ถูกแยกจาก llvm :: VectorType
พฤติกรรมที่ไม่ได้กำหนดคือการแตกแขนงตาม undef และส่งต่อจากค่าที่ไม่ได้กำหนดไปยังฟังก์ชันไลบรารีมาตรฐาน
ใน memset / memcpy / memmove อนุญาตให้ส่งพอยน์เตอร์ที่ไม่ได้กำหนดได้ แต่ถ้าพารามิเตอร์ที่มีขนาดเท่ากับศูนย์
LLJIT เพิ่มการสนับสนุนสำหรับการเริ่มต้นแบบคงที่ผ่านวิธี LLJIT :: initialize และ LLJIT :: deinitialize
เพิ่มไฟล์ ความสามารถในการเพิ่มไลบรารีแบบคงที่ไปยัง JITDylib โดยใช้คลาส StaticLibraryDefinitionGenerator เพิ่ม C API สำหรับ ORCv2 (API สำหรับสร้างคอมไพเลอร์ JIT)
ในส่วนของการปรับปรุงการรองรับสถาปัตยกรรมโปรเซสเซอร์ที่แตกต่างกัน:
- เพิ่มแล้ว รองรับโปรเซสเซอร์ Cortex-A34, Cortex-A77, Cortex-A78 และ Cortex-X1 ในแบ็กเอนด์ของสถาปัตยกรรม AArch64 มีการใช้งานส่วนขยาย ARMv8.2-BF16 (BFloat16) และ ARMv8.6-A รวมถึง RMv8.6-ECV (Enhanced Counter Virtualization), ARMv8.6-FGT (Fine Grained Traps), ARMv8.6-AMU (Activity มอนิเตอร์การจำลองเสมือน) และ ARMv8.0-DGH (คำใบ้การรวบรวมข้อมูล)
- เพิ่มการรองรับโปรเซสเซอร์ Cortex-M55, Cortex-A77, Cortex-A78 และ Cortex-X1 บนแบ็กเอนด์ ARM ใช้ส่วนขยาย Armv8.6-A Matrix Multiply และ RMv8.2-AA32BF16 BFloat16
- เพิ่มการสนับสนุนสำหรับการสร้างรหัสสำหรับโปรเซสเซอร์ POWER10 ในแบ็กเอนด์ PowerPC ปรับปรุงการเพิ่มประสิทธิภาพของลูปและการสนับสนุนที่ดีขึ้นสำหรับการดำเนินการจุดลอยตัว
- แบ็กเอนด์สถาปัตยกรรม RISC-V สามารถรับแพตช์พร้อมการสนับสนุน สำหรับชุดคำสั่งเพิ่มเติมสำหรับการทดลองที่ยังไม่ได้รับการอนุมัติอย่างเป็นทางการ
นอกจากนี้ มีความสามารถในการสร้างรหัสสำหรับฟังก์ชันการผูก รวมเข้ากับคำสั่ง SVE ของเวกเตอร์
แบ็กเอนด์สำหรับสถาปัตยกรรม AVR ถูกย้ายจากหมวดหมู่การทดลองไปยังกลุ่มที่เสถียรที่รวมอยู่ในการกระจายฐาน
แบ็กเอนด์ x86 รองรับคำแนะนำ Intel AMX และ TSXLDTRK เพิ่มการป้องกันการโจมตี LVI (Load Value Injection) และกลไกการปราบปราม Speculative Execution Side Effects เพื่อป้องกันการโจมตีที่เกิดจากการดำเนินการเชิงคาดเดาของการดำเนินการบน CPU
การเปลี่ยนแปลงอื่น ๆ ที่โดดเด่น:
- แบ็กเอนด์สำหรับสถาปัตยกรรม SystemZ เพิ่มการรองรับ MemorySanitizer และ LeakSanitizer
- Libc ++ เพิ่มการรองรับไฟล์ส่วนหัวค่าคงที่ทางคณิตศาสตร์ .
- ความสามารถเพิ่มเติมของ LLD linker
- การสนับสนุน ELF ที่ปรับปรุงใหม่รวมถึงตัวเลือกที่เพิ่มเข้ามา "–lto-emit-asm", "–lto-whole-program-visible", "–print-archive-stats", "–shuffle-section", "–thinlto-single -module "," –unique "," –rosegment "," –threads = N "
- เพิ่มตัวเลือก "–time-trace" เพื่อบันทึกการติดตามลงในไฟล์ซึ่งสามารถแยกวิเคราะห์ผ่าน chrome: // trace interface ใน Chrome
- อินเทอร์เฟซกับคอมไพเลอร์ Go (llgo) ถูกลบออกจากรีลีสและอาจมีการปรับโครงสร้างในอนาคต
ในที่สุด หากคุณต้องการทราบข้อมูลเพิ่มเติม เกี่ยวกับเวอร์ชันใหม่นี้คุณสามารถตรวจสอบได้ รายละเอียดตามลิงค์ต่อไปนี้