Útgáfa af LLVM 11.0 þýðandasvítunni

Eftir sex mánaða þróun fram verkefnisútgáfu LLVM 11.0 — GCC-samhæf verkfæri (þýðendur, hagræðingartæki og kóðaframleiðendur), setja saman forrit í millibitakóða af RISC-líkum sýndarleiðbeiningum (lágmarks sýndarvél með fjölþrepa fínstillingarkerfi). Hægt er að breyta gervikóðanum sem myndast með JIT þýðanda í vélaleiðbeiningar beint á þeim tíma sem forritið er keyrt.

Lykilbreytingin í nýju útgáfunni var innleiðing á Flank, framenda fyrir Fortran tungumálið. Flang styður Fortran 2018, OpenMP 4.5 og OpenACC 3.0, en þróun verkefnisins hefur ekki enn verið lokið og framhliðin takmarkast við þáttun kóða og athuga hvort það sé rétt. Myndun LLVM millikóða er ekki enn studd og til að búa til keyranlegar skrár er kanónískur kóða búinn til og sendur til ytri Fortran þýðanda.

Endurbætur í Clang 11.0:

  • Bætti við getu til að endurheimta óhlutbundið setningafræðitré (AST) fyrir brotinn C++ kóða, sem hægt er að nota til að hjálpa við að greina villur og veitir viðbótarupplýsingar til ytri tóla eins og clang-tidy og clangd. Eiginleikinn er sjálfgefið virkur fyrir C++ kóða og er stjórnað í gegnum "-Xclang -f[no-]recovery-ast" valkostina.
  • Bætt við nýjum greiningarhamum:
    • „-Wpointer-to-int-cast“ er hópur viðvarana um að varpa vísum á heiltölugerð int sem rúmar ekki öll möguleg gildi.
    • "-Wuninitialized-const-reference" - viðvörun um að senda óinitialized breytur í fallbreytur sem samþykkja tilvísunarrök með "const" eigindinni.
    • "-Wimplicit-const-int-float-conversion" - virkjuð sjálfgefna viðvörun um óbeina breytingu á raunverulegum fasta í heiltölugerð.
  • Fyrir ARM pallinn eru C aðgerðir sem eru innbyggðar í þýðandann veittar (Eiginleikar), skipt út fyrir skilvirkar vektorleiðbeiningar Arm v8.1-M MVE og CDE. Tiltækar aðgerðir eru skilgreindar í hausskrám arm_mve.h og arm_cde.h.
  • Bætt við sett af útvíkkuðum heiltölutegundum _ExtInt(N), sem gerir þér kleift að búa til gerðir sem eru ekki margfeldi af krafti tveggja, sem hægt er að vinna á skilvirkan hátt á FPGA/HLS. Til dæmis, _ExtInt(7) skilgreinir heiltölugerð sem samanstendur af 7 bitum.
  • Bætt við fjölvi sem skilgreina stuðning fyrir innbyggðar C aðgerðir byggðar á ARM SVE (Scalable Vector Extension) leiðbeiningum:
    __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. Til dæmis er __ARM_FEATURE_SVE fjölvi skilgreind þegar AArch64 kóða er búið til með því að stilla skipanalínuvalkostinn "-march=armv8-a+sve".

  • "-O" fáninn er nú auðkenndur með "-O1" fínstillingarstillingu í stað "-O2".
  • Nýjum þýðandafánum bætt við:
    • "-fstack-clash-protection" - gerir vörn gegn gatnamót stafla og hrúgu.
    • "-ffp-exception-behavior={ignore,maytrap,strict}" - gerir þér kleift að velja undantekningarstjórnunarstillingu fyrir flottölur.
    • "-ffp-model={precise,strict,fast}" - Einfaldar aðgang að röð sérhæfðra valkosta fyrir flottölur.
    • "-fpch-codegen" og "-fpch-debuginfo" til að búa til forsamsettan haus (PCH) með aðskildum hlutskrám fyrir kóða og villuupplýsingar.
    • „-fsanitize-coverage-allowlist“ og „-fsanitize-coverage-blocklist“ til að athuga hvíta og svarta lista yfir þekjuprófun.
    • „-mtls-size={12,24,32,48}“ til að velja stærð TLS (thread-local storage).
    • "-menable-experimental-extension" til að virkja tilrauna RISC-V viðbætur.
  • Sjálfgefin stilling fyrir C er "-fno-common", sem gerir kleift að fá skilvirkari aðgang að alþjóðlegum breytum á sumum kerfum.
  • Sjálfgefið skyndiminni hefur verið flutt úr /tmp í ~/.cache möppuna. Til að hnekkja geturðu notað „-fmodules-cache-path=" fána.
  • Sjálfgefinn C tungumálastaðall hefur verið uppfærður úr gnu11 í gnu17.
  • Bætti við bráðabirgðastuðningi fyrir GNU C viðbót "asm inline» til að bæta við samsetningarinnskotum. Enn er verið að greina framlenginguna en ekki afgreidd á nokkurn hátt.
  • Möguleikarnir sem tengjast OpenCL og CUDA stuðningi hafa verið auknir. Bætti við stuðningi við OpenCL 2.0 blokkagreiningu og innleiddi nýja OpenMP 5.0 eiginleika.
  • Bætti IndentExternBlock valmöguleikanum við tóli í clang-sniði fyrir aðlögun innan ytri "C" og ytri "C++" blokka.
  • Stöðugreiningartækið hefur bætt meðhöndlun á erfðum smiðum í C++. Bætt við nýjum ávísunum alpha.core.C11Lock og alpha.fuchsia.Lock til að athuga með læsingar, alpha.security.cert.pos.34c til að greina óörugga notkun putenv, webkit.NoUncountedMemberChecker og webkit.RefCntblBaseVirtualDtor til að greina vandamál með alfa óteljandi gerðir .cplusplus .SmartPtr til að athuga með núll snjallbendi.
  • Í linter clang-snyrtilegur bætt við stór hluti nýrra ávísana.
  • Clangd skyndiminni miðlarinn (Clang Server) hefur bætt afköst og bætt við nýjum greiningargetu.

Helstu nýjungar LLVM 11.0:

  • Byggingarkerfinu hefur verið skipt yfir í að nota Python 3. Ef Python 3 er ekki tiltækt er hægt að snúa aftur til að nota Python 2.
  • Framendinn með þýðandanum fyrir Go tungumálið (llgo) er útilokaður frá útgáfunni, sem gæti verið endurskipulagt í framtíðinni.
  • Vigur-fall-abi-afbrigði eigindinni hefur verið bætt við milliframsetningu (IR) til að lýsa kortlagningu milli kvarða- og vektorfalla til að vektorisera símtöl. Frá llvm::VectorType eru tvær aðskildar vektorgerðir llvm::FixedVectorType og llvm::ScalableVectorType.
  • Útibú byggt á udef gildum og að senda undef gildi til staðlaðra aðgerða bókasafns er viðurkennt sem óskilgreind hegðun. IN
    memset/memcpy/memmove gerir kleift að senda undef ábendingar, en ef færibreytan með stærð er núll.

  • LLJIT hefur bætt við stuðningi við að framkvæma truflanir frumstillingar í gegnum LLJIT::initialize og LLJIT::deinitialize aðferðirnar. Möguleikinn á að bæta kyrrstæðum bókasöfnum við JITDylib með því að nota StaticLibraryDefinitionGenerator flokkinn hefur verið innleiddur. Bætt við C API fyrir ORCv2 (API til að byggja upp JIT þýðendur).
  • Stuðningur fyrir Cortex-A64, Cortex-A34, Cortex-A77 og Cortex-X78 örgjörva hefur verið bætt við bakenda fyrir AArch1 arkitektúrinn. Innleidd ARMv8.2-BF16 (BFloat16) og ARMv8.6-A viðbætur, þar á meðal RMv8.6-ECV (Enhanced Counter Virtualization), ARMv8.6-FGT (Fine Grained Traps), ARMv8.6-AMU (Activity Monitors virtualization) og ARMv8.0-DGH (vísbending um gagnaöflun). Möguleikinn á að búa til kóða fyrir innbyggðar virknibindingar við SVE vektorleiðbeiningar er til staðar.
  • Stuðningur fyrir Cortex-M55, Cortex-A77, Cortex-A78 og Cortex-X1 örgjörva hefur verið bætt við bakhlið ARM arkitektúrsins. Framlengingar framkvæmdar
    Armv8.6-A Matrix Multiply og RMv8.2-AA32BF16 BFloat16.

  • Stuðningur við kóðagerð fyrir POWER10 örgjörva hefur verið bætt við bakenda fyrir PowerPC arkitektúrinn. Lykkjuhagræðingar hafa verið stækkaðar og stuðningur við flotpunkta hefur verið bættur.
  • Bakendinn fyrir RISC-V arkitektúrinn gerir kleift að samþykkja plástra sem styðja útbreidd leiðbeiningasett með tilraunum sem hafa ekki enn verið opinberlega samþykkt.
  • Bakendinn fyrir AVR arkitektúrinn hefur verið færður úr tilraunaflokki yfir í stöðugan, innifalinn í grunndreifingunni.
  • Bakendinn fyrir x86 arkitektúr styður Intel AMX og TSXLDTRK leiðbeiningar. Bætt við vörn gegn árásum LVI (Load Value Injection), og útfærir einnig almennt íhugandi framkvæmd aukaverkanabælingarkerfi til að hindra árásir af völdum íhugandi framkvæmdar á aðgerðum á örgjörvanum.
  • Í bakenda fyrir SystemZ arkitektúrinn hefur stuðningi við MemorySanitizer og LeakSanitizer verið bætt við.
  • Bætti við stuðningi við hausskrá með stærðfræðilegum föstum við Libc++ .
  • Útvíkkað LLD tengimöguleikar. Bættur stuðningur við ELF sniðið, þar á meðal bættu valkostina "--lto-emit-asm", "--lto-whole-program-visibility", "-print-archive-stats", "-shuffle-sections", " -thinnlto- einn-eining", "-einstakt", "-rosegment", "-þræðir=N". Bætt við "--time-trace" valmöguleika til að vista rakninguna í skrá, sem síðan er hægt að greina í gegnum chrome://tracing viðmótið í Chrome.

Heimild: opennet.ru

Bæta við athugasemd