Piştî şeş mehan ji pêşveçûnê pêşkêş kirin serbestberdana projeyê LLVM 11.0 - Amûrên lihevhatî yên GCC (berhevkar, optimîzator û hilberînerên kodê), berhevkirina bernameyan di bitkoda navîn a rêwerzên virtual yên mîna RISC (makîna virtual ya nizm bi pergalek xweşbînkirina pir-astî). Pseudokoda hatî çêkirin dikare bi karanîna berhevkarek JIT-ê rasterast di dema pêkanîna bernameyê de li rêwerzên makîneyê were veguheztin.
Guhertina sereke di serbestberdana nû de tevlêbûna bû Flank, pêşiyê ji bo zimanê Fortran. Flang Fortran 2018, OpenMP 4.5 û OpenACC 3.0 piştgirî dike, lê pêşkeftina projeyê hîn neqediyaye û dawiya pêşiyê bi parkirina kodê û kontrolkirina rastbûnê ve sînorkirî ye. Hilberîna koda navîn a LLVM hîna nayê piştgirî kirin û ji bo çêkirina pelên darvekirî, koda kanonîkî tête çêkirin û ji berhevkarek derveyî Fortran re derbas dibe.
Kapasîteya vegerandina dara hevoksaziya razber (AST) ji bo koda C++ ya şikestî, ku dikare were bikar anîn da ku ji bo tespîtkirina xeletiyan bibe alîkar û agahdariya zêde ji karûbarên derveyî yên wekî clang-tidy û clangd re peyda dike. Taybetmendî ji bo koda C++-ê ji hêla xwerû ve hatî çalak kirin û bi vebijarkên "-Xclang -f[no-]recovery-ast" tê kontrol kirin.
Modên nû yên tespîtkirinê zêde kirin:
"-Wpointer-to-int-cast" komeke hişyariyan e ku di derbarê avêtina nîşankeran de ji cûreyek int-ê re ku hemî nirxên mumkun bi cih nayîne.
"-Wuninitialized-const-reference" - hişyariya derbaskirina guhêrbarên nedestpêkkirî di parametreyên fonksiyonê de ku argumanên referansê bi taybetmendiya "const" qebûl dikin.
"-Wimplicit-const-int-float-conversion" - ji hêla xwerû ve hişyariya di derbarê veguheztina nepenî ya domdarek rastîn bo celebek jimareyek de hate çalak kirin.
Ji bo platforma ARM, fonksiyonên C-yê ku di berhevkerê de hatî çêkirin têne peyda kirin (Intrinsics), ji hêla rêwerzên vektorê yên bikêrhatî ve hatî guhertin Arm v8.1-M MVE û CDE. Fonksiyonên berdest di pelên serî de arm_mve.h û arm_cde.h têne diyar kirin.
Zêde kirin komek cûrbecûr hejmarên dirêjkirî _ExtInt(N), ku dihêle hûn celebên ku ne pirhejmarên du duyan in, biafirînin, ku dikarin bi bandor li ser FPGA/HLS werin hilanîn. Bo nimûne, _ExtInt(7) cureyek jimareke ku ji 7 bit pêk tê diyar dike.
Makroyên zêde kirin ku piştgirî ji bo fonksiyonên C-ya çêkirî li ser bingeha rêwerzên ARM SVE (Pêvekkirina Vektora Scalable) diyar dikin:
__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. Mînakî, makroya __ARM_FEATURE_SVE dema ku koda AArch64 çêdike bi danîna vebijarka rêzika fermanê "-march=armv8-a+sve" tê destnîşankirin.
Ala "-O" niha li şûna "-O1" bi moda optimîzasyona "-O2" tê nasîn.
"-ffp-exception-behavior={ignore,maytrap,strict}" - destûrê dide te ku hûn ji bo hejmarên xala herikîn moda îstîsnayê hilbijêrin.
"-ffp-model={precise,strict,fast}" - Gihîştina rêzek vebijarkên pispor ên ji bo hejmarên xala herikandinê hêsan dike.
"-fpch-codegen" û "-fpch-debuginfo" ji bo ku ji bo kod û debuginfo sernavek pêş-berhevkirî (PCH) bi pelên cewherên cihêreng çêbikin.
"-fsanitize-coverage-allowlist" û "-fsanitize-coverage-blocklist" ji bo kontrolkirina ceribandina vegirtinê navnîşên spî û reş.
"-mtls-size={12,24,32,48}" ji bo bijartina mezinahiya TLS (têl-hilanînên herêmî).
"-menable-experimental-extension" ji bo çalakkirina pêvekên RISC-V yên ceribandinê.
Moda xwerû ya ji bo C-yê "-fno-common" e, ku destûrê dide gihandina guhêrbarên gerdûnî yên li ser hin platforman.
Kacheya modulê ya xwerû ji /tmp veguherî pelrêça ~/.cache. Ji bo serjêkirinê, hûn dikarin ala "-fmodules-cache-path=" bikar bînin.
Standarda zimanê C ya xwerû ji gnu11 bo gnu17 hate nûve kirin.
Piştgiriya pêşîn ji bo dirêjkirina GNU C zêde kir "asm inline» ji bo lê zêde bike inserts assembler. Berfirehkirin hîn jî tê analîz kirin, lê bi ti awayî nayê pêvajo kirin.
Kapasîteyên ku bi piştgiriya OpenCL û CUDA ve girêdayî ne hatine berfireh kirin. Piştgiriyek ji bo tespîtkirina astengkirina OpenCL 2.0 zêde kir û taybetmendiyên nû yên OpenMP 5.0 bicîh kir.
Vebijarka IndentExternBlock li amûra clang-format ji bo lihevkirina di nav blokên derveyî "C" û derveyî "C++" de zêde kir.
Analîzatora statîk di C++ de rêvebirina çêkerên mîras çêtir kiriye. Kontrolên nû yên alpha.core.C11Lock û alpha.fuchsia.Lock lê zêde kirin da ku qufilan kontrol bikin, alpha.security.cert.pos.34c ji bo tespîtkirina karanîna neewle ya putenv, webkit.NoUncountedMemberChecker û webkit.RefCntblBaseVirtualDtor ji bo tespîtkirina pirsgirêkên bi alpha yên bêhejmar .cplusplus .SmartPtr ji bo kontrolkirina betalkirina nîşankera jîr a null.
Di linter clang-tidy zêde kirin beşek mezin ji kontrolên nû.
Pêşkêşkara caching clangd (Clang Server) performansê çêtir kiriye û kapasîteyên nû yên tespîtkirinê zêde kiriye.
Pergala avakirinê ji bo karanîna Python 3-ê hate guheztin. Heke Python 3 peyda nebe, mimkun e ku vegerin ser karanîna Python 2.
Pêşiyê bi berhevkarê ji bo zimanê Go (llgo) ji berdanê tê derxistin, ku dibe ku di pêşerojê de ji nû ve were saz kirin.
Taybetmendiya vector-function-abi-variant li nûneriya navîn (IR) hate zêdekirin da ku nexşeya di navbera fonksiyonên scalar û vektorî de ji bo vektorîzekirina bangan diyar bike. Ji llvm::VectorType du cureyên vektorî yên cuda hene llvm::FixedVectorType û llvm::ScalableVectorType.
Şaxkirina li ser bingeha nirxên udef û derbaskirina nirxên undef ji fonksiyonên pirtûkxaneya standard re wekî tevgerek nediyar tê nas kirin. LI
memset/memcpy/memmove destûrê dide ku nîşangirên undef derbas bibin, lê heke pîvana bi mezinahî sifir be.
LLJIT ji bo pêkanîna destpêkên statîk bi rêbazên LLJIT::destpêkirin û LLJIT::deinitialize piştgirî zêde kiriye. Kapasîteya lê zêdekirina pirtûkxaneyên statîk li JITDylib bi karanîna pola StaticLibraryDefinitionGenerator pêk anî. C API ji bo zêde kir ORCv2 (API ji bo avakirina berhevkarên JIT).
Piştgiriya ji bo pêvajoyên Cortex-A64, Cortex-A34, Cortex-A77 û Cortex-X78 ji bo mîmariya AArch1 li pişta paşîn hate zêdekirin. Pêvekirinên ARMv8.2-BF16 (BFloat16) û ARMv8.6-A, di nav de RMv8.6-ECV (Virtualîzasyona Berhevkarê Pêşkeftî), ARMv8.6-FGT (Xefikên Birînên Xweşik), ARMv8.6-AMU (Vîrtûalîkirina Çavdêrên Çalakiyê) û ARMv8.0-DGH (Hînek berhevkirina daneyan). Kapasîteya çêkirina kodê ji bo fonksiyonên çêkirî-girêdan bi rêwerzên vektorê SVE tê peyda kirin.
Piştgiriya ji bo pêvajoyên Cortex-M55, Cortex-A77, Cortex-A78 û Cortex-X1 ji bo mîmariya ARM-ê li piştê hatî zêdekirin. Extensions pêkanîn
Armv8.6-A Matrix Multiply and RMv8.2-AA32BF16 BFloat16.
Piştgiriya ji bo hilberîna kodê ya ji bo pêvajoyên POWER10 ji bo mîmariya PowerPC-ê li piştê hate zêdekirin. Optimîzasyonên loopê hatine berfireh kirin û piştgiriya xala herikîn baştir bûye.
Piştgiriya ji bo mîmariya RISC-V destûrê dide pejirandina paçên ku piştgirî didin komên rêwerzên dirêjkirî yên ceribandinê yên ku hîn bi fermî nehatine pejirandin.
Piştgiriya ji bo mîmariya AVR-ê ji kategoriya ceribandinê veguherî stabîl, ku di nav belavkirina bingehîn de ye.
Piştgiriya ji bo mîmariya x86 rêwerzên Intel AMX û TSXLDTRK piştgirî dike. Parastina li dijî êrîşan zêde kir LVI (Injection Value Load), û di heman demê de mekanîzmayek Tepisandina Bandora Aliyê ya Birêvebirina Spekulatîf a giştî bicîh tîne da ku êrişên ku ji ber darvekirina spekulatîf a operasyonên li ser CPU-yê têne çêkirin asteng bike.
Di paşîn de ji bo mîmariya SystemZ, piştgirî ji bo MemorySanitizer û LeakSanitizer hatiye zêdekirin.
Piştgiriyek ji bo pelê sernavê bi berdewamên matematîkî li Libc++ zêde kir .
Berfireh kirin Kapasîteyên girêdana LLD. Piştgiriya pêşkeftî ya ji bo formata ELF, di nav de vebijarkên zêdekirî "--lto-emit-asm", "--lto-tevahiya-bername-dîtbar", "-çap-arşîv-stats", "-shuffle-sections", " -thinlto- yek-modul", "-yekane", "-rosegment", "-threads=N". Vebijarka "--time-trace" hate zêdekirin da ku şopê li pelek hilîne, ku dûv re dikare bi navgîniya chrome://tracing li Chrome were analîz kirin.