Ħruġ tas-suite tal-kompilaturi LLVM 11.0

Wara sitt xhur ta 'żvilupp ippreżentata rilaxx tal-proġett LLVM 11.0 — Għodod kompatibbli mal-GCC (kompilaturi, ottimizzaturi u ġeneraturi ta' kodiċi), li jikkompilaw programmi f'bitcode intermedju ta' struzzjonijiet virtwali bħal RISC (magna virtwali ta' livell baxx b'sistema ta' ottimizzazzjoni f'diversi livelli). Il-psewdocode iġġenerat jista 'jiġi kkonvertit bl-użu ta' kompilatur JIT fi struzzjonijiet tal-magni direttament fil-ħin tal-eżekuzzjoni tal-programm.

Il-bidla ewlenija fir-rilaxx il-ġdid kienet l-inklużjoni ta ' Flank, frontend għal-lingwa Fortran. Flang jappoġġja Fortran 2018, OpenMP 4.5 u OpenACC 3.0, iżda l-iżvilupp tal-proġett għadu ma tlestax u l-parti ta 'quddiem hija limitata għal parsing tal-kodiċi u verifika għall-korrettezza. Il-ġenerazzjoni tal-kodiċi intermedju LLVM għadha mhix appoġġjata u biex tiġġenera fajls eżekutibbli, kodiċi kanoniku jiġi ġġenerat u mgħoddi lil kompilatur Fortran estern.

Titjib f'Clang 11.0:

  • Żid il-ħila li tirrestawra s-siġra tas-sintassi astratta (AST) għal kodiċi C++ miksur, li jista 'jintuża biex jgħin fid-dijanjosi ta' żbalji u jipprovdi informazzjoni addizzjonali għal utilitajiet esterni bħal clang-tidy u clangd. Il-karatteristika hija attivata awtomatikament għall-kodiċi C++ u hija kkontrollata permezz tal-għażliet "-Xclang -f[no-]recovery-ast".
  • Modi dijanjostiċi ġodda miżjuda:
    • “-Wpointer-to-int-cast” huwa grupp ta’ twissijiet dwar l-ikkastjar ta’ pointers għal tip ta’ numru sħiħ int li ma jakkomodax il-valuri kollha possibbli.
    • “-Wuninitialized-const-reference” - twissija dwar il-mogħdija ta’ varjabbli mhux inizjalizzati f’parametri tal-funzjoni li jaċċettaw argumenti ta’ referenza bl-attribut “const”.
    • "-Wimplicit-const-int-float-conversion" - ppermettiet awtomatikament twissija dwar konverżjoni impliċita ta' kostanti reali għal tip ta' numru sħiħ.
  • Għall-pjattaforma ARM, funzjonijiet C mibnija fil-kompilatur huma pprovduti (Intrinsiċi), mibdula bi struzzjonijiet vettur effiċjenti Arm v8.1-M MVE u CDE. Il-funzjonijiet disponibbli huma definiti fil-fajls header arm_mve.h u arm_cde.h.
  • Miżjud sett ta 'tipi interi estiżi _ExtInt(N), li jippermettulek toħloq tipi li mhumiex multipli ta' poteri ta 'tnejn, li jistgħu jiġu pproċessati b'mod effiċjenti fuq FPGA/HLS. Per eżempju, _ExtInt(7) jiddefinixxi tip ta' numru sħiħ li jikkonsisti f'7 bits.
  • Miżjuda macros li jiddefinixxu l-appoġġ għal funzjonijiet C integrati bbażati fuq istruzzjonijiet ARM SVE (Scalable Vector Extension):
    __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. Pereżempju, il-makro __ARM_FEATURE_SVE hija definita meta tiġġenera kodiċi AArch64 billi tissettja l-għażla tal-linja tal-kmand "-march=armv8-a+sve".

  • Il-bandiera "-O" issa hija identifikata bil-mod ta 'ottimizzazzjoni "-O1" minflok "-O2".
  • Miżjuda bnadar ġodda tal-kompilaturi:
    • "-fstack-clash-protection" - tippermetti protezzjoni kontra intersezzjonijiet ta 'munzell u borġ.
    • "-ffp-exception-behavior={ignore,maytrap,strict}" - jippermettilek tagħżel il-modalità tal-immaniġġjar tal-eċċezzjoni għal numri b'punt li jvarja.
    • "-ffp-model={precise,strict,fast}" - Jissimplifika l-aċċess għal serje ta' għażliet speċjalizzati għal numri b'punt li jvarja.
    • "-fpch-codegen" u "-fpch-debuginfo" biex jiġġeneraw header ikkumpilat minn qabel (PCH) b'fajls ta' oġġetti separati għall-kodiċi u d-debuginfo.
    • “-fsanitize-coverage-allowlist” u “-fsanitize-coverage-blocklist” għall-iċċekkjar tal-ittestjar tal-kopertura listi bojod u suwed.
    • "-mtls-size={12,24,32,48}" biex tagħżel id-daqs TLS (ħżin lokali tal-ħajt).
    • "-menable-experimental-extension" biex tippermetti estensjonijiet RISC-V sperimentali.
  • Il-mod default għal C huwa "-fno-common", li jippermetti aċċess aktar effiċjenti għal varjabbli globali fuq xi pjattaformi.
  • Il-cache tal-modulu default ġie mċaqlaq minn /tmp għad-direttorju ~/.cache. Biex tegħleb, tista' tuża l-bandiera "-fmodules-cache-path=".
  • L-istandard tal-lingwa C default ġie aġġornat minn gnu11 għal gnu17.
  • Miżjud appoġġ preliminari għall-estensjoni GNU C "asm inline» biex iżżid inserzjonijiet tal-assemblatur. L-estensjoni għadha qed tiġi analizzata, iżda bl-ebda mod ma tiġi pproċessata.
  • Il-kapaċitajiet assoċjati mal-appoġġ OpenCL u CUDA ġew estiżi. Żieda appoġġ għad-dijanjostiċi tal-blokki OpenCL 2.0 u implimentat karatteristiċi ġodda ta 'OpenMP 5.0.
  • Miżjud għażla IndentExternBlock għall-utilità tal-format clang għall-allinjament fi blokki "C" u "C++" esterni.
  • L-analizzatur statiku tejjeb l-immaniġġjar tal-kostrutturi li ntirtu f'C++. Miżjud kontrolli ġodda alpha.core.C11Lock u alpha.fuchsia.Lock biex jiċċekkjaw għal serraturi, alpha.security.cert.pos.34c biex jiskopru użu mhux sikur ta 'putenv, webkit.NoUncountedMemberChecker u webkit.RefCntblBaseVirtualDtor biex jinstabu problemi b'tipi li ma jistgħux jingħaddu, alpha .cplusplus .SmartPtr biex tiċċekkja għal dereference null smart pointer.
  • Fil linter clang-tidy miżjud porzjon kbir ta' kontrolli ġodda.
  • Is-server tal-caching clangd (Clang Server) tejjeb il-prestazzjoni u żied kapaċitajiet dijanjostiċi ġodda.

Il-prinċipali innovazzjonijiet LLVM 11.0:

  • Is-sistema tal-bini nbidlet biex tuża Python 3. Jekk Python 3 ma jkunx disponibbli, huwa possibbli li terġa 'lura għall-użu ta' Python 2.
  • Il-parti ta 'quddiem mal-kompilatur għal-lingwa Go (llgo) hija eskluża mir-rilaxx, li jista' jiġi ristrutturat fil-futur.
  • L-attribut vector-function-abi-variant ġie miżjud mar-rappreżentazzjoni intermedja (IR) biex jiddeskrivi l-immappjar bejn il-funzjonijiet skalari u vettorjali biex jiġu vettorizzati sejħiet. Minn llvm::VectorType hemm żewġ tipi ta' vettori separati llvm::FixedVectorType u llvm::ScalableVectorType.
  • Il-fergħat ibbażati fuq il-valuri udef u l-għadd ta' valuri undef għal funzjonijiet standard tal-librerija hija rikonoxxuta bħala imġieba mhux definita. IN
    memset/memcpy/memmove jippermetti li jgħaddu pointers undef, imma jekk il-parametru bid-daqs huwa żero.

  • LLJIT żied appoġġ għat-twettiq ta 'inizjalizzazzjonijiet statiċi permezz tal-metodi LLJIT::initialize u LLJIT::deinitialize. Ġiet implimentata l-abbiltà li żżid libreriji statiċi ma' JITDylib billi tuża l-klassi StaticLibraryDefinitionGenerator. Miżjud C API għal ORCv2 (API għall-bini ta' kompilaturi JIT).
  • L-appoġġ għall-proċessuri Cortex-A64, Cortex-A34, Cortex-A77 u Cortex-X78 ġie miżjud mal-backend għall-arkitettura AArch1. Implimenta l-estensjonijiet ARMv8.2-BF16 (BFloat16) u ARMv8.6-A, inklużi RMv8.6-ECV (Virtwalizzazzjoni tal-Kontro Mtejba), ARMv8.6-FGT (Neses tal-ħbub fin), ARMv8.6-AMU (virtwalizzazzjoni tal-Monituri tal-Attività) u ARMv8.0-DGH (ħjiel għall-ġbir tad-dejta). Il-kapaċità li tiġġenera kodiċi għall-irbit ta' funzjonijiet integrati għal struzzjonijiet tal-vettur SVE hija pprovduta.
  • L-appoġġ għall-proċessuri Cortex-M55, Cortex-A77, Cortex-A78 u Cortex-X1 ġie miżjud mal-backend għall-arkitettura ARM. Estensjonijiet implimentati
    Armv8.6-A Matrix Multiply u RMv8.2-AA32BF16 BFloat16.

  • L-appoġġ għall-ġenerazzjoni tal-kodiċi għall-proċessuri POWER10 ġie miżjud mal-backend għall-arkitettura PowerPC. L-ottimizzazzjonijiet tal-linja ġew estiżi u l-appoġġ floating point ġie mtejjeb.
  • Il-backend għall-arkitettura RISC-V jippermetti l-aċċettazzjoni ta 'garża li jappoġġaw settijiet ta' struzzjonijiet estiżi sperimentali li għadhom ma ġewx approvati uffiċjalment.
  • Il-backend għall-arkitettura AVR ġie trasferit mill-kategorija sperimentali għal stabbli, inkluża fid-distribuzzjoni bażika.
  • Il-backend għall-arkitettura x86 jappoġġja l-istruzzjonijiet Intel AMX u TSXLDTRK. Protezzjoni miżjuda kontra attakki LVI (Injezzjoni ta 'Valur tat-Tagħbija), u timplimenta wkoll mekkaniżmu ġenerali ta' Soppressjoni ta 'Effetti sekondarji ta' Eżekuzzjoni Spekulattiva biex jimblokka attakki kkawżati minn eżekuzzjoni spekulattiva ta 'operazzjonijiet fuq is-CPU.
  • Fil-backend għall-arkitettura SystemZ, ġie miżjud appoġġ għal MemorySanitizer u LeakSanitizer.
  • Appoġġ miżjud għall-fajl header b'kostanti matematiċi għal Libc++ .
  • Estiża Kapaċità tal-linker LLD. Appoġġ imtejjeb għall-format ELF, inklużi l-għażliet miżjuda "--lto-emit-asm", "--lto-whole-program-visibility", "-print-archive-stats", "-shuffle-sections", " -thinlto- single-module", "-unique", "-rosegment", "-threads=N". Miżjud għażla "--time-trace" biex issalva t-traċċa f'fajl, li mbagħad tista 'tiġi analizzata permezz tal-interface chrome://tracing fil-Chrome.

Sors: opennet.ru

Żid kumment