Rakirina berhevoka berhevkarê LLVM 11.0

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.

Pêşkeftinên di Clang 11.0 de:

  • 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.
  • Alên nû yên berhevkar zêde kirin:
    • "-fstack-clash-protection" - parastina li dijî çalak dike xaçerêyên stok û gir.
    • "-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.

sereke nûbûnên LLVM 11.0:

  • 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.

Source: opennet.ru

Add a comment