Verëffentlechung vun der LLVM 9.0 Compiler Suite

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

Nei Features vum LLVM 9.0 enthalen d'Entfernung vum experimentellen Designtag vun der Zil-RISC-V Plattform, C++ Ënnerstëtzung fir OpenCL, d'Fäegkeet fir e Programm an dynamesch gelueden Deeler an LLD opzedeelen, an d'Ëmsetzung vun der "asm goe", am Linux Kernel Code benotzt. libc ++ bäigefüügt Ënnerstëtzung fir WASI (WebAssembly System Interface), an LLD bäigefüügt initial Ënnerstëtzung fir WebAssembly dynamesch Verknëppung.

Verbesserungen am Clang 9.0:

  • Dobäigesat Ëmsetzung vum GCC-spezifesche Ausdrock "asm goe", wat Iech erlaabt vun engem Assembler Inline Block op e Label am C Code ze plënneren. Dës Fonktioun ass erfuerderlech fir de Linux Kernel am "CONFIG_JUMP_LABEL=y" Modus ze bauen mat Clang op Systemer mat x86_64 Architektur. Wann Dir d'Ännerunge berécksiichtegt, déi a fréiere Verëffentlechunge bäigefüügt ginn, kann de Linux Kernel elo am Clang fir d'x86_64 Architektur gebaut ginn (virdrun nëmmen Gebaier fir den Aarm, aarch64, ppc32, ppc64le a mips Architekturen gouf ënnerstëtzt). Ausserdeem sinn Android an ChromeOS Projete scho konvertéiert fir Clang fir Kernelbau ze benotzen, a Google testt Clang als Haaptplattform fir Kernels fir seng Produktioun Linux Systemer ze bauen. An Zukunft kënnen aner LLVM Komponenten am Kärelbauprozess benotzt ginn, dorënner LLD, llvm-objcopy, llvm-ar, llvm-nm, an llvm-objdump;
  • Zousätzlech experimentell Ënnerstëtzung fir C ++ 17 an OpenCL ze benotzen. Spezifesch Funktiounen enthalen Ënnerstëtzung fir Adressraumattributer, Blockéierung vun Adressraumkonvertéierung duerch Typ Casting Bedreiwer, Versuergung vu Vektortypen wéi an OpenCL fir C, d'Präsenz vu spezifesche OpenCL Typen fir Biller, Eventer, Kanäl, asw.
  • Nei Compiler Fändelen "-ftime-trace" an "-ftime-trace-granularity=N" bäigefüügt fir e Bericht iwwer d'Ausféierungszäit vu verschiddene Stadien vum Frontend (Parsing, Initialiséierung) an Backend (Optimisatiounsstadien) ze generéieren. De Bericht gëtt am json Format gespäichert, kompatibel mat chrome://tracing a speedscope.app;
  • Zousätzlech Veraarbechtung vum "__declspec (allocator)" Spezifizéierer a Generatioun vu begleedend Debugginginformatioun, déi Iech erlaabt Erënnerungsverbrauch am Visual Studio Ëmfeld ze iwwerwaachen;
  • Fir d'C Sprooch gouf Ënnerstëtzung fir den "__FILE_NAME__" Makro bäigefüügt, deen dem "__FILE__" Makro gläicht, awer nëmmen den Dateinumm ouni de ganze Wee enthält;
  • C ++ huet d'Ënnerstëtzung fir Adressraumattributer erweidert fir verschidde C ++ Features ze decken, dorënner Parameter- an Argumentmuster, Referenztypen, Retourtyp Inferenz, Objeten, automatesch generéiert Funktiounen, agebaute Betreiber a méi.
  • D'Kapazitéite verbonne mat der Ënnerstëtzung fir OpenCL, OpenMP an CUDA goufen erweidert. Dëst beinhalt d'initial Ënnerstëtzung fir implizit Inklusioun vun agebaute OpenCL Funktiounen (de "-fdeclare-opencl-builtins" Fändel gouf bäigefüügt), d'cl_arm_integer_dot_product Extensioun gouf implementéiert, an d'Diagnostik Tools goufen erweidert;
  • D'Aarbecht vum statesche Analysator gouf verbessert an d'Dokumentatioun fir d'statesch Analyse auszeféieren ass bäigefüügt. Fändelen bäigefüügt fir verfügbare Checker Moduler an ënnerstëtzt Optiounen ze weisen ("-analyzer-checker[-option]-help", "-analyzer-checker[-option]-help-alpha" an "-analyzer-checker[-option]-help "-Entwéckler"). Derbäigesat "-analyzer-werror" Fändel fir Warnungen als Feeler ze behandelen.
    Nei Verifikatiounsmodi bäigefüügt:

    • security.insecureAPI.DeprecatedOrUnsafeBufferHandling fir onsécher Praktiken ze identifizéieren fir mat Pufferen ze schaffen;
    • osx.MIGChecker fir Violatioune vu MIG (Mach Interface Generator) Opruff Regelen ze sichen;
    • optin.osx.OSObjectCStyleCast fir falsch XNU libkern Objet Konversiounen ze fannen;
    • apiModeling.llvm mat enger Rei vu Modelléierungskontrollfunktiounen fir Feeler an der LLVM Codebase z'entdecken;
    • Stabiliséiert Code fir eng kontrolléieren uninitialized C ++ Objete (UninitializedObject am optin.cplusplus Pak);
  • D'Clang-Format Utility huet Ënnerstëtzung fir Formatéierungscode an der C # Sprooch bäigefüügt a bitt Ënnerstëtzung fir de Code Formatéierungsstil benotzt vu Microsoft;
  • clang-cl, eng alternativ Kommandozeil-Interface, déi Optiounsniveau Kompatibilitéit mam cl.exe Compiler am Visual Studio enthält, huet Heuristik bäigefüügt fir net existent Dateien als Kommandozeiloptiounen ze behandelen an eng entspriechend Warnung ze weisen (zum Beispill, wann Dir "clang-cl /diagnostic:caret /c test.cc" leeft);
  • E groussen Deel vun neie Schecken huet zu linter clang-ugefaangen dobäi ginn, dorënner dobäi Kontrollen spezifesch fir OpenMP API;
  • Erweidert Server Kënnen kléngt (Clang Server), an deem den Background Index Baumodus als Standard aktivéiert ass, Ënnerstëtzung fir kontextuell Aktiounen mat Code gouf bäigefüügt (Variabel Retrieval, Expansioun vun Auto a Makro Definitiounen, Konversioun vun entkommt Strings op net entloossene), d'Fäegkeet fir ze weisen Warnungen vu Clang-toyy, erweidert Diagnostik vu Feeler an Headerdateien a bäigefüügt d'Fäegkeet fir Informatioun iwwer d'Typhierarchie ze weisen;

Haaptstrooss Innovatiounen LLVM 9.0:

  • Eng experimentell Partitionéierungsfunktioun gouf zum LLD Linker bäigefüügt, wat Iech erlaabt Iech e Programm an e puer Deeler opzedeelen, déi all an enger separater ELF Datei läit. Dës Fonktioun erlaabt Iech den Haaptdeel vum Programm ze starten, deen aner Komponenten wéi néideg während der Operatioun lueden (zum Beispill kënnt Dir den agebaute PDF Viewer an eng separat Datei trennen, déi nëmme lued wann de Benotzer den PDF opmaacht Datei).

    LLD Linker an de Virdergrond bruecht zu engem Zoustand gëeegent fir de Linux Kernel fir arm32_7, arm64, ppc64le an x86_64 Architekturen ze verbannen.
    Nei Optiounen "-" (Output zu stdout), "-[no-]allow-shlib-undefined", "-undefined-glob", "-nmagic", "-omagic", "-dependent-library", "- z ifunc-noplt" an "-z gemeinsam Säit-Gréisst". Fir d'AARch64 Architektur, Ënnerstëtzung fir BTI (Branch Target Indicator) a PAC (Pointer Authentication Code) Instruktioune gouf bäigefüügt. Ënnerstëtzung fir MIPS, RISC-V a PowerPC Plattforme gouf wesentlech verbessert. Ugefaangen initial Ënnerstëtzung fir dynamesch Verknëppung fir WebAssembly;

  • An libc++ ëmgesat Funktiounen ssize, std :: ass_konstant_evaluéiert, std :: midpoint an std :: lerp, Methoden "front" an "back" goufen zu std :: span bäigefüügt, Attributer vun Typen std :: is_unbounded_array an std :: is_bounded_array goufen dobäigesat , std Fäegkeeten goufen erweidert: :atomic. Ënnerstëtzung fir GCC 4.9 gouf gestoppt (kann mat GCC 5.1 a méi nei Verëffentlechungen benotzt ginn). Zousätzlech Ënnerstëtzung WASI (WebAssembly System Interface, eng Interface fir WebAssembly ausserhalb vum Browser ze benotzen);
  • Nei Optimisatiounen goufen derbäigesat. Aktivéiert Konversioun vu memcmp rifft op bcmp an e puer Situatiounen. Implementéiert Ofdreiwung vu Rangekontrolle fir Sprangtabellen, an deenen déi ënnescht Schaltblocken net erreechbar sinn oder wann d'Instruktioune net benotzt ginn, zum Beispill, wann Dir Funktiounen mat Typ ongëlteg rufft;
  • De Backend fir d'RISC-V Architektur gouf stabiliséiert, déi net méi als experimentell positionéiert ass a par défaut gebaut gëtt. Bitt voll Code Generatioun Ënnerstëtzung fir RV32I an RV64I Instruktiounsset Varianten mat MAFDC Extensiounen;
  • Vill Verbesserunge goufen u Backends fir X86, AArch64, ARM, SystemZ, MIPS, AMDGPU a PowerPC Architekturen gemaach. Zum Beispill, fir Architektur
    AArch64 huet Ënnerstëtzung fir SVE2 (Scalable Vector Extension 2) an MTE (Memory Tagging Extensions) Instruktioune bäigefüügt; am ARM Backend gouf Ënnerstëtzung fir d'Arv8.1-M Architektur an d'MVE (M-Profile Vector Extension) Extensioun bäigefüügt. Ënnerstëtzung fir d'GFX10 (Navi) Architektur gouf op den AMDGPU Backend bäigefüügt, Funktiounsrufffäegkeeten sinn als Standard aktivéiert, an e kombinéierte Pass ass aktivéiert DPP (Data-Parallel Primitiv).

  • De LLDB Debugger huet elo Faarfbeliichtung fir Backtraces an zousätzlech Ënnerstëtzung fir d'DWARF4 debug_types an DWARF5 debug_info Blocks;
  • Ënnerstëtzung fir Objekt- an ausführbar Dateien am COFF-Format gouf an d'llvm-objcopy an llvm-strip Utilities bäigefüügt.

Source: opennet.ru

Setzt e Commentaire