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

Eftir sex mánaða þróun var útgáfa LLVM 12.0 verkefnisins kynnt - GCC-samhæfð verkfærasett (þýðendur, hagræðingartæki og kóðaframleiðendur) sem safnar saman forritum í millibitakóða af RISC-líkum sýndarleiðbeiningum (lágmarks sýndarvél með hagræðingarkerfi á mörgum stigum). Hægt er að breyta gervikóðanum sem myndast með JIT þýðanda í vélaleiðbeiningar beint á þeim tíma sem forritið er keyrt.

Umbætur í Clang 12.0:

  • Stuðningur við „líklega“ og „ólíklega“ eiginleika sem lagðar eru til í C++20 staðlinum hefur verið innleiddur og virkjaður sjálfgefið, sem gerir fínstillingu kleift að upplýsa um líkurnar á því að skilyrta smíðin verði ræst (til dæmis, „[[líklegt ]] ef (handahófi > 0) {“).
  • Bætti við stuðningi fyrir AMD Zen 3 (-march=znver3), Intel Alder Lake (-march=alderlake) og Intel Sapphire Rapids (-march=sapphirerapids) örgjörva.
  • Bætti við stuðningi við "-march=x86-64-v[234]" fána til að velja x86-64 byggingarlistarstig (v2 - nær yfir SSE4.2, SSSE3, POPCNT og CMPXCHG16B viðbætur; v3 - AVX2 og MOVBE; v4 - AVX-512 ).
  • Bætti við stuðningi fyrir Arm Cortex-A78C (cortex-a78c), Arm Cortex-R82 (cortex-r82), Arm Neoverse V1 (neoverse-v1), Arm Neoverse N2 (neoverse-n2) og Fujitsu A64FX (a64fx) örgjörva. Til dæmis, til að virkja fínstillingu fyrir Neoverse-V1 örgjörva, geturðu tilgreint „-mcpu=neoverse-v1“.
  • Fyrir AArch64 arkitektúrinn hefur nýjum þýðandafánum "-moutline-atomics" og "-mno-outline-atomics" verið bætt við til að virkja eða slökkva á hjálparaðgerðum atómaðgerða, eins og "__aarch64_cas8_relax". Slíkar aðgerðir greina á keyrslutíma hvort LSE (Large System Extensions) stuðningur sé tiltækur og nota leiðbeiningar um lotuvinnsluforrit eða falla aftur í að nota LL/SC (Load-link/store-conditioned) leiðbeiningar fyrir samstillingu.
  • Bætt við "-fbinutils-version" valmöguleika til að velja markútgáfu af binutils föruneytinu fyrir samhæfni við eldri tengi- og samsetningarhegðun.
  • Fyrir ELF keyranlegar skrár, þegar "-gz" fáninn er tilgreindur, er þjöppun á villuleitarupplýsingum með því að nota zlib bókasafnið sjálfgefið virkjuð (gz=zlib). Til að tengja hlutaskrárnar sem myndast þarf lld eða GNU binutils 2.26+. Til að endurheimta eindrægni við eldri útgáfur af binutils geturðu tilgreint "-gz=zlib-gnu".
  • „Þessi“ bendillinn er nú unnin með ónull og tilvísunarhæfni(N) ávísunum. Til að fjarlægja nonnull eigindina þegar þú þarft að nota NULL gildi geturðu notað "-fdelete-null-pointer-checks" valkostinn.
  • Á Linux pallinum er „-fasynchronous-unwind-tables“ stillingin virkjuð fyrir AArch64 og PowerPC arkitektúrana til að búa til afrólunartöflur, eins og í GCC.
  • Í "#pragma clang loop vectorize_width" bætti við möguleikanum á að tilgreina "fast" (sjálfgefið) og "scalable" valkostina til að velja vektorization aðferðina. „Scalable“ hátturinn, óháður vigurlengd, er tilraunastarfsemi og hægt er að nota hann á vélbúnaði sem styður stigstærð vigurvæðingu.
  • Bættur stuðningur fyrir Windows vettvang: Opinber tvöfaldur samsetningar fyrir Windows á Arm64 kerfum hafa verið útbúin, þar á meðal Clang þýðandann, LLD tengilinn og þýðanda-rt keyrslusöfnin. Þegar smíðað er fyrir MinGW markpalla er .exe viðskeytinu bætt við, jafnvel þegar verið er að krosssamstilla.
  • Möguleikarnir sem tengjast stuðningi við OpenCL, OpenMP og CUDA hafa verið auknir. Bætti við valkostum "-cl-std=CL3.0" og "-cl-std=CL1.0" til að velja fjölvivalkosti fyrir OpenCL 3.0 og OpenCL 1.0. Greiningartæki hafa verið stækkuð.
  • Bætti við stuðningi við HRESET, UINTR og AVXVNNI leiðbeiningarnar sem eru útfærðar í sumum x86-undirbúnum örgjörvum.
  • Á x86 kerfum er stuðningur við "-mtune=" valmöguleikinn virkur, sem gerir valdar fínstillingar örarkitektúra kleift óháð "-march=" gildinu.
  • Stöðugreiningartækið hefur bætt úrvinnslu sumra POSIX aðgerða og verulega bætt ákvörðun á niðurstöðu skilyrtra aðgerða þegar það eru nokkur táknræn gildi í samanburðinum. Nýjum ávísunum hefur verið bætt við: fuchia.HandleChecker (skilgreinir handföng í mannvirkjum), webkit.UncountedLambdaCapturesChecker webkit og alpha.webkit.UncountedLocalVarsChecker (tekir með í reikninginn sérkenni þess að vinna með ábendingar í WebKit vélkóðanum).
  • Í tjáningum sem notuð eru í samhengi við fasta er notkun innbyggðra aðgerða __builtin_bitreverse*, __builtin_rotateleft*, __builtin_rotateleft*, __mm_popcnt*, _bit_scan_forward, __bsfd, __bsfq, __bit_scan_reverse, __bsrd, __bsrd, __bsrd, __bsrd, __bsrd, __bsrd, __bsrd, __bsr __ er leyfilegt bswapq , _castf*, __rol* og __ror*.
  • Bætti BitFieldColonSpacing valkosti við clang-snið tólið til að velja bilið í kringum auðkenni, dálka og skilgreiningar á reitum.
  • Clangd skyndiminni miðlarinn (Clang Server) á Linux pallinum hefur dregið verulega úr minnisnotkun við langtíma notkun (reglubundin símtöl til malloc_trim eru veitt til að skila ókeypis minnissíðum í stýrikerfið).

Helstu nýjungar í LLVM 12.0:

  • Stuðningur við llvm-build byggingartólið skrifað í Python hefur verið hætt, og í staðinn hefur verkefnið algjörlega skipt yfir í að nota CMake byggingarkerfið.
  • Í bakenda fyrir AArch64 arkitektúrinn hefur stuðningur við Windows vettvanginn verið bættur: tryggt hefur verið að búa til assembler framleiðsla fyrir markkerfi Windows, búið sé að fínstilla gagnaframleiðslu um að vinda ofan af símtölum (stærð slíkra gagna hefur verið minnkað um 60 %), getu til að búa til vinda af gögnum með því að nota assembler hefur verið bætt við tilskipunum .seh_*.
  • Bakendinn fyrir PowerPC arkitektúrinn býður upp á nýjar fínstillingar fyrir lykkjur og innbyggða dreifingu, aukinn stuðning fyrir Power10 örgjörva, bættan stuðning við MMA leiðbeiningar fyrir fylkismeðferð og bættan stuðning við AIX stýrikerfið.
  • x86 bakendinn bætir við stuðningi við AMD Zen 3, Intel Alder Lake og Intel Sapphire Rapids örgjörva, sem og HRESET, UINTR og AVXVNNI örgjörvaleiðbeiningar. Stuðningur við MPX (Memory Protection Extensions) til að athuga ábendingar til að tryggja að minnismörk séu ekki lengur studd (þessi tækni er ekki útbreidd og hefur þegar verið fjarlægð úr GCC og clang). Bætti við stuðningi við samsetningarforritið fyrir {disp32} og {disp8} forskeyti og .d32 og .d8 viðskeyti til að stjórna stærð óperandjöfnunar og stökkum. Bætti við nýjum eiginleikum „tune-cpu“ til að stjórna innlimun örarkitektúrlegra hagræðinga.
  • Nýrri stillingu „-fsanitize=unsigned-shift-base“ hefur verið bætt við heiltöluvandræðaskynjarann ​​(heiltöluhreinsiefni, „-fsanitize=heiltala“) til að greina flæði óundirritaðra heiltalna eftir bitafærslu til vinstri.
  • Í ýmsum skynjara (asan, cfi, lsan, msan, tsan, ubsan hreinsiefni) hefur stuðningi við Linux dreifingu með venjulegu Musl bókasafni verið bætt við.
  • Getu LLD tengilinn hefur verið aukin. Bættur stuðningur við ELF sniðið, þar á meðal bættu valmöguleikana "--dependent-file", "-error-handling-script", "-lto-gervi-probe-for-profiling", "-no-lto-whole-program -skyggni"" Bættur MinGW stuðningur. Fyrir Mach-O sniðið (macOS) hefur stuðningur við arm64, arm og i386 arkitektúr, hlekkitíma fínstillingu (LTO) og bunka afspólun fyrir meðhöndlun undantekninga verið innleidd.
  • Libc++ innleiðir nýja eiginleika C++20 staðalsins og hefur hafið þróun á eiginleikum C++2b forskriftarinnar. Bætti við stuðningi við byggingu með því að slökkva á staðsetningarstuðningi ("-DLIBCXX_ENABLE_LOCALIZATION=OFF") og tækjum til að búa til gervi-handahófskenndar tölur ("-DLIBCXX_ENABLE_RANDOM_DEVICE=OFF").

Heimild: opennet.ru

Bæta við athugasemd