Verëffentlechung vun der LLVM 12.0 Compiler Suite

No sechs Méint vun der Entwécklung gouf d'Verëffentlechung vum LLVM 12.0 Projet presentéiert - e GCC-kompatibel Toolkit (Compilatoren, Optimisateuren a Code Generatoren) déi Programmer an Zwëschen Bitcode vu RISC-ähnleche virtuelle Instruktiounen kompiléiert (eng niddereg-Niveau virtuell Maschinn mat engem Multi-Level Optimisatiounssystem). De generéierte Pseudocode ka mat engem JIT Compiler a Maschinninstruktiounen direkt zur Zäit vun der Ausféierung vum Programm ëmgewandelt ginn.

Verbesserungen am Clang 12.0:

  • Ënnerstëtzung fir déi "wahrscheinlech" an "onwahrscheinlech" Attributer, déi am C++20 Standard proposéiert goufen, gouf als Standard ëmgesat an aktivéiert, wat den Optimizer erlaabt iwwer d'Wahrscheinlechkeet vum bedingte Konstrukt ausgeléist ze ginn (zum Beispill, "[[wahrscheinlech) ]] wann (zoufälleg > 0) {“).
  • Zousätzlech Ënnerstëtzung fir AMD Zen 3 (-march = znver3), Intel Alder Lake (-march = alderlake) an Intel Sapphire Rapids (-march = Sapphirerapids) Prozessoren.
  • Zousätzlech Ënnerstëtzung fir "-march=x86-64-v[234]" Fändelen fir x86-64 Architekturniveauen ze wielen (v2 - deckt SSE4.2, SSSE3, POPCNT an CMPXCHG16B Extensiounen; v3 - AVX2 a MOVBE; v4 - AVX-512 ).
  • Zousätzlech Ënnerstëtzung fir Arm Cortex-A78C (Cortex-a78c), Arm Cortex-R82 (Cortex-r82), Arm Neoverse V1 (neoverse-v1), Arm Neoverse N2 (neoverse-n2) a Fujitsu A64FX (a64fx) Prozessoren. Zum Beispill, fir Optimisatiounen fir Neoverse-V1 CPUs z'aktivéieren, kënnt Dir "-mcpu=neoverse-v1" spezifizéieren.
  • Fir d'AARch64 Architektur sinn nei Compiler Fändelen "-moutline-atomics" an "-mno-outline-atomics" bäigefüügt fir Atomoperatiounshëlleffunktiounen z'aktivéieren oder auszeschalten, wéi "__aarch64_cas8_relax". Esou Funktiounen entdecken beim Runtime ob LSE (Large System Extensions) Ënnerstëtzung verfügbar ass a benotzen déi geliwwert Atomprozessorinstruktiounen oder falen zréck op d'Benotzung vun LL / SC (Load-Link / Store-bedingt) Instruktioune fir Synchroniséierung.
  • D'Optioun "-fbinutils-version" bäigefüügt fir d'Zilversioun vun der Binutils Suite ze wielen fir Kompatibilitéit mat eelere Linker an Assembler Verhalen.
  • Fir ELF ausféierbar Dateien, wann de "-gz" Fändel spezifizéiert ass, ass d'Kompressioun vun Debugging Informatioun mat der zlib Bibliothéik als Standard aktivéiert (gz = zlib). Verlinkt déi resultéierend Objektdateien erfuerdert lld oder GNU binutils 2.26+. Fir d'Kompatibilitéit mat eelere Versioune vu Binutils ze restauréieren, kënnt Dir "-gz=zlib-gnu" spezifizéieren.
  • Den 'dësen' Zeiger gëtt elo mat nonnull an dereferenceable (N) Schecken veraarbecht. Fir den nonnull Attribut ze läschen wann Dir NULL Wäerter benotze musst, kënnt Dir d'Optioun "-fdelete-null-pointer-checks" benotzen.
  • Op der Linux Plattform ass den "-fasynchronous-unwind-tables" Modus fir d'AArch64 a PowerPC Architekturen aktivéiert fir Urufftabellen ze generéieren, sou wéi am GCC.
  • Am "#pragma clang loop vectorize_width" huet d'Fäegkeet bäigefüügt fir d'"fix" (Standard) an "scalable" Optiounen ze spezifizéieren fir d'Vektoriséierungsmethod ze wielen. Den "skalierbare" Modus, onofhängeg vun der Vektorlängt, ass experimentell a kann op Hardware benotzt ginn déi skalierbar Vektoriséierung ënnerstëtzt.
  • Verbesserte Ënnerstëtzung fir d'Windows Plattform: Offiziell binär Versammlungen fir Windows op Arm64 Systemer goufen virbereet, dorënner de Clang Compiler, LLD Linker a Compiler-rt Runtime Bibliothéiken. Wann Dir fir MinGW Zilplattformen baut, gëtt den .exe Suffix bäigefüügt, och wann Dir Cross-Compiling.
  • D'Kapazitéite verbonne mat der Ënnerstëtzung fir OpenCL, OpenMP an CUDA goufen erweidert. Zousätzlech Optiounen "-cl-std = CL3.0" an "-cl-std = CL1.0" fir Macrooptiounen fir OpenCL 3.0 an OpenCL 1.0 ze wielen. Diagnostesch Tools goufen erweidert.
  • Ënnerstëtzung bäigefüügt fir d'HRESET, UINTR, an AVXVNNI Instruktioune implementéiert an e puer x86-baséiert Prozessoren.
  • Op x86 Systemer ass d'Ënnerstëtzung fir d'Optioun "-mtune=" aktivéiert, wat ausgewielte mikroarchitektonesch Optimisatiounen erlaabt onofhängeg vum "-march=" Wäert.
  • De statesche Analysator huet d'Veraarbechtung vun e puer POSIX Funktiounen verbessert a wesentlech verbessert Determinatioun vum Resultat vun bedingte Operatiounen wann et e puer symbolesch Wäerter am Verglach sinn. Nei Kontrollen goufen dobäigesat: fuchia.HandleChecker (definéiert Handle a Strukturen), webkit.UncountedLambdaCapturesChecker webkit an alpha.webkit.UncountedLocalVarsChecker (hëlt d'Besonderheete vun der Aarbecht mat Zeiger am WebKit Motorcode berücksichtegt).
  • An Ausdréck, déi am Kontext vun Konstanten benotzt ginn, ass d'Benotzung vun agebaute Funktiounen __builtin_bitreverse*, __builtin_rotateleft*, __builtin_rotateleft*, _mm_popcnt*, _bit_scan_forward, __bsfd, __bsfq, __bit_scan_reverse, __bsr, __bsr, __bsd, __bsd, __bsd, __bsd, __bsd, __bsd, __bsd, __bsd, __bsd, __ ass erlaabt bswapq , _castf*, __rol* an __ror*.
  • Eng BitFieldColonSpacing Optioun fir de Clang-Format Utility bäigefüügt fir d'Distanz ronderëm Identifizéierer, Kolonnen a Felddefinitioune ze wielen.
  • De Clangd Caching Server (Clang Server) op der Linux Plattform huet däitlech reduzéiert Erënnerungsverbrauch während laangfristeg Operatioun (periodesch Uruff un malloc_trim ginn zur Verfügung gestallt fir gratis Erënnerungssäiten an de Betribssystem zréckzekommen).

Schlëssel Innovatiounen am LLVM 12.0:

  • Ënnerstëtzung fir de llvm-build Build Tool geschriwwen am Python ass gestoppt ginn, an amplaz ass de Projet komplett op d'Benotzung vum CMake Build System ëmgewandelt.
  • Am Backend fir d'AARch64 Architektur ass d'Ënnerstëtzung fir d'Windows Plattform verbessert ginn: d'korrekt Generatioun vum Assembleroutput fir Zil-Windows Systemer ass gesuergt, d'Generatioun vun Daten iwwer d'Entspannung vun Uruff gouf optimiséiert (d'Gréisst vun esou Donnéeën ass ëm 60 reduzéiert ginn) %), d'Fähigkeit fir d'Entspanungsdaten mat Assembler ze kreéieren gouf Direktiven .seh_* hinzugefügt.
  • De Backend fir d'PowerPC Architektur weist nei Optimisatiounen fir Loops an Inline Deployment, erweidert Ënnerstëtzung fir Power10 Prozessoren, zousätzlech Ënnerstëtzung fir MMA Instruktioune fir Matrixmanipulatioun, a verbessert Ënnerstëtzung fir den AIX Betribssystem.
  • Den x86 Backend füügt Ënnerstëtzung fir AMD Zen 3, Intel Alder Lake an Intel Sapphire Rapids Prozessoren, souwéi HRESET, UINTR an AVXVNNI Prozessorinstruktiounen. Ënnerstëtzung fir MPX (Memory Protection Extensions) fir Hiweiser ze kontrolléieren fir sécherzestellen datt d'Erënnerungsgrenze net méi ënnerstëtzt ginn (dës Technologie ass net verbreet a gouf scho vu GCC a Clang geläscht). Ënnerstëtzung fir den Assembler bäigefüügt fir d'{disp32} an {disp8} Präfixe an d'.d32 an .d8 Suffixen fir d'Gréisst vun den Operand-Offsets a Sprangen ze kontrolléieren. En neit Attribut "tune-cpu" bäigefüügt fir d'Inklusioun vu mikroarchitektoneschen Optimisatiounen ze kontrolléieren.
  • En neie Modus "-fsanitize = unsigned-shift-base" gouf an den Integer Problem Detector (integer Sanitizer, "-fsanitize = integer") bäigefüügt fir Iwwerschwemmungen vun net ënnerschriwwene ganzen Zuelen no e bësse Verréckelung no lénks z'entdecken.
  • A verschiddenen Detektoren (asan, cfi, lsan, msan, tsan, ubsan sanitizer) Ënnerstëtzung fir Linux Verdeelunge mat der Standard Musl Bibliothéik gouf bäigefüügt.
  • D'Kapazitéite vum LLD Linker goufen erweidert. Verbesserte Ënnerstëtzung fir den ELF-Format, dorënner déi zousätzlech Optiounen "--dependency-file", "-error-handling-script", "-lto-pseudo-probe-for-profiling", "-no-lto-ganz Programm -Visibilitéit"" Verbesserte MinGW Ënnerstëtzung. Fir de Mach-O Format (macOS), Ënnerstëtzung fir Arm64, Arm, an i386 Architekturen, Link-Zäit Optimisatiounen (LTO), a Stack Ofwindung fir Ausnam Handhabung gouf implementéiert.
  • Libc++ implementéiert nei Features vum C++20 Standard an huet ugefaang d'Entwécklung vu Features vun der C++2b Spezifizéierung. Ënnerstëtzung bäigefüügt fir ze bauen mat deaktivéierend Lokaliséierungssupport ("-DLIBCXX_ENABLE_LOCALIZATION=OFF") an Apparater fir pseudo-zoufälleg Zuelen ze generéieren ("-DLIBCXX_ENABLE_RANDOM_DEVICE = OFF").

Source: opennet.ru

Setzt e Commentaire