Vrystelling van die LLVM 12.0-samestellersuite

Na ses maande se ontwikkeling word die vrystelling van die LLVM 12.0-projek aangebied - 'n GCC-versoenbare gereedskapstel (samestellers, optimeerders en kode-opwekkers) wat programme saamstel in 'n intermediêre bitkode van RISC-agtige virtuele instruksies ('n laevlak virtuele masjien met 'n multi-vlak optimering stelsel). Die gegenereerde pseudo-kode kan omgeskakel word deur die JIT-samesteller in masjieninstruksies op die tydstip van programuitvoering.

Verbeterings in Clang 12.0:

  • Ondersteuning vir die "waarskynlike" en "onwaarskynlike" eienskappe wat in die C++20-standaard voorgestel word, is by verstek geïmplementeer en geaktiveer, sodat die optimeerder ingelig kan word oor die waarskynlikheid dat die voorwaardelike konstruk geaktiveer word (byvoorbeeld, "[[waarskynlik) ]] if (willekeurig > 0) {“).
  • Bygevoeg ondersteuning vir AMD Zen 3 (-march=znver3), Intel Alder Lake (-march=alderlake) en Intel Sapphire Rapids (-march=sapphirerapids) verwerkers.
  • Bygevoeg ondersteuning vir "-march=x86-64-v[234]"-vlae om x86-64 argitektuurvlakke te kies (v2 - dek SSE4.2, SSSE3, POPCNT en CMPXCHG16B uitbreidings; v3 - AVX2 en MOVBE; v4 - AVX-512 ) .
  • Bygevoeg ondersteuning vir Arm Cortex-A78C (cortex-a78c), Arm Cortex-R82 (cortex-r82), Arm Neoverse V1 (neoverse-v1), Arm Neoverse N2 (neoverse-n2) en Fujitsu A64FX (a64fx) verwerkers. Byvoorbeeld, om optimaliserings vir Neoverse-V1 SVE's te aktiveer, kan jy "-mcpu=neoverse-v1" spesifiseer.
  • Vir die AArch64-argitektuur is nuwe samestellervlae "-moutline-atomics" en "-mno-outline-atomics" bygevoeg om atoomoperasie-helperfunksies, soos "__aarch64_cas8_relax" te aktiveer of te deaktiveer. Sulke funksies bespeur tydens looptyd of LSE (Large System Extensions) ondersteuning beskikbaar is en gebruik die verskafde atoomverwerkerinstruksies of val terug na die gebruik van LL/SC (Laai-skakel/winkelvoorwaardelike) instruksies vir sinchronisasie.
  • Bygevoeg "-fbinutils-weergawe" opsie om die teiken weergawe van die binutils suite te kies vir versoenbaarheid met ouer skakelaar en samesteller gedrag.
  • Vir ELF-uitvoerbare lêers, wanneer die "-gz"-vlag gespesifiseer is, is die kompressie van ontfoutingsinligting met behulp van die zlib-biblioteek by verstek geaktiveer (gz=zlib). Om die resulterende objeklêers te koppel, vereis lld of GNU binutils 2.26+. Om verenigbaarheid met ouer weergawes van binutils te herstel, kan jy "-gz=zlib-gnu" spesifiseer.
  • Die 'hierdie' wyser word nou verwerk met nie-nul- en afwysbare (N) tjeks. Om die nonnull-kenmerk te verwyder, as jy NULL-waardes moet gebruik, kan jy die "-fdelete-null-pointer-checks" opsie gebruik.
  • Op die Linux-platform is die "-fasinchronous-unwind-tables"-modus geaktiveer vir die AArch64- en PowerPC-argitekture om ontspan-oproeptabelle te genereer, soos in GCC.
  • In "#pragma clang lus vectorize_width" het die vermoë bygevoeg om die "fixed" (verstek) en "scalable" opsies te spesifiseer om die vektoriseringsmetode te kies. Die "skaalbare" modus, onafhanklik van vektorlengte, is eksperimenteel en kan gebruik word op hardeware wat skaalbare vektorisering ondersteun.
  • Verbeterde ondersteuning vir die Windows-platform: Amptelike binêre samestellings vir Windows op Arm64-stelsels is voorberei, insluitend die Clang-samesteller, LLD-skakelaar en samesteller-rt-looptydbiblioteke. As u vir MinGW-teikenplatforms bou, word die .exe-agtervoegsel bygevoeg, selfs tydens kruissamestelling.
  • Die vermoëns wat verband hou met ondersteuning vir OpenCL, OpenMP en CUDA is uitgebrei. Bygevoeg opsies "-cl-std=CL3.0" en "-cl-std=CL1.0" om makro-opsies vir OpenCL 3.0 en OpenCL 1.0 te kies. Diagnostiese instrumente is uitgebrei.
  • Bygevoeg ondersteuning vir die HRESET-, UINTR- en AVXVNNI-instruksies wat in sommige x86-gebaseerde verwerkers geïmplementeer is.
  • Op x86-stelsels is ondersteuning vir die "-mtune="-opsie geaktiveer, wat geselekteerde mikroargitektoniese optimerings moontlik maak, ongeag die "-march="-waarde.
  • Die statiese ontleder het die verwerking van sommige POSIX-funksies verbeter en die bepaling van die resultaat van voorwaardelike bewerkings aansienlik verbeter wanneer daar verskeie simboliese waardes in die vergelyking is. Nuwe tjeks is bygevoeg: fuchia.HandleChecker (definieer handvatsels in strukture), webkit.UncountedLambdaCapturesChecker webkit en alpha.webkit.UncountedLocalVarsChecker (neem die eienaardighede van die werk met wysers in die WebKit-enjinkode in ag).
  • In uitdrukkings wat in die konteks van konstantes gebruik word, die gebruik van ingeboude funksies __builtin_bitreverse*, __builtin_rotateleft*, __builtin_rotateleft*, _mm_popcnt*, _bit_scan_forward, __bsfd, __bsfq, __bit_scan_reverse, __bsr, __bsr, __bsd, __bsd, __bsd, __bsr, __bsd, __bsr __ word toegelaat bswapq , _castf*, __rol* en __ror*.
  • Het 'n BitFieldColonSpacing-opsie by die clang-formaat-nutsding gevoeg om die spasiëring rondom identifiseerders, kolomme en velddefinisies te kies.
  • Die clangd-kasbediener (Clang Server) op die Linux-platform het geheueverbruik aansienlik verminder tydens langtermynwerking (periodieke oproepe na malloc_trim word verskaf om gratis geheuebladsye na die bedryfstelsel terug te stuur).

Sleutelinnovasies in LLVM 12.0:

  • Ondersteuning vir die llvm-build bou-instrument wat in Python geskryf is, is gestaak, en in plaas daarvan het die projek heeltemal oorgeskakel na die gebruik van die CMake-boustelsel.
  • In die backend vir die AArch64-argitektuur is ondersteuning vir die Windows-platform verbeter: korrekte generering van samesteller-uitset vir teiken Windows-stelsels is verseker, generering van data op ontwikkeloproepe is geoptimaliseer (die grootte van sulke data is met 60 verminder %), die vermoë om ontspanningsdata te skep met behulp van assembler is instruksies .seh_* bygevoeg.
  • Die agterkant vir die PowerPC-argitektuur bevat nuwe optimaliserings vir lusse en inlyn-ontplooiing, uitgebreide ondersteuning vir Power10-verwerkers, bygevoegde ondersteuning vir MMA-instruksies vir matriksmanipulasie, en verbeterde ondersteuning vir die AIX-bedryfstelsel.
  • Die x86 backend voeg ondersteuning by vir AMD Zen 3, Intel Alder Lake en Intel Sapphire Rapids verwerkers, sowel as HRESET, UINTR en AVXVNNI verwerker instruksies. Ondersteuning vir MPX (Geheuebeskermingsuitbreidings) om wysers na te gaan om te verseker dat geheuegrense nie meer ondersteun word nie (hierdie tegnologie is nie wydverspreid nie en is reeds van GCC verwyder en klink). Bygevoeg ondersteuning by die samesteller vir die {disp32} en {disp8} voorvoegsels en die .d32 en .d8 agtervoegsels om die grootte van operand offsets en spronge te beheer. Het 'n nuwe kenmerk "tune-cpu" bygevoeg om die insluiting van mikroargitektoniese optimaliserings te beheer.
  • 'n Nuwe modus "-fsanitize=unsigned-shift-base" is bygevoeg by die heelgetalprobleemdetektor (heelgetalreiniger, "-fsanitize=heelgetal") om oorvloei van ongetekende heelgetalle na 'n bietjie verskuiwing na links op te spoor.
  • In verskeie detektors (asan, cfi, lsan, msan, tsan, ubsan sanitizer) is ondersteuning vir Linux-verspreidings met die standaard Musl-biblioteek bygevoeg.
  • Die vermoëns van die LLD-skakelaar is uitgebrei. Verbeterde ondersteuning vir die ELF-formaat, insluitend die bygevoegde opsies “--afhanklikheid-lêer”, “-fouthantering-skrip”, “-lto-pseudo-probe-for-profiling”, “-no-lto-whole-program -sigbaarheid" " Verbeterde MinGW-ondersteuning. Vir die Mach-O-formaat (macOS), is ondersteuning vir arm64-, arm- en i386-argitekture, skakeltydoptimalisasies (LTO) en stapelontwikkeling vir uitsonderingshantering geïmplementeer.
  • Libc++ implementeer nuwe kenmerke van die C++20-standaard en het begin met die ontwikkeling van kenmerke van die C++2b-spesifikasie. Bygevoeg ondersteuning vir die bou met deaktiveer lokalisering ondersteuning (“-DLIBCXX_ENABLE_LOCALIZATION=OFF”) en toestelle vir die generering van pseudo-ewekansige nommers (“-DLIBCXX_ENABLE_RANDOM_DEVICE=OFF”).

Bron: opennet.ru

Voeg 'n opmerking