LLVM 11.0 konpiladore-multzoaren kaleratzea

Sei hilabeteko garapenaren ostean aurkeztu proiektuaren kaleratzea LLVM 11.0 β€” GCC-rekin bateragarriak diren tresnak (konpilatzaileak, optimizatzaileak eta kode-sortzaileak), programak RISC moduko instrukzio birtualen bitarteko bitkodean konpilatzea (maila baxuko makina birtuala maila anitzeko optimizazio-sistema duena). Sortutako pseudokodea JIT konpiladore bat erabiliz makinen jarraibideetan bihur daiteke zuzenean programa exekutatzen den unean.

Argitalpen berriaren aldaketa gakoa sartzea izan zen Albokoa, Fortran hizkuntzaren frontend-a. Flang-ek Fortran 2018, OpenMP 4.5 eta OpenACC 3.0 onartzen ditu, baina proiektuaren garapena oraindik ez da amaitu eta frontend-a kodea analizatzera eta zuzentasuna egiaztatzera mugatzen da. LLVM bitarteko kodea sortzea oraindik ez da onartzen eta fitxategi exekutagarriak sortzeko, kode kanonikoa sortzen da eta kanpoko Fortran konpilatzaile batera pasatzen da.

Hobekuntzak Clang 11.0-n:

  • Sintaxi abstraktuaren zuhaitza berreskuratzeko gaitasuna gehitu da (AST) hautsitako C++ koderako, erroreak diagnostikatzen laguntzeko eta kanpoko utilitateei informazio gehigarria eskaintzen diena, hala nola clang-tidy eta clangd. Eginbidea lehenespenez gaituta dago C++ kodearentzat eta "-Xclang -f[no-]recovery-ast" aukeren bidez kontrolatzen da.
  • Diagnostiko modu berriak gehitu dira:
    • "-Wpointer-to-int-cast" balio posible guztiak sartzen ez dituen int zenbaki oso batera erakusleak igortzeari buruzko abisu-talde bat da.
    • "-Wuninitialized-const-reference" - hasieratu gabeko aldagaiak "const" atributua duten erreferentzia-argumentuak onartzen dituzten funtzio-parametroetan pasatzeari buruzko abisua.
    • "-Wimplicit-const-int-float-conversion" - konstante erreal baten osoko mota bateko bihurketa inplizituari buruzko abisua lehenespenez gaituta dago.
  • ARM plataformarako, konpilatzailean integratutako C funtzioak eskaintzen dira (Berezkoak), argibide bektorial eraginkorrek ordezkatuta Arm v8.1-M MVE eta CDE. Eskuragarri dauden funtzioak arm_mve.h eta arm_cde.h goiburuko fitxategietan definitzen dira.
  • Gehituta _ExtInt(N) zenbaki oso hedatuen multzoa, biren potentziaren multiploak ez diren motak sortzeko aukera ematen duena, FPGA/HLS-en eraginkortasunez prozesatu daitezkeenak. Adibidez, _ExtInt(7) 7 bitez osatutako zenbaki oso bat definitzen du.
  • ARM SVE (Scalable Vector Extension) argibideetan oinarritutako C funtzioen euskarria definitzen duten makroak gehitu dira:
    __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. Adibidez, __ARM_FEATURE_SVE makroa AArch64 kodea sortzean definitzen da "-march=armv8-a+sve" komando-lerroko aukera ezarriz.

  • "-O" bandera orain "-O1" optimizazio moduarekin identifikatzen da "-O2"ren ordez.
  • Konpiladore-marka berriak gehitu dira:
    • "-fstack-clash-protection" - aurkako babesa gaitzen du pila eta pila elkarguneak.
    • "-ffp-exception-behavior={ignore,maytrap,strict}" - Koma mugikorreko zenbakietarako salbuespen-kudeatzailea modua hautatzeko aukera ematen dizu.
    • "-ffp-model={precise,strict,fast}" - Koma mugikorreko zenbakietarako aukera espezializatu batzuetarako sarbidea errazten du.
    • "-fpch-codegen" eta "-fpch-debuginfo" aurrez konpilatutako goiburu bat (PCH) sortzeko, kodearen eta araztearen informazioa objektu-fitxategi bereiziekin.
    • "-fsanitize-coverage-allowlist" eta "-fsanitize-coverage-blocklist" estaldura probak zerrenda zuriak eta beltzak egiaztatzeko.
    • "-mtls-size={12,24,32,48}" TLS (thread-local storage) tamaina hautatzeko.
    • "-menable-experimental-extension" RISC-V luzapen esperimentalak gaitzeko.
  • C-ren modu lehenetsia "-fno-common" da, eta horrek aldagai globaletarako sarbide eraginkorragoa ahalbidetzen du plataforma batzuetan.
  • Moduluaren cache lehenetsia /tmptik ~/.cache direktoriora eraman da. Gainditzeko, "-fmodules-cache-path=" marka erabil dezakezu.
  • C hizkuntza estandar lehenetsia gnu11tik gnu17ra eguneratu da.
  • GNU C luzapenerako aurretiazko euskarria gehitu da "asm lerroanΒ» muntatzaileen txertaketak gehitzeko. Luzapena aztertzen ari da oraindik, baina ez da inola ere prozesatu.
  • OpenCL eta CUDA euskarriarekin lotutako gaitasunak zabaldu dira. OpenCL 2.0 blokeen diagnostikorako euskarria gehitu da eta OpenMP 5.0 funtzio berriak ezarri ditu.
  • IndentExternBlock aukera gehitu da clang-format utilitateari extern "C" eta extern "C++" blokeen barruan lerrokatzeko.
  • Analizatzaile estatikoak C++-n heredatutako eraikitzaileen kudeaketa hobetu du. Egiaztapen berriak gehitu dira alpha.core.C11Lock eta alpha.fuchsia.Lock blokeoak egiaztatzeko, alpha.security.cert.pos.34c putenv, webkit.NoUncountedMemberChecker eta webkit.RefCntblBaseVirtualDtor mota kontaezinak dituzten arazoak detektatzeko, alpha. .cplusplus .SmartPtr erakusle adimendunaren deserreferentzia nulua egiaztatzeko.
  • In linter clang-txukun gehitu txeke berrien zati handi bat.
  • Clangd caching zerbitzariak (Clang Server) errendimendua hobetu du eta diagnostiko gaitasun berriak gehitu ditu.

Nagusia berrikuntzak LLVM 11.0:

  • Eraikuntza-sistema Python 3 erabiltzera aldatu da. Python 3 erabilgarri ez badago, Python 2 erabiltzera itzul daiteke.
  • Go hizkuntzarako (llgo) konpilatzailea duen frontend-a bertsiotik kanpo geratzen da, etorkizunean berregituratu daitekeena.
  • Vector-function-abi-variant atributua tarteko irudikapenari (IR) gehitu zaio deiak bektorializatzeko funtzio eskalar eta bektorialen arteko mapak deskribatzeko. Llvm::VectorType-tik bi bektore mota bereizten dira llvm::FixedVectorType eta llvm::ScalableVectorType.
  • Udef balioetan oinarritutako adarkatzea eta undef balioak liburutegiko funtzio estandarrei pasatzea definitu gabeko portaera gisa aitortzen da. IN
    memset/memcpy/memmove undef erakusleak pasatzea ahalbidetzen du, baina tamaina duen parametroa zero bada.

  • LLJIT-ek hasieraketa estatikoak egiteko laguntza gehitu du LLJIT::initialize eta LLJIT::deinitialize metodoen bidez. StaticLibraryDefinitionGenerator klasea erabiliz JITDylib-i liburutegi estatikoak gehitzeko gaitasuna inplementatu da. C APIa gehitu da ORCv2 (JIT konpiladoreak eraikitzeko APIa).
  • Cortex-A64, Cortex-A34, Cortex-A77 eta Cortex-X78 prozesadoreentzako euskarria gehitu da AArch1 arkitekturaren backend-ean. ARMv8.2-BF16 (BFloat16) eta ARMv8.6-A luzapenak inplementatu dira, RMv8.6-ECV (Kontagailuen Birtualizazio Hobetua), ARMv8.6-FGT (Fine Grained Traps), ARMv8.6-AMU (Activity Monitors birtualizazioa) barne. eta ARMv8.0-DGH (Datuak biltzeko aholkua). SVE instrukzio bektorialetarako funtzio-loturak egiteko kodea sortzeko gaitasuna eskaintzen da.
  • Cortex-M55, Cortex-A77, Cortex-A78 eta Cortex-X1 prozesadoreentzako euskarria gehitu da ARM arkitekturaren backend-ean. Inplementatutako luzapenak
    Armv8.6-A Matrix Multiply eta RMv8.2-AA32BF16 BFloat16.

  • POWER10 prozesadoreetarako kodea sortzeko laguntza gehitu da PowerPC arkitekturaren backend-ean. Begizta optimizazioak zabaldu dira eta koma mugikorraren euskarria hobetu da.
  • RISC-V arkitekturaren backend-ak oraindik ofizialki onartu ez diren instrukzio-multzo hedatu esperimentalak onartzen dituzten adabakiak onartzen ditu.
  • AVR arkitekturaren backend-a kategoria esperimentaletik egonkorra pasatu da, oinarrizko banaketan sartuta.
  • x86 arkitekturaren backendak Intel AMX eta TSXLDTRK argibideak onartzen ditu. Erasoen aurkako babes gehiago LVI (Load Value Injection), eta exekuzio espekulatiboko albo-efektuen kentzeko mekanismo orokor bat ere ezartzen du CPUan eragiketen exekuzio espekulatiboak eragindako erasoak blokeatzeko.
  • SystemZ arkitekturaren backend-ean, MemorySanitizer eta LeakSanitizer-en laguntza gehitu da.
  • Konstante matematikoekin goiburuko fitxategirako laguntza gehitu da Libc++-ra .
  • Zabaldua LLD lotura-gaitasunak. ELF formatuaren euskarria hobetu da, "--lto-emit-asm", "--lto-whole-program-visibility", "-print-archive-stats", "-shuffle-sections" eta "-shuffle-sections" gehitutako aukerak barne. -thinlto- modulu bakarrekoa", "-bakarra", "-rosegment", "-hariak=N". "--time-trace" aukera gehitu da arrastoa fitxategi batean gordetzeko, gero Chrome-ko chrome://tracing interfazearen bidez aztertu ahal izateko.

Iturria: opennet.ru

Gehitu iruzkin berria