PÄc seÅ”u mÄneÅ”u attÄ«stÄ«bas uzrÄdÄ«ts projekta izlaidums LLVM 11.0 ā ar GCC saderÄ«gi rÄ«ki (kompilatori, optimizÄtÄji un kodu Ä£eneratori), programmu kompilÄÅ”anai RISC lÄ«dzÄ«gu virtuÄlo instrukciju starpbitkodÄ (zema lÄ«meÅa virtuÄlÄ maŔīna ar daudzlÄ«meÅu optimizÄcijas sistÄmu). Ä¢enerÄto pseidokodu, izmantojot JIT kompilatoru, var pÄrvÄrst maŔīnas instrukcijÄs tieÅ”i programmas izpildes laikÄ.
GalvenÄs izmaiÅas jaunajÄ laidienÄ bija iekļauÅ”ana Flangs, priekÅ”puse Fortran valodai. Flang atbalsta Fortran 2018, OpenMP 4.5 un OpenACC 3.0, taÄu projekta izstrÄde vÄl nav pabeigta un priekÅ”gals aprobežojas ar koda parsÄÅ”anu un pareizÄ«bas pÄrbaudi. LLVM starpposma koda Ä£enerÄÅ”ana vÄl netiek atbalstÄ«ta, un, lai Ä£enerÄtu izpildÄmos failus, tiek Ä£enerÄts kanoniskais kods un nosÅ«tÄ«ts ÄrÄjam Fortran kompilatoram.
Pievienota iespÄja atjaunot abstrakto sintakses koku (AST) bojÄtam C++ kodam, ko var izmantot, lai palÄ«dzÄtu diagnosticÄt kļūdas un sniegtu papildu informÄciju ÄrÄjÄm utilÄ«tprogrammÄm, piemÄram, clang-tidy un clangd. Funkcija pÄc noklusÄjuma ir iespÄjota C++ kodam, un to kontrolÄ, izmantojot opcijas "-Xclang -f[no-]recovery-ast".
Pievienoti jauni diagnostikas režīmi:
ā-Wpointer-to-int-castā ir brÄ«dinÄjumu grupa par rÄdÄ«tÄju nosÅ«tÄ«Å”anu uz vesela skaitļa tipa int, kurÄ nav iekļautas visas iespÄjamÄs vÄrtÄ«bas.
ā-Wuninitialized-const-referenceā ā brÄ«dinÄjums par neinicializÄtu mainÄ«go nodoÅ”anu funkciju parametros, kas pieÅem atsauces argumentus ar atribÅ«tu āconstā.
"-Wimplicit-const-int-float-conversion" ā pÄc noklusÄjuma ir iespÄjots brÄ«dinÄjums par reÄlas konstantes netieÅ”u pÄrveidoÅ”anu par vesela skaitļa tipu.
ARM platformai tiek nodroÅ”inÄtas kompilatorÄ iebÅ«vÄtÄs C funkcijas (BÅ«tiskÄs Ä«paŔības), aizstÄj ar efektÄ«vÄm vektora instrukcijÄm Arm v8.1-M MVE un CDE. PieejamÄs funkcijas ir definÄtas galvenes failos arm_mve.h un arm_cde.h.
Pievienots paplaÅ”inÄtu veselu skaitļu tipu kopa _ExtInt(N), kas ļauj izveidot tipus, kas nav divu pakÄpju reizinÄjumi un kurus var efektÄ«vi apstrÄdÄt FPGA/HLS. PiemÄram, _ExtInt(7) definÄ vesela skaitļa tipu, kas sastÄv no 7 bitiem.
Pievienoti makro, kas nosaka atbalstu iebÅ«vÄtajÄm C funkcijÄm, pamatojoties uz ARM SVE (Scalable Vector Extension) instrukcijÄm:
__ARM_FEATURE_SVE, __ARM_FEATURE_SVE_BF16,
__ARM_FEATURE_SVE_MATMUL_FP32, __ARM_FEATURE_SVE_MATMUL_FP64,
__ARM_FEATURE_SVE_MATMUL_INT8,
__ARM_FEATURE_SVE2, __ARM_FEATURE_SVE2_AES,
__ARM_FEATURE_SVE2_BITPERM,
__ARM_FEATURE_SVE2_SHA3,
__ARM_FEATURE_SVE2_SM4. PiemÄram, makro __ARM_FEATURE_SVE tiek definÄts, Ä£enerÄjot AArch64 kodu, iestatot komandrindas opciju "-march=armv8-a+sve".
Karogs "-O" tagad tiek identificÄts ar optimizÄcijas režīmu "-O1", nevis "-O2".
"-fpch-codegen" un "-fpch-debuginfo", lai Ä£enerÄtu iepriekÅ” kompilÄtu galveni (PCH) ar atseviŔķiem objekta failiem kodam un atkļūdoÅ”anas informÄcijai.
ā-fsanitize-coverage-allowlistā un ā-fsanitize-coverage-blocklistā, lai pÄrbaudÄ«tu pÄrklÄjuma pÄrbaudes baltos un melnos sarakstus.
ā-mtls-size={12,24,32,48}ā, lai atlasÄ«tu TLS (pavedienu vietÄjÄ krÄtuve) izmÄru.
"-menable-experimental-extension", lai iespÄjotu eksperimentÄlos RISC-V paplaÅ”inÄjumus.
C noklusÄjuma režīms ir "-fno-common", kas dažÄs platformÄs ļauj efektÄ«vÄk piekļūt globÄlajiem mainÄ«gajiem.
NoklusÄjuma moduļa keÅ”atmiÅa ir pÄrvietota no /tmp uz direktoriju ~/.cache. Lai ignorÄtu, varat izmantot karogu ā-fmodules-cache-path=ā.
NoklusÄjuma C valodas standarts ir atjauninÄts no gnu11 uz gnu17.
Pievienots sÄkotnÄjais atbalsts GNU C paplaÅ”inÄjumam "asm inlineĀ», lai pievienotu montÄžas ieliktÅus. PaplaÅ”inÄjums joprojÄm tiek analizÄts, taÄu tas nekÄdÄ veidÄ netiek apstrÄdÄts.
Ar OpenCL un CUDA atbalstu saistÄ«tÄs iespÄjas ir paplaÅ”inÄtas. Pievienots atbalsts OpenCL 2.0 bloku diagnostikai un ieviestas jaunas OpenMP 5.0 funkcijas.
Pievienota IndentExternBlock opcija zvana formÄta utilÄ«tai izlÄ«dzinÄÅ”anai ÄrÄjos "C" un ÄrÄjos "C++" blokos.
Statiskais analizators ir uzlabojis mantoto konstruktoru apstrÄdi C++ valodÄ. Pievienotas jaunas pÄrbaudes alpha.core.C11Lock un alpha.fuchsia.Lock, lai pÄrbaudÄ«tu slÄdzenes, alpha.security.cert.pos.34c, lai noteiktu putenv nedroÅ”u lietoÅ”anu, webkit.NoUncountedMemberChecker un webkit.RefCntblBaseVirtualDtor, lai atklÄtu problÄmas ar neskaitÄmiem veidiem, alpha .cplusplus .SmartPtr, lai pÄrbaudÄ«tu nulles viedÄ rÄdÄ«tÄja novirzi.
Linteres ÄaukstÄ«gi pievienots liela daļa jaunu Äeku.
Clangd keÅ”atmiÅas serverim (Clang Server) ir uzlabota veiktspÄja un pievienotas jaunas diagnostikas iespÄjas.
BÅ«vsistÄma ir pÄrslÄgta uz Python 3 izmantoÅ”anu. Ja Python 3 nav pieejams, ir iespÄjams atgriezties pie Python 2 izmantoÅ”anas.
PriekÅ”ÄjÄ daļa ar Go valodas kompilatoru (llgo) ir izslÄgta no laidiena, kas nÄkotnÄ var tikt pÄrstrukturÄta.
AtribÅ«ts Vector-function-abi-variant ir pievienots starpposma attÄlojumam (IR), lai aprakstÄ«tu skalÄro un vektora funkciju kartÄÅ”anu, lai vektorizÄtu zvanus. No llvm::VectorType ir divi atseviŔķi vektoru veidi: llvm::FixedVectorType un llvm::ScalableVectorType.
SazaroÅ”ana, pamatojoties uz uef vÄrtÄ«bÄm, un undef vÄrtÄ«bu nodoÅ”ana standarta bibliotÄkas funkcijÄm tiek atzÄ«ta par nedefinÄtu darbÄ«bu. IN
memset/memcpy/memmove ļauj nodot undef rÄdÄ«tÄjus, bet, ja parametrs ar izmÄru ir nulle.
LLJIT ir pievienojis atbalstu statiskÄs inicializÄcijas veikÅ”anai, izmantojot LLJIT::initialize un LLJIT::deinitialize metodes. Ieviesta iespÄja pievienot statiskas bibliotÄkas JITDylib, izmantojot StaticLibraryDefinitionGenerator klasi. Pievienots C API priekÅ” ORCv2 (API JIT kompilatoru veidoÅ”anai).
AArch64 arhitektÅ«ras aizmugursistÄmai ir pievienots Cortex-A34, Cortex-A77, Cortex-A78 un Cortex-X1 procesoru atbalsts. Ieviestie ARMv8.2-BF16 (BFloat16) un ARMv8.6-A paplaÅ”inÄjumi, tostarp RMv8.6-ECV (uzlabotÄ skaitÄ«tÄju virtualizÄcija), ARMv8.6-FGT (smalki graudains slazdi), ARMv8.6-AMU (aktivitÄtes monitoru virtualizÄcija) un ARMv8.0-DGH (datu vÄkÅ”anas padoms). Tiek nodroÅ”inÄta iespÄja Ä£enerÄt kodu iebÅ«vÄtajÄm funkcijÄm-saistÄ«bÄm ar SVE vektora instrukcijÄm.
ARM arhitektÅ«ras aizmugursistÄmai ir pievienots Cortex-M55, Cortex-A77, Cortex-A78 un Cortex-X1 procesoru atbalsts. PaplaÅ”inÄjumi ieviesti
Armv8.6-A Matrix Multiply un RMv8.2-AA32BF16 BFloat16.
PowerPC arhitektÅ«ras aizmugursistÄmai ir pievienots atbalsts koda Ä£enerÄÅ”anai POWER10 procesoriem. Cikla optimizÄcija ir paplaÅ”inÄta, un ir uzlabots peldoÅ”Ä komata atbalsts.
RISC-V arhitektÅ«ras aizmugure ļauj pieÅemt ielÄpus, kas atbalsta eksperimentÄlas paplaÅ”inÄtas instrukciju kopas, kuras vÄl nav oficiÄli apstiprinÄtas.
AVR arhitektÅ«ras aizmugure ir pÄrvietota no eksperimentÄlÄs kategorijas uz stabilu, kas iekļauta pamata izplatÄ«Å”anÄ.
AizmugursistÄma x86 arhitektÅ«rai atbalsta Intel AMX un TSXLDTRK instrukcijas. Pievienota aizsardzÄ«ba pret uzbrukumiem LVI (Load Value Injection), kÄ arÄ« ievieÅ” vispÄrÄju spekulatÄ«vÄs izpildes blakusparÄdÄ«bu slÄpÄÅ”anas mehÄnismu, lai bloÄ·Ätu uzbrukumus, ko izraisa spekulatÄ«va operÄciju izpilde CPU.
SystemZ arhitektÅ«ras aizmugursistÄmai ir pievienots atbalsts MemorySanitizer un LeakSanitizer.
Libc++ ir pievienots galvenes faila atbalsts ar matemÄtiskÄm konstantÄm .
IzvÄrsts LLD saistÄ«Å”anas iespÄjas. Uzlabots ELF formÄta atbalsts, tostarp pievienotÄs opcijas "--lto-emit-asm", "--lto-whole-program-visibility", "-print-archive-stats", "-shuffle-sections", " -thinlto- viens modulis", "-unikÄls", "-rosegments", "-threads=N". Pievienota opcija ā--time-traceā, lai saglabÄtu izsekoÅ”anu failÄ, ko pÄc tam var analizÄt, izmantojot pÄrlÅ«kprogrammas Chrome saskarni chrome://tracing.